Lil Pwny es una herramienta escrita en Python que permite comparar de forma offline las contraseñas de un Directorio Activo contra la lista de contraseñas recopiladas en Have I Been Pwned (en adelante HIBP), ya sabéis, la recopilación de contraseñas de muchos data breachs reales.
Y es que hablamos de que actualmente esta recopilación tiene más de 550 millones de contraseñas, así que esta tarea debe hacerse con cierto "mimo". Para ello el autor de la herramienta Andrew Byford aka @_PaperMtn ha implementado multiproceso y opcionalmente permite trabajar en memoria para un indexado más rápido (mínimo 24GBs de RAM). También divide la lista de los hashes de los usuarios de DA en tantos trozos como número de cores -1, dejando ese core libre para manejar la lista compartida entre los procesos. Luego se crea un proceso para que cada uno de los cores busque su parte de la lista de hashes de usuarios en la lista hash de HIBP.
Estas optimizaciones significan que cuanto más hardware se esté utilizando más rápido se ejecutará la auditoría. Por ejemplo, con un servidores de 80 núcleos y 80 GB de RAM se pueden comparar unos 6800 usuarios contra la lista HIBP en 48 minutos.
Además Lil Pwny permite otras características adicionales bastante interesantes como:
- La posibilidad de proporcionar una lista adicional de contraseñas (las más relevantes de las que se sospecha que podrían estar usándose), más bien hashes, para comparar contra los del DA y la lista de HIBP.
- Devuelve una lista de cuentas con las mismas contraseñas. Útil para encontrar usuarios que utilicen la misma contraseña para sus cuentas con privilegios y estándar.
PREPARACIÓN
Paso 1: Obtener un volcado IFM de la base de datos del Directorio Activo
En un controlador de dominio, usar ntdsutil para generar un volcado IFM (Install From Media) del dominio. Ejecutar lo siguiente en una ventana de PowerShell elevada:
ntdsutil
activate instance ntds
ifm
create full **OUTPUT PATH**
Una vez que hayamos generado el snapshot tendremos una copia del ntds.dit.
Paso 2: recuperar los hashes NTLM del output
Para recuperar los hashes NTLM de los datos del fichero ntds.dit, se requiere el módulo DSInternals de Powershell.
Install-Module DSInternals
Una vez instalado, podremos usar la rama SYSTEM para recuperar los hashes en el formato username:hash y guardarlos 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
La salida será como la siguiente:
Paso 3: descargar el último archivo hash HIBP
El archivo se puede descargar desde aquí
INSTALACIÓN
Ahora que tenemos todos los ingredientes vamos a proceder a usar la herramienta:
pip install lil-pwny
O también podemos obtenerlo del repo en Github: https://github.com/PaperMtn/lil-pwny/releases
USO
usage: lil-pwny [-h] -hibp HIBP [-a A] -ad AD_HASHES [-d] [-m] [-o OUTPUT]
optional arguments:
-hibp, --hibp-path The HIBP .txt file of NTLM hashes
-a, --a .txt file containing additional passwords to check for
-ad, --ad-hashes The NTLM hashes from of AD users
-d, --find-duplicates Output a list of duplicate password users
-m, --memory Load HIBP hash list into memory (over 24GB RAM
required)
-o, --out-path Set output path. Uses working dir when not set
Ejemplo:
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_ntlm_hashes.txt -a ~/additional_passwords.txt -o ~/Desktop/Output -m -d
Y finalmente, algunas salidas de ejemplo con resultados:
Usuarios que matchean en HIBP:
Usuarios que matchean contra una lista de passwords custom:
Usuarios que reutilizan la contraseña:
Hola, me ha parecido una idea interesante, pero o algo no entiendo o es muuuuy lento todo, y he hecho mi versión de la idea que evidentemente no require de 80 núcleos y 80 gigas, si no, un núcleo y la RAM que quieras (por defecto unos 400 MB).
ResponderEliminarAcabo de publicarlo en GitHub por si alguien quiere hecharle un ojo: https://github.com/JoshyFun/ntlmpwnd