
Auditoría offline rápida de contraseñas de Active Directory usando Python.
Auditoría offline rápida de contraseñas de Active Directory usando Python.
Lil Pwny es una aplicación en Python para realizar una auditoría offline de hashes NTLM de contraseñas de usuarios, recuperados de Active Directory, contra contraseñas comprometidas conocidas de Have I Been Pwned. Los resultados se mostrarán en formato JSON que contiene el nombre de usuario, el hash coincidente (se puede ofuscar) y cuántas veces se ha visto la contraseña coincidente en HIBP.
Más información sobre Lil Pwny se puede encontrar en mi blog
Lil Pwny proporciona la funcionalidad de mejorar tu lista de contraseñas personalizadas agregando variantes de uso común de tus contraseñas personalizadas. Estas incluyen:
P@ssw0rd)PASSWORD, Password)password!, !password)password123!, !passwordabc, passwordpassword)
password1950, password2034)Una lista de contraseñas personalizadas de 100 contraseñas en texto plano genera 49848660 variaciones.
Lil Pwny busca usuarios que están usando variaciones de su nombre de usuario como contraseña.
Convierte el nombre de usuario del usuario en los siguientes formatos:
Estos se convierten luego a hashes NTLM y se auditan contra los hashes de AD
Esta aplicación ha sido desarrollada para aprovechar al máximo el multiprocesamiento en Python, con el objetivo de que funcione lo más rápido posible en hardware de nivel de consumo.
Debido a que usa multiprocesamiento, cuantos más núcleos tengas disponibles, más rápido debería ejecutarse Lil Pwny. Aún así he obtenido muy buenos resultados con un número bajo de núcleos lógicos:
Lil Pwny mostrará los resultados ya sea en stdout:
o en JSON:
{"localtime": "2021-00-00 00:00:00,000", "level": "NOTIFY", "source": "Lil Pwny", "match_type": "hibp", "detection_data": {"username": "RICKON.STARK", "hash": "32ED87BDB5FDC5E9CBA88547376818D4", "matches_in_hibp": "24230577", "obfuscated": "True"}}
Puedes redirigir la salida JSON de Lil Pwny a un archivo:
lil-pwny -ad ... > lil-pwny-results.json
Este registro en formato JSON puede ser fácilmente ingerido en un SIEM u otra herramienta de análisis de registros, y puede ser alimentado a otros scripts o plataformas para acciones de resolución automatizadas.
Instalar mediante pip
pip install lil-pwny
Lil-pwny se instalará como un comando global, úsalo de la siguiente manera:
usage: lil-pwny [-h] -hibp HIBP [-v] [-c CUSTOM] [-custom-enhance CUSTOM_ENHANCE] -ad AD_HASHES [-d] [-output {file,stdout,json}] [-o] [--verbose]
Auditoría offline rápida de contraseñas de Active Directory usando Python
opciones:
-h, --help muestra este mensaje de ayuda y sale
-hibp HIBP, --hibp HIBP
El archivo .txt que contiene los hashes NTLM de HIBP
-v, --version muestra el número de versión del programa y sale
-c CUSTOM, --custom CUSTOM
Archivo .txt que contiene contraseñas personalizadas adicionales para verificar
-custom-enhance CUSTOM_ENHANCE, --custom-enhance CUSTOM_ENHANCE
genera una lista de contraseñas personalizadas mejorada basada en la lista proporcionada. Debe usarse con el flag -c/--custom. La lista mejorada se almacenará en memoria y no se
escribirá en disco. Proporciona la longitud mínima de las contraseñas que deseas. El valor predeterminado es 8
-ad AD_HASHES, --ad-hashes AD_HASHES
El archivo .txt que contiene los hashes NTLM de los usuarios de AD
-d, --duplicates Muestra una lista de usuarios con contraseñas duplicadas
-output {file,stdout,json}, --output {file,stdout,json}
Dónde enviar los resultados
-o, --obfuscate Ofusca los hashes de las coincidencias encontradas aplicándoles un hash con una sal aleatoria
--verbose Activa el registro detallado
Ejemplo:
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_user_hashes.txt -c ~/custom_passwords.txt -output stdout -do
En un controlador de dominio usa ntdsutil para generar un volcado IFM de tu dominio AD. Ejecuta lo siguiente en una ventana de PowerShell elevada:
ntdsutil
activate instance ntds
ifm
create full **ruta de salida**
Para recuperar los hashes NTLM de los datos IFM de AD, se requiere el módulo de PowerShell DSInternals.
Una vez instalado, usa el hive SYSTEM en los datos IFM para recuperar los hashes en el formato usuario:hash y guárdalos en el archivo ad_ntlm_hashes.txt
$bootKey = Get-BootKey -SystemHivePath '.\registry\SYSTEM'
Get-ADDBAccount -All -DBPath '.\Active Directory\ntds.dit' -BootKey $bootKey | Format-Custom -View HashcatNT | Out-File ad_ntlm_hashes.txt -Encoding ASCII
El archivo se puede descargar desde la API de HIBP usando una utilidad .net aquí
El script de PowerShell en el directorio scripts se puede usar para eliminar cuentas no deseadas de la salida IFM antes de procesar. Estas incluyen: