Saltearse al contenido

Abuso de GPO

Las Group Policy Objects (GPO) son el mecanismo por el que AD aplica configuración a usuarios y equipos: políticas de seguridad, scripts de inicio, instalación de software, tareas programadas, miembros de grupos locales. Una GPO se vincula a OUs, sitios o al dominio, y todos los objetos en ese alcance la ejecutan. Esa potencia es el problema: si un atacante puede modificar una GPO (o crear y vincular una), ejecuta código o concede privilegios en masa en cada equipo afectado —potencialmente todo el dominio.

Las GPO son, de facto, ejecución remota de código a escala, gobernada por ACLs. El riesgo es doble: permisos de escritura sobre una GPO existente (que muchos equipos aplican), y permisos para vincular GPOs a una OU (creas una maliciosa y la enlazas donde haya objetos jugosos). Como las GPO se refrescan solas (~90 min) y se aplican con privilegios de SYSTEM/usuario, el efecto es inmediato y amplio.

# quién puede editar/vincular GPOs (PowerView / BloodHound)
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | ? {$_.ActiveDirectoryRights -match 'Write|Create'}
Get-DomainGPOLocalGroup # GPOs que otorgan membresía de grupo local
Get-DomainGPOUserLocalGroupMapping -Identity user # dónde soy admin local vía GPO

BloodHound marca aristas GenericWrite/GenericAll/WriteDacl sobre GPO y GpLink sobre OUs → rutas de abuso directas.

Con escritura sobre una GPO, se inyecta una acción que se ejecutará en todos los equipos/usuarios del alcance:

# SharpGPOAbuse (Windows): añade una tarea inmediata que corre como SYSTEM
SharpGPOAbuse.exe --AddComputerTask --TaskName "upd" --Author DOMINIO\admin \
--Command "cmd.exe" --Arguments "/c net user atacante P@ss /add & net localgroup administrators atacante /add" \
--GPOName "GPO-Vulnerable"
# pyGPOAbuse (Linux): equivalente desde fuera de Windows
pygpoabuse.py dominio/user:pass -gpo-id <GUID> -command "..."

Acciones típicas inyectables:

  • Immediate scheduled task (como SYSTEM en equipos, o como el usuario) → ejecución de código / shell.
  • Añadir un usuario a Administradores locales en todos los equipos del alcance (Restricted Groups).
  • Script de inicio/logon malicioso; instalación de MSI.
  • Modificar derechos de usuario (p. ej. concederte SeDebug) o políticas de seguridad.

Si la GPO afecta a muchos equipos (o al propio dominio / a la OU de los DCs), esto es escalada masiva o directa a Domain Admin.

Si tienes permiso de GpLink sobre una OU (aunque no sobre GPOs existentes), creas una GPO, le pones la acción maliciosa, y la vinculas a esa OU → los objetos de la OU la aplican.

  • SharpGPOAbuse (Windows) — inyecta tareas, grupos locales, scripts en una GPO.
  • pyGPOAbuse (Linux) — equivalente remoto.
  • PowerView — enumeración de ACLs de GPO y mapeo de admin local por GPO.
  • BloodHound — aristas de abuso (WriteGPO, GpLink) y qué equipos caen.
  • Group3r / PingCastle — auditoría de GPOs (también defensiva).

Ejecución de código como SYSTEM y/o concesión de admin local en todos los equipos del alcance de la GPO, simultáneamente. Sobre una GPO de amplio alcance o sobre la OU de los DCs, es compromiso del dominio completo.

  • Cambios en GPOs (modificación de gPCFileSysPath, ficheros en SYSVOL\...\Policies\): auditar escrituras en SYSVOL y eventos de cambio de GPO.
  • Aparición de tareas programadas / Restricted Groups nuevas aplicadas vía GPO en muchos equipos a la vez.
  • Nuevos vínculos de GPO (gPLink) sobre OUs, especialmente la de DCs.
  • Creación de usuarios locales / adición a Administradores en masa.

Auditoría de cambios en objetos GPO (5136) y de archivos en SYSVOL; Sysmon en endpoints para tareas/scripts aplicados por GPO; alertas sobre cambios en la GPO Default Domain / Domain Controllers.

  • Minimiza quién puede editar y vincular GPOs: audita y recorta las ACLs (WriteGPO/GpLink) con BloodHound/Group3r.
  • Protege especialmente la Default Domain Policy, la Default Domain Controllers Policy y las GPOs vinculadas a la OU de DCs (Tier 0).
  • Monitoriza SYSVOL por cambios; revisa GPOs legacy con GPP (cpassword — MS14-025).
  • Tiering: la gestión de GPOs de Tier 0 solo desde PAWs por cuentas de Tier 0.

Revierte la GPO modificada y su vínculo, elimina tareas/usuarios locales creados en los equipos afectados, rota credenciales expuestas, y si tocó DCs/dominio, trata el dominio como comprometido.

  • El abuso de GPO es TTP de configuración (MITRE T1484.001 Group Policy Modification), no un CVE.
  • MS14-025 (GPP cpassword) — contraseñas cifradas con clave pública conocida en GPP, legibles por cualquier usuario del dominio; hallazgo clásico aún presente.
  • SharpGPOAbuse/pyGPOAbuse aparecen en informes de red team y en intrusiones de ransomware que usan GPO para desplegar el payload a toda la red de golpe.
  • ¿Escritura sobre alguna GPO existente? (BloodHound WriteGPO)
  • ¿Permiso de GpLink sobre alguna OU (incluida la de DCs)?
  • Inyectar immediate task (SharpGPOAbuse/pyGPOAbuse) → ejecución
  • Añadirte a Administradores locales vía GPO (Restricted Groups)
  • ¿La GPO afecta a muchos equipos / a los DCs?
  • GPP legacy con cpassword (MS14-025)
  • Blue: ¿auditoría de cambios de GPO y SYSVOL activa?