Reversible password storage
Guardar una contraseña con un cifrado reversible (o una simple codificación por tabla) es, a efectos prácticos, guardarla en texto plano: quien lee el fichero y conoce (o deduce) el algoritmo recupera la contraseña. A diferencia de un hash lento y con sal, no hay que "romper" nada, solo deshacer la operación.
El patrón y cómo revertirlo
El caso típico es una aplicación que cifra su propia contraseña de administrador en un .ini/.conf con un esquema hecho a mano. Por ejemplo, Argus Surveillance DVR mapea cada carácter a un bloque hexadecimal fijo; su DVRParams.ini guarda Password0=ECB453D1... y basta con invertir la tabla:
ECB4->1 53D1->4 6069->W F641->a E03B->t ... -> 14WatchD0g...Un exploit público suele traer la tabla; si algún bloque falta, el resto de la contraseña ya conocida permite completarla con un bruteforce mínimo del último carácter (por ejemplo contra SMB). El mismo principio aparece en muchos formatos conocidos, para los que ya hay decodificador:
# Cisco Type 7 (config de router/switch)
echo '<type7>' | ciscot7 -d # o https://github.com/theevilbit/ciscot7
# GPP cPassword (SYSVOL de AD, clave AES publicada por Microsoft)
gpp-decrypt <cpassword>
# VNC guarda la contrasena XOR con una clave fija en el registro/fichero
# "cifrados" caseros que en realidad son base64
echo '<blob>' | base64 -dEs un origen de credenciales tan válido como los secretos en el código, y a menudo la contraseña recuperada se reutiliza en otros servicios (reutilización de credenciales).
Requisitos
Acceso de lectura al fichero/registro donde la aplicación guarda su secreto e identificar el algoritmo de codificación (normalmente por el nombre del producto). No hace falta ni diccionario ni GPU: la reversión es determinista e instantánea.
Matices. No confundir con crackear un hash: aquí no hay diccionario ni fuerza bruta contra una función unidireccional, sino una transformación invertible. Que el valor "parezca" un hash (largo, hexadecimal) no significa que lo sea; conviene identificar el algoritmo (nombre del producto + "password encryption") antes de asumir que hace falta crackear. En AD, activar el atributo "Store password using reversible encryption" en una cuenta o GPO tiene el mismo efecto: la contraseña sale en claro con un DCSync.
Cómo detectarlo. La reversión ocurre offline en la máquina del atacante y no deja rastro propio, así que la detección se sitúa a los lados: la lectura del fichero de configuración con el secreto (un 4663/4688 sobre el .ini/.conf, o acceso al SYSVOL en el caso GPP) y, sobre todo, la reutilización de la credencial recuperada (un login válido de esa cuenta desde un host o a una hora inusuales). En AD, una consulta que active ENCRYPTED_TEXT_PWD_ALLOWED o un DCSync selectivo son la firma del abuso del atributo reversible.
Defensa. Nunca "cifrar" contraseñas con esquemas reversibles ni caseros. Si el sistema debe autenticar contra un servicio externo y necesita el secreto en claro, protegerlo con el almacén de credenciales del SO y permisos estrictos; para verificar contraseñas propias, usar hashes lentos con sal (bcrypt, Argon2). En AD, no habilitar nunca "reversible encryption". Es hermano del cPassword en GPP.
Máquinas donde se aplica
- DVR4Proving Grounds Practice