
GPOHound — Updated!
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
- Extrai GPOs em um formato JSON estruturado ou em árvore
- Lida com múltiplos domínios
- Resolve nomes de GPO com GUIDs de GPO
- Filtra a saída por arquivos de GPO, GUIDs de GPO e domínios
- Pesquisa em pares chave/valor usando regex
Análise
- Agrupa configurações por objeto impactado (ex.: Grupos Locais, Registro)
- Detecta membros adicionados a grupos locais privilegiados
- Detecta configurações inseguras de registro, credenciais armazenadas e direitos de privilégio
- Suporta descriptografia de credenciais VNC e senhas GPP
- Encontra domínios, contêineres e UOs afetados por GPOs
- Obtém GPOs aplicados a um usuário, computador, UO, contêiner ou domínio específico
- 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
jardo APOC para a pasta de plugins e então reiniciar o Neo4j: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"]: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.
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
SYSVOLcompleto:gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD -
Baixar apenas os GPOs:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos -
Baixar com exclusões:
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:
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 para instruções sobre como personalizar valores e configurações padrão.
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
Analisar
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
Extrair
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
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
- Melhorar registro de logs
- Integrar LDAP
- Integrar SMB
- Analisar extensões restantes
- Interface web
- Destacar conflitos potenciais entre GPOs
Documentação de GPO
SYSVOL e LDAP
- [MS-GPAC] Extensão de Configuração de Auditoria
- [MS-GPCAP] Extensão de Protocolo de Políticas de Acesso Central
- [MS-GPEF] Extensão de Sistema de Arquivos Criptografados
- [MS-GPFAS] Estrutura de Dados de Firewall e Segurança Avançada
- [MS-GPFR] Extensão de Protocolo de Redirecionamento de Pastas
- [MS-GPIE] Extensão de Manutenção do Internet Explorer
- [MS-GPNAP] Extensão de Proteção de Acesso à Rede (NAP)
- [MS-GPNRPT] Extensão de Dados da Tabela de Política de Resolução de Nomes (NRPT)
- [MS-GPOL] Protocolo Principal
- [MS-GPPREF] Estrutura de Dados da Extensão de Preferências
- [MS-GPREG] Codificação da Extensão de Registro
- [MS-GPSB] Extensão de Protocolo de Segurança
- [MS-GPSCR] Codificação da Extensão de Scripts
- [MS-GPSI] Extensão de Protocolo de Instalação de Software
Apenas LDAP
- [MS-GPDPC] Extensão de Conexões de Impressoras Implantadas
- [MS-GPWL] Extensão de Protocolo Sem Fio/Com Fio