
Herramienta ofensiva de volcado y análisis de GPO que aprovecha y enriquece los datos de BloodHound
# GPOHound
`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.
## Características
### Volcado
- [x] Volca GPOs en un formato JSON estructurado o en árbol
- [x] Maneja múltiples dominios
- [x] Resuelve nombres de GPO con GUIDs de GPO
- [x] Filtra la salida por archivos GPO, GUIDs de GPO y dominios
- [x] Busca en pares clave/valor usando expresiones regulares
### Análisis
- [x] Agrupa configuraciones por objeto impactado (por ejemplo, Grupos locales, Registro)
- [x] Detecta miembros agregados a grupos locales privilegiados
- [x] Detecta configuraciones de registro inseguras, credenciales almacenadas y derechos de privilegio
- [x] Soporta descifrado de credenciales VNC y contraseñas GPP
- [x] Encuentra dominios, contenedores y UO afectados por GPOs
- [x] Obtiene GPOs aplicados a un usuario, equipo, UO, contenedor o dominio específico
- [x] Enriquece datos de BloodHound con relaciones y propiedades
## Instalación
### Instalar con pip
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### Instalar con pipx
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### Configurar APOC para Neo4j
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:
```bash
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"]`:
```yaml
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](https://neo4j.com/docs/apoc/current/installation/).
### Agregar consultas de BloodHound
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`.
## Requisitos previos
### Volcado de SYSVOL
Comienza descargando el contenido de `SYSVOL` desde el controlador de dominio.
- Descarga el `SYSVOL` completo:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- Descarga solo los GPOs:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- Descarga con exclusiones:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### Volcado de LDAP
Recupera todos los datos necesarios de LDAP:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
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.
## Uso
Los archivos de ejemplo de GPOHound están disponibles en `example.zip`. Extráigalos con `unzip example.zip`.
Consulta [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md) para instrucciones sobre cómo personalizar valores predeterminados y configuraciones.
```bash
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
```
### Analizar
```bash
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
```
### Volcado
```bash
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
```
### Análisis
```bash
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
```
## Análisis y enriquecimiento actual
> [!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.
### Grupos locales
- 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:
| 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` |
### Registro
| 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 | — |
### Derechos 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.
| 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 | |
# Mejoras
- [x] Mejorar el registro
- [x] Integrar LDAP
- [x] Integrar SMB
- [ ] Analizar extensiones restantes
- [ ] Interfaz web
- [ ] Resaltar conflictos potenciales entre GPOs
## Documentación de GPO
### SYSVOL y LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Extensión de configuración de auditoría
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Extensión de protocolo de políticas de acceso central
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Extensión de sistema de archivos cifrados
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Estructura de datos de firewall y seguridad avanzada
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Extensión de protocolo de redirección de carpetas
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Extensión de mantenimiento de Internet Explorer
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Extensión de protección de acceso a redes (NAP)
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Extensión de datos de tabla de políticas de resolución de nombres (NRPT)
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) Protocolo principal
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) Estructura de datos de extensión de preferencias
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Codificación de extensión de registro
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Extensión de protocolo de seguridad
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Codificación de extensión de scripts
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Extensión de protocolo de instalación de software
### Solo LDAP
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Extensión de conexiones de impresora implementadas
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Extensión de protocolo inalámbrico/cableado