Análisis técnico del cifrado en QSYRUPWD: cómo IBM i devuelve hashes de contraseñas

Fuentes: The Cipher Behind QSYRUPWD: Reconstructing IBM i Password Hashes

QSYRUPWD es una API de IBM i —la plataforma empresarial heredera de la línea AS/400, todavía extendida en cargas críticas de ERP, finanzas, logística y fabricación— que devuelve, en forma cifrada, datos relacionados con la contraseña de un perfil de usuario a llamantes autorizados. Su función principal es soportar sincronización, migración y replicación de credenciales sin exponer la contraseña en claro. Este artículo describe un análisis técnico realizado por un pentester tras detectar, en una auditoría, que el servidor del cliente operaba con QPWDLVL = 2. El valor del sistema QPWDLVL determina tanto las reglas de contraseñas aceptadas como los formatos de los verificadores almacenados: los niveles 0 y 1 usan esquemas basados en DES, los niveles 2 y 3 recurren a SHA-1 con sal, y el nivel 4 introduce un modelo con PBKDF2. Con QPWDLVL = 2, el sistema conserva compatibilidad con varios verificadores, lo que afecta a la interpretación de la salida de QSYRUPWD. El autor comprobó que los formatos as400_des y as400_ssha1 de John the Ripper, diseñados para material heredado, no encajan con los datos que la API devuelve en sistemas QPWDLVL 2–4, mientras que sí lo hacen en QPWDLVL 0–1, una observación empírica y no documentada oficialmente por IBM. Para investigar el comportamiento interno de la API, se programó un pequeño CL que invoca QSYRUPWD con el formato UPWD0100 y vuelca el buffer resultante, junto con el comando STRTRC de IBM i, que registra la traza de llamadas internas (incluyendo módulos como QLEIT, QZLSRTPW, QSYSERV y QSYMIUTLS) y permite reconstruir el flujo que la API sigue al recuperar la información de la contraseña. El artículo expone el código CL utilizado, los comandos de traza y un fragmento del archivo de spool procesado, ilustrando el método para reproducir y estudiar el cifrado de contraseñas en IBM i.