
Ferramenta ofensiva de extração e análise de GPO que aproveita e enriquece dados do BloodHound
# GPOHound
`GPOHound` é uma ferramenta para extrair e analisar Objetos de Política de Grupo (GPOs) extraídos do compartilhamento SYSVOL.
Ela fornece um formato estruturado e formalizado para ajudar a descobrir configurações incorretas, configurações inseguras e caminhos de escalonamento de privilégios em ambientes Active Directory.
A ferramenta se integra ao banco de dados Neo4j do BloodHound, usando-o como uma fonte semelhante a LDAP para informações do Active Directory, enquanto também o enriquece ao adicionar novos relacionamentos (arestas) e propriedades de nós com base na análise.
## Funcionalidades
### Extração
- [x] Extrai GPOs em um formato JSON estruturado ou em árvore
- [x] Lida com múltiplos domínios
- [x] Resolve nomes de GPO com GUIDs de GPO
- [x] Filtra a saída por arquivos de GPO, GUIDs de GPO e domínios
- [x] Pesquisa em pares chave/valor usando regex
### Análise
- [x] Agrupa configurações por objeto impactado (ex.: Grupos Locais, Registro)
- [x] Detecta membros adicionados a grupos locais privilegiados
- [x] Detecta configurações inseguras de registro, credenciais armazenadas e direitos de privilégio
- [x] Suporta descriptografia de credenciais VNC e senhas GPP
- [x] Encontra domínios, contêineres e UOs afetados por GPOs
- [x] Obtém GPOs aplicados a um usuário, computador, UO, contêiner ou domínio específico
- [x] Enriquece os dados do BloodHound com relacionamentos e propriedades
## Instalação
### Instalar com pip
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### Instalar com pipx
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### Configurar APOC para Neo4j
Você precisa configurar o APOC do Neo4j para o enriquecimento de dados do BloodHound:
- Se você estiver usando a instalação padrão do Neo4j, pode habilitar o APOC copiando o arquivo `jar` do APOC para a pasta de plugins e então reiniciar o Neo4j:
```bash
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
```
- Se você estiver instalando o Neo4j com "Docker Compose", adicione a variável de ambiente `NEO4J_PLUGINS=["apoc"]`:
```yaml
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
```
> Para mais detalhes ou métodos alternativos de instalação, consulte a [Documentação oficial do APOC](https://neo4j.com/docs/apoc/current/installation/).
### Adicionar Consultas do BloodHound
Para visualizar os relacionamentos e propriedades adicionados pelo `GPOHound`, você pode importar as consultas personalizadas do arquivo `customqueries.json` para o BloodHound. Por padrão, este arquivo está localizado em `~/.config/bloodhound/customqueries.json`.
## Pré-requisitos
### Extração do SYSVOL
Comece baixando o conteúdo do `SYSVOL` do controlador de domínio.
- Baixar o `SYSVOL` completo:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- Baixar apenas os GPOs:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- Baixar com exclusões:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### Extração LDAP
Recupere todos os dados necessários do LDAP:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
Para o enriquecimento de dados do BloodHound, você deve coletar dados do BloodHound usando um coletor como `bloodhound.py` ou `SharpHound.exe` e importar os dados coletados para a interface do BloodHound.
## Uso
Arquivos de exemplo do GPOHound estão disponíveis em `example.zip`. Extraia-os com `unzip example.zip`.
Consulte [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md) para instruções sobre como personalizar valores e configurações padrão.
```bash
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
```
### Analisar
```bash
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
```
### Extrair
```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álise
```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álise e enriquecimento atuais
> [!IMPORTANTE]
> - Condições como filtros de segurança, filtros WMI e direcionamento em nível de item não são interpretadas.
> - Conflitos de GPO não são simulados, para evitar perder configurações válidas.
### Grupos Locais
- Detecção de usuários atribuídos a grupos locais privilegiados durante o logon
- Detecção de grupos locais privilegiados internos renomeados.
- Detecção de trustees adicionados a grupos locais privilegiados usando "Variáveis de Processo de Preferência" (ex.: %ComputerName%, %DomainName%)
- Detecção de trustees abusáveis usando sequestro de `sAMAccountName`
- Detecção de quaisquer trustees adicionados a grupos locais privilegiados:
| Grupo | Aresta |
|--------------------------------|--------------|
| Administrators | `AdminTo` |
| Remote Desktop Users | `CanRDP` |
| Distributed COM Users | `ExecuteDCOM`|
| Remote Management Users | `CanPSRemote`|
| Backup Operators | `CanPrivEsc` |
| Print Operators | `CanPrivEsc` |
| Network Configuration Operators| `CanPrivEsc` |
### Registro
| Análise | Propriedade |
|--------------------------------------------------------------------------|---------------------------|
| Grupo "Everyone" inclui "Anonymous Logon" | — |
| Assinatura de sessão do servidor SMB não está habilitada | `smbSigningEnabled: false`|
| Assinatura de sessão do servidor SMB não é obrigatória | `smbSigningRequired: false`|
| Autenticação NTLMv1 é suportada | `NTLMv1Support: true` |
| Senha padrão de logon automático do Windows | — |
| Credenciais VNC (Genérico: RealVNC, TightVNC, TigerVNC, etc.) | `*VNC*PASS*` (vários) |
| Senhas armazenadas do FileZilla | — |
| Senha de proxy do PuTTY | — |
| Credenciais armazenadas do TeamViewer | — |
| Sessões salvas do WinSCP | — |
| Senha armazenada do Picasa | — |
### Direitos Privilegiados
Trustees privilegiados padrão, bem como contas de serviço com SIDs começando com `S-1-5-8`, são excluídos da análise.
| Privilégio | Descrição | Aresta |
| ----------------------------- | -------------------------------------------------------------- | ------------ |
| SeDebugPrivilege | Permite que o usuário depure e interaja com qualquer processo | `CanPrivEsc` |
| SeBackupPrivilege | Concede acesso a arquivos confidenciais | `CanPrivEsc` |
| SeRestorePrivilege | Ignora permissões de objeto durante a restauração | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | Permite a personificação de token para escalonamento de SYSTEM | `CanPrivEsc` |
| SeImpersonatePrivilege | Permite a criação de processos no contexto de outro usuário | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | Permite que os usuários assumam a propriedade de objetos do sistema | `CanPrivEsc` |
| SeTcbPrivilege | Concede a capacidade de atuar como parte do SO | `CanPrivEsc` |
| SeCreateTokenPrivilege | Permite a criação de tokens de autenticação | `CanPrivEsc` |
| SeLoadDriverPrivilege | Autoriza o carregamento/descarregamento de drivers | `CanPrivEsc` |
| SeManageVolumePrivilege | Concede privilégios de gerenciamento de volume ou disco | `CanPrivEsc` |
| SeEnableDelegationPrivilege | Permite que contas de computador e usuário sejam confiáveis para delegação | |
# Melhorias
- [x] Melhorar registro de logs
- [x] Integrar LDAP
- [x] Integrar SMB
- [ ] Analisar extensões restantes
- [ ] Interface web
- [ ] Destacar conflitos potenciais entre GPOs
## Documentação de GPO
### SYSVOL e LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Extensão de Configuração de Auditoria
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Extensão de Protocolo de Políticas de Acesso Central
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Extensão de Sistema de Arquivos Criptografados
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Estrutura de Dados de Firewall e Segurança Avançada
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Extensão de Protocolo de Redirecionamento de Pastas
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Extensão de Manutenção do Internet Explorer
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Extensão de Proteção de Acesso à Rede (NAP)
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Extensão de Dados da Tabela de Política de Resolução de Nomes (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/) Estrutura de Dados da Extensão de Preferências
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Codificação da Extensão de Registro
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Extensão de Protocolo de Segurança
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Codificação da Extensão de Scripts
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Extensão de Protocolo de Instalação de Software
### Apenas LDAP
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Extensão de Conexões de Impressoras Implantadas
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Extensão de Protocolo Sem Fio/Com Fio