Saltearse al contenido

Enumeración de Active Directory

Active Directory es una base de datos jerárquica (LDAP) que describe toda la organización: usuarios, grupos, equipos, políticas y las relaciones entre ellos. Lo decisivo es que cualquier usuario del dominio autenticado puede leer casi todo: quién es admin, qué máquinas existen, qué cuentas tienen SPN, qué ACLs mandan. Enumerar AD es cartografiar el terreno antes de atacar; de aquí salen Kerberoasting, rutas de ACL, delegaciones y el camino a Domain Admin.

El diseño de AD prioriza la interoperabilidad: leer el directorio es un derecho por defecto de cualquier cuenta de dominio. Esa lectura masiva —objetos, atributos, membresías, ACLs— le da al atacante el mapa completo de privilegios sin tocar nada “roto”. El defensor ve consultas LDAP legítimas en apariencia; distinguir recon de uso normal es el reto.

Con unas credenciales de dominio cualesquiera (o incluso sin ellas para parte), ya se puede enumerar. Sin credenciales: enumeración “unauth” limitada (null sessions, LLMNR, usuarios por Kerberos).

# usuarios válidos por Kerberos (no requiere password)
kerbrute userenum -d dominio.local --dc <DC> users.txt
# null session / RID cycling (si SMB lo permite)
enum4linux-ng -A <DC>
rpcclient -U "" -N <DC> # enumdomusers, querydispinfo
# anonymous LDAP (raro hoy)
ldapsearch -x -H ldap://<DC> -s base namingcontexts

Herramienta moderna de referencia, NetExec (nxc):

nxc smb <DC> -u user -p pass --users --groups --shares --pass-pol
nxc ldap <DC> -u user -p pass --kerberoasting out.txt --asreproast out.txt
nxc smb <rango> -u user -p pass # barrido de hosts y signing

Enumeración LDAP profunda:

# ldapdomaindump: vuelca TODO el dominio a HTML/JSON/CSV
ldapdomaindump -u 'dominio\user' -p pass ldap://<DC>
# windapsearch / ldapsearch para consultas puntuales
ldapsearch -x -H ldap://<DC> -D 'user@dominio' -w pass -b "DC=dominio,DC=local" "(objectClass=user)"

Desde Windows con credenciales, PowerView:

Get-DomainUser -Properties samaccountname,description # descripciones con passwords
Get-DomainGroup -MemberIdentity user
Get-DomainComputer -Properties dnshostname,operatingsystem
Get-DomainUser -SPN # cuentas Kerberoasteables
Get-DomainUser -PreauthNotRequired # ASREProasteables
Find-DomainShare -CheckShareAccess
Get-NetGPO; Get-DomainGPOLocalGroup # quién es admin local vía GPO
  • Usuarios y descripciones: contraseñas en el campo description/info (clásico).
  • Grupos privilegiados: Domain Admins, Enterprise Admins, Account Operators, DnsAdmins, Backup Operators.
  • SPNs (Kerberoasting) y cuentas sin preauth (ASREProasting).
  • Delegaciones (unconstrained/constrained/RBCD) — ver ad-delegation.
  • ACLs peligrosas (GenericAll, WriteDacl, GenericWrite) sobre usuarios/grupos/OUs — la materia prima de BloodHound.
  • Trusts entre dominios/bosques, GPOs que otorgan admin local, máquinas sin parchear, LAPS readable.
  • Password policy (para spraying sin bloquear cuentas) y adminCount=1.
  • NetExec (nxc) — navaja suiza (SMB/LDAP/WinRM/MSSQL): enum, spray, roasting, shares.
  • BloodHound / SharpHound — grafo de relaciones y rutas de ataque (ficha propia).
  • ldapdomaindump, windapsearch, enum4linux-ng, rpcclient, kerbrute.
  • PowerView (PowerShell) y AD module (Get-ADUser, etc.).
  • adPEAS, PingCastle (también perspectiva defensiva).

La enumeración no compromete, pero define todo el ataque: de aquí salen las cuentas a rostizar, las ACLs a abusar, las delegaciones a explotar y el camino más corto a DA. Un recon completo suele hacer innecesario cualquier exploit.

  • Consultas LDAP masivas/anómalas (SharpHound, ldapdomaindump) desde una workstation de usuario.
  • kerbrute/AS-REQ masivos (muchos 4768/4771), null sessions (enum4linux), lecturas de ms-Mcs-AdmPwd (LAPS).
  • Acceso a muchos objetos/atributos en poco tiempo por una sola cuenta.
  • 4662 (operaciones sobre objetos del directorio) con auditoría fina en objetos sensibles.
  • Logs LDAP del DC (Directory Service), eventos 4768/4769 (Kerberos), 5140/5145 (shares).
  • Honeytokens: cuentas/SPN señuelo que, si se consultan/rostizan, delatan recon.
  • Reduce lo que un usuario normal puede leer donde sea viable; limpia descripciones con secretos.
  • Quita SPNs y preauth innecesarios; aplica LAPS con ACL de lectura restringida.
  • Revisa y minimiza ACLs peligrosas y membresías de grupos privilegiados (tiering/PAW).
  • Monitoriza con PingCastle/Purple Knight; despliega honeytokens y alertas de recon.

Si se detecta recon, correlaciona la cuenta origen, revisa qué consultó (para anticipar el siguiente paso) y acelera el cierre de los vectores que ese recon habría revelado (roasting, ACLs).

  • La enumeración LDAP es TTP base en casi toda intrusión de AD (MITRE T1087, T1069, T1482 trust discovery).
  • SharpHound/BloodHound aparece en incontables informes de ransomware (Conti, LockBit) como fase de mapeo previa a DA.
  • Contraseñas en description y GPP (cpassword, MS14-025) siguen siendo hallazgos reales habituales.
  • Sin creds: ¿userenum por Kerberos, null sessions, LLMNR?
  • Con creds: usuarios, grupos, shares, password policy (nxc)
  • Descripciones de usuario con contraseñas
  • SPNs (Kerberoasting) y cuentas sin preauth (ASREProast)
  • Grupos privilegiados y adminCount=1
  • Delegaciones (unconstrained/constrained/RBCD)
  • ACLs peligrosas (GenericAll/WriteDacl) — volcar a BloodHound
  • Trusts, GPOs con admin local, LAPS legible