
Identifique os caminhos de ataque no BloodHound que quebram sua hierarquia de AD.
Identifique os caminhos de ataque no BloodHound que quebram sua hierarquia de AD (tiering)
ImproHound é um executável .NET independente para Windows x64 com interface gráfica. Para usar o ImproHound, você deve executar o SharpHound para coletar os dados necessários do AD. Em seguida, faça o upload dos dados para sua instalação do BloodHound. O ImproHound se conectará ao banco de dados Neo4j subjacente do BloodHound. No ImproHound, você categorizará os objetos do AD em níveis (tiers) por meio da estrutura de OUs, e o ImproHound identificará as relações do AD que permitem que objetos do AD comprometam um objeto de um nível superior (mais próximo de zero) e salvará as violações de hierarquia em um arquivo csv.
Postagem no blog sobre o ImproHound
Vídeo de demonstração do ImproHound
Apresentação do ImproHound no DEF CON Adversary Village
1. Configure seu banco de dados do BloodHound
Colete dados do BloodHound com SharpHound no seu AD
Nota: isso gerará ruído no seu AV, SIEM, etc.
Exemplo: Execute SharpHound.exe a partir do cmd, colete tudo (sim, GPOLocalGroup não está incluído em All):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
Dica 1: Use o parâmetro
Domainpara coletar dados de outros domínios na floresta.
Dica 2: Para obter ainda mais dados, use The Session Loop Collection Method
Faça o upload dos seus dados do BloodHound na interface gráfica do BloodHound
Há um bug no BloodHound que às vezes faz com que o arquivo json do domínio seja ignorado ao fazer upload de um zip de dados do BloodHound. Verifique as estatísticas do banco de dados no BloodHound após o upload dos dados e certifique-se de que os objetos de domínio existam.
2. Instale o plugin APOC do Neo4j (ativa operações incríveis de grafo que precisamos)
Baixe a versão do APOC que corresponde à sua versão do Neo4j (apoc-x.x.x.x-all.jar).
Encontre a versão do APOC correspondente à sua versão do Neo4j na matriz de compatibilidade de versões.
Tente lembrar onde você instalou o Neo4j e coloque o arquivo jar do APOC em: $NEO4J_HOME/plugins/
/var/lib/neo4j/Edite neo4j.conf no seu editor de texto favorito para permitir acesso irrestrito ao APOC, substituindo a linha:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
por
dbms.security.procedures.unrestricted=apoc.*
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.confSe você quiser executar o ImproHound em uma máquina e o BloodHound em outra, você deve permitir conexões remotas ao banco de dados Neo4j na máquina do BloodHound. Para isso, remova # da linha
#dbms.default_listen_address=0.0.0.0emneo4j.conf.
Reinicie o Neo4j
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)3. Baixe e execute a versão mais recente do ImproHound.exe no Windows (x64)
Confirme que você pode fazer login no banco de dados do BloodHound com as mesmas credenciais que usa na interface gráfica do BloodHound.

Insira as credenciais do banco de dados e estabeleça uma conexão. São as mesmas credenciais que você usa na interface gráfica do BloodHound.

O ImproHound cria um rótulo 'TierX' nos nós do banco de dados do BloodHound. Se você já usou o ImproHound antes com este banco de dados do BloodHound, será perguntado se deseja continuar com a hierarquia já criada ou se deseja recomeçar.

O ImproHound oferece a opção de definir 'Hierarquia padrão' (Default tiering), que colocará Domain Admins no Nível 0, Domain Users no Nível 2, etc., ou colocar todos os objetos no Nível 2.

Esta é a página onde você categorizará os objetos do AD em níveis. A janela exibe a estrutura de OUs. Cada objeto do AD possui um valor de nível que pode ser aumentado e diminuído com as setas.
Definir filhos para o nível
Se você selecionar um domínio ou um container do AD, pode clicar em 'Definir filhos para o nível' (Set children to tier) para definir todos os filhos (recursivamente) para o nível do domínio/container fornecido.
Definir membros para o nível
Se você selecionar um grupo, pode clicar em 'Definir membros para o nível' (Set members to tier) para definir todos os membros (recursivamente) para o nível do grupo fornecido.
Definir nível para GPOs
Se você clicar em 'Definir nível para GPOs' (Set tier for GPOs), cada GPO terá seu nível definido para o nível da OU de maior nível (mais próximo de zero) à qual a GPO está vinculada. GPOs não vinculadas a uma OU não terão seu nível alterado.
Obter violações de hierarquia
Encontre todas as relações no banco de dados do BloodHound onde um objeto do AD tem controle sobre um objeto do AD de um nível superior (mais próximo de zero).
Dois arquivos CSV são gerados como saída:
adobjects-[timestamp].csv: Todos os objetos do AD e em qual nível estão.
tiering-violations-[timestamp].csv: As violações de hierarquia.
Exemplo de registros no CSV de violações:
| SourceTier | SourceType | SourceName | SourceDistinguishedname | Relation | IsInherited | TargetTier | TargetType | TargetName | TargetDistinguishedname |
|---|---|---|---|---|---|---|---|---|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |