
Herramienta ofensiva de volcado y análisis de GPO que aprovecha y enriquece los datos de BloodHound
GPOHound es una herramienta para volcar y analizar Objetos de directiva de grupo (GPO) extraídos del recurso compartido SYSVOL.
Proporciona un formato estructurado y formalizado para ayudar a descubrir configuraciones incorrectas, ajustes inseguros y rutas de escalada de privilegios en entornos de Active Directory.
La herramienta se integra con la base de datos Neo4j de BloodHound, utilizándola como una fuente similar a LDAP para información de Active Directory, al mismo tiempo que la enriquece agregando nuevas relaciones (bordes) y propiedades de nodo basadas en el análisis.
Volca GPOs en un formato JSON estructurado o en árbol
Maneja múltiples dominios
Resuelve nombres de GPO con GUIDs de GPO
Filtra la salida por archivos GPO, GUIDs de GPO y dominios
Busca en pares clave/valor usando expresiones regulares
Agrupa configuraciones por objeto impactado (por ejemplo, Grupos locales, Registro)
Detecta miembros agregados a grupos locales privilegiados
Detecta configuraciones de registro inseguras, credenciales almacenadas y derechos de privilegio
Soporta descifrado de credenciales VNC y contraseñas GPP
Encuentra dominios, contenedores y UO afectados por GPOs
Obtiene GPOs aplicados a un usuario, equipo, UO, contenedor o dominio específico
Enriquece datos de BloodHound con relaciones y propiedades
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx install "git+https://github.com/cogiceo/GPOHound"
Debes configurar Neo4j APOC para el enriquecimiento de datos de BloodHound:
Si estás usando la instalación estándar de Neo4j, puedes habilitar APOC copiando el archivo jar de APOC a la carpeta de plugins y luego reiniciar Neo4j:
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
Si estás instalando Neo4j con "Docker Compose", agrega la variable de entorno NEO4J_PLUGINS=["apoc"]:
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
Para más detalles o métodos de instalación alternativos, consulta la Documentación oficial de APOC.
Para visualizar las relaciones y propiedades agregadas por GPOHound, puedes importar las consultas personalizadas del archivo customqueries.json en BloodHound. Por defecto, este archivo se encuentra en ~/.config/bloodhound/customqueries.json.
Comienza descargando el contenido de SYSVOL desde el controlador de dominio.
Descarga el SYSVOL completo:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
Descarga solo los GPOs:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
Descarga con exclusiones:
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
Recupera todos los datos necesarios de LDAP:
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
Para el enriquecimiento de datos de BloodHound, debes recopilar datos de BloodHound usando un recopilador como bloodhound.py o SharpHound.exe e importar los datos recopilados en la interfaz de BloodHound.
Los archivos de ejemplo de GPOHound están disponibles en example.zip. Extráigalos con unzip example.zip.
Consulta CONFIG.md para instrucciones sobre cómo personalizar valores predeterminados y configuraciones.
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
[!IMPORTANT]
- Condiciones como filtros de seguridad, filtros WMI y segmentación a nivel de elemento no se interpretan.
- No se simulan conflictos de GPO, para evitar omitir configuraciones válidas.
Detección de usuarios asignados a grupos locales privilegiados durante el inicio de sesión
Detección de grupos locales privilegiados integrados renombrados.
Detección de fideicomisarios agregados a grupos locales privilegiados usando "Variables de proceso de preferencia" (por ejemplo, %ComputerName%, %DomainName%)
Detección de fideicomisarios abusables mediante secuestro de sAMAccountName
Detección de cualquier fideicomisario agregado a grupos locales privilegiados:
Los fideicomisarios privilegiados predeterminados, así como las cuentas de servicio con SID que comienzan con S-1-5-8, están excluidos del análisis.
| Grupo | Borde |
|---|
| Administradores | AdminTo |
| Usuarios de escritorio remoto | CanRDP |
| Usuarios COM distribuidos | ExecuteDCOM |
| Usuarios de administración remota | CanPSRemote |
| Operadores de respaldo | CanPrivEsc |
| Operadores de impresión | CanPrivEsc |
| Operadores de configuración de red | CanPrivEsc |
| Análisis | Propiedad |
|---|
| El grupo "Todos" incluye "Inicio de sesión anónimo" | — |
| La firma de sesión del servidor SMB no está habilitada | smbSigningEnabled: false |
| La firma de sesión del servidor SMB no es obligatoria | smbSigningRequired: false |
| Se admite la autenticación NTLMv1 | NTLMv1Support: true |
| Contraseña predeterminada de inicio de sesión automático de Windows | — |
| Credenciales VNC (Genéricas: RealVNC, TightVNC, TigerVNC, etc.) | *VNC*PASS* (varios) |
| Contraseñas almacenadas de FileZilla | — |
| Contraseña de proxy de PuTTY | — |
| Credenciales almacenadas de TeamViewer | — |
| Sesiones guardadas de WinSCP | — |
| Contraseña almacenada de Picasa | — |
| Privilegio | Descripción | Borde |
|---|
| SeDebugPrivilege | Permite al usuario depurar e interactuar con cualquier proceso | CanPrivEsc |
| SeBackupPrivilege | Otorga acceso a archivos sensibles | CanPrivEsc |
| SeRestorePrivilege | Omite permisos de objetos durante la restauración | CanPrivEsc |
| SeAssignPrimaryTokenPrivilege | Habilita la suplantación de tokens para escalada a SYSTEM | CanPrivEsc |
| SeImpersonatePrivilege | Permite la creación de procesos bajo el contexto de otro usuario | CanPrivEsc |
| SeTakeOwnershipPrivilege | Permite a los usuarios tomar propiedad de objetos del sistema | CanPrivEsc |
| SeTcbPrivilege | Otorga la capacidad de actuar como parte del SO | CanPrivEsc |
| SeCreateTokenPrivilege | Permite la creación de tokens de autenticación | CanPrivEsc |
| SeLoadDriverPrivilege | Autoriza la carga/descarga de controladores | CanPrivEsc |
| SeManageVolumePrivilege | Otorga privilegios de gestión de volúmenes o discos | CanPrivEsc |
| SeEnableDelegationPrivilege | Habilita que cuentas de equipo y usuario sean de confianza para delegación |