
AD Miner é uma ferramenta de auditoria do Active Directory que utiliza consultas cypher para processar dados do banco de dados de grafo #Bloodhound e descobrir vulnerabilidades de segurança.
Recursos dos relatórios baseados na web:
Uma classificação baseada em risco das fragilidades do Active Directory, juntamente com caminhos de mitigação abrangentes.
Barra de pesquisa e controles cuidadosamente adaptados para identificar as configurações incorretas mais arriscadas.
Você também pode observar indicadores ao longo do tempo para ajudar a medir a eficiência da mitigação.
O AD Miner foi inicialmente criado pela Forvis Mazars e é mantido pela Grant Thornton Cybersecurity Audit & Advisory Team.
Para executar o AD Miner, você primeiro precisa de um banco de dados neo4j que contenha os objetos do Active Directory:
[!CAUTION] Recomendamos fortemente o uso do BloodHound Automation, pois ele instala o plugin Graph Data Science do Neo4j, que :
- melhora significativamente o tempo de computação e o desempenho geral.
- permite o uso do Smartest Path em vez do shortestPath() embutido do Neo4j (ou seja, Caminhos que são mais fáceis de explorar em vez do menor número de saltos).
Para configurar seu ambiente BloodHound (incluindo a GUI e o banco de dados Neo4j), o BloodHound Automation é altamente recomendado devido à sua integração perfeita com o plugin Graph Data Science. Embora seja perfeitamente aceitável usar a instalação padrão do BloodHound CE, esteja ciente de que você perderá os benefícios do GDS (por exemplo, pathfinding mais inteligente, velocidade de execução aprimorada, etc.).
Por padrão, o BloodHound cria uma base neo4j acessível na porta 7687.
A maneira mais fácil é executar o seguinte comando usando pipx:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
O ADMiner também está disponível em algumas distribuições Linux:
pacman -S ad-minernix-env -iA nixos.ad-minerUma imagem Docker está disponível para construir. Construa a imagem com o seguinte comando:
docker build -t ad-miner .
Para executar isso no Windows com os dados do BloodHound Community Edition, use os comandos abaixo:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Para executar isso no Linux com os dados do BloodHound Community Edition, use os comandos abaixo:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Observe que montar o volume com -v é fundamental para obter a saída dos dados. Isso pressupõe que o servidor BHCE esteja em execução no host Docker com as configurações padrão.
Execute a ferramenta:
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
Exemplo:
AD-miner -cf My_Report -u neo4j -p mypassword
Arquivos de cache são gerados ao final de cada requisição Neo4j. Esse recurso permite pausar ou interromper o AD Miner em qualquer ponto do seu processo sem perder resultados previamente computados. Para usar o cache, utilize o parâmetro -c. Os arquivos de cache são armazenados na pasta cache_neo4j no seu repositório atual. Para que o cache seja utilizado, o nome do relatório deve corresponder ao prefixo do nome do arquivo de cache :
AD-miner -c -cf My_Report -u neo4j -p mypassword
Para lidar melhor com grandes conjuntos de dados, é possível habilitar multi-threading e também usar um cluster de bancos de dados neo4j, conforme mostrado no exemplo a seguir (onde server1 lida com 32 threads e server2 lida com 16) :
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
Se a política de renovação de senha for conhecida, você pode especificá-la usando o parâmetro -r para garantir que os controles de renovação de senha estejam alinhados com as configurações do seu ambiente (o padrão é 90 dias). Por exemplo, se a política de senha estiver definida para 180 dias, você pode usar o seguinte:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] A senha padrão do banco de dados neo4j do Bloodhound CE é
bloodhoundcommunityeditionouneo5jse você usar BloodHound Automation
Opções:
-h, --help show this help message and exit
-b BOLT, --bolt BOLT Neo4j bolt connection (default: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Neo4j username (default : neo4j)
-p PASSWORD, --password PASSWORD
Neo4j password (default : bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Extract date (e.g., 20220131). Default: last logon date
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Password renewal policy in days. Default: 90
-c, --cache Use local file for neo4j data
-l LEVEL, --level LEVEL
Recursive level for path queries
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
Cache file to use (in case of multiple company cache files)
--gpo_low Perform a faster but incomplete query for GPO (faster than the regular query)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Number of chunks for parallel neo4j requests. Default : 20 * number of CPU
-co NB_CORES, --nb_cores NB_CORES
Number of cores for parallel neo4j requests. Default : number of CPU
--rdp Include the CanRDP edge in graphs
--evolution EVOLUTION
Evolution over time : location of json data files. ex : '../../tests/'
--cluster CLUSTER Nodes of the cluster to run parallel neo4j queries. ex : host1:port1:nCore1,host2:port2:nCore2,...
Nas páginas de gráfico, você pode clicar com o botão direito nos nós do gráfico para agrupá-los ou abrir o agrupamento.
Se você tiver vários relatórios do AD-Miner ao longo do tempo, pode monitorar facilmente a evolução com o argumento --evolution: cada relatório do AD-Miner gera um arquivo de dados JSON junto com o arquivo index.html. Basta reunir esses diferentes arquivos JSON em uma única pasta e especificar o caminho para essa pasta após o argumento --evolution.
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
Uma aba 'Evolução ao longo do tempo' aparece na página principal, fornecendo gráficos de evolução para cada categoria (Permissões, Senhas, Kerberos e Diversos).
A evolução detalhada para cada controle também está disponível e pode ser acessada através do botão “Mostrar evolução” para cada categoria. Uma escala logarítmica está disponível para destacar melhor variações sutis ao longo do tempo.
O AD Miner pode calcular caminhos com base em sua real explorabilidade. De fato, às vezes o caminho mais curto é difícil de explorar (aqui por causa do ExecuteDCOM antes do HasSession).
Enquanto existe um caminho mais longo, porém mais simples (aqui com MemberOf e AdminTo em vez de ExecuteDCOM).
O AD Miner muda automaticamente para o modo de caminho mais inteligente quando seu banco de dados neo4j tem o plugin Graph Data Science instalado (https://neo4j.com/docs/graph-data-science/current/). A maneira mais fácil de instalar este plugin é definir uma variável de ambiente no seu docker neo4j: NEO4J_PLUGINS=["graph-data-science"] (ele é instalado por padrão com BloodHound Automation).
Atualmente, 10 controles utilizam cobertura total do grafo e otimizam os caminhos mais inteligentes para análise.
A seguir, uma lista de controles que já foram implementados no AD Miner :
Veja como contribuir aqui.
| Categoria | Descrição | Categoria | Descrição |
|---|
| Kerberos | Contas AS-REP Roastable | Diversos | Computadores com SO obsoleto | |
| Kerberos | Contas Kerberoastable | Diversos | Contas inativas | |
| Kerberos | Delegação restrita Kerberos | Diversos | Nível funcional do domínio | |
| Kerberos | RBCD Kerberos contra computadores | Diversos | Computadores fantasmas | |
| Kerberos | Delegações não restritas Kerberos | Diversos | Grupos sem nenhum membro | |
| Kerberos | Senha antiga do KRBTGT | Diversos | OUs sem nenhum membro | |
| Kerberos | Shadow Credentials em contas privilegiadas | Diversos | Shadow Credentials em controladores de domínio | |
| Kerberos | Shadow Credentials em contas comuns | Diversos | PrimaryGroupID inesperado | |
| Senhas | Acesso a senhas LAPS | Diversos | Usuários FGPP | |
| Senhas | Computadores sem LAPS | Permissões | Anomalias de ACL | |
| Senhas | Objetos podem ler senhas GMSA de administradores | Permissões | Pontos de gargalo de caminhos de ataque | |
| Senhas | Bypass de requisito de senha | Permissões | Computadores admin de outros computadores | |
| Senhas | Usuários com senhas em texto claro | Permissões | Caminhos entre domínios para Domain Admin | |
| Senhas | Usuários com senhas antigas | Permissões | Contas convidadas | |
| Senhas | Usuários sem expiração de senha | Permissões | Acesso inadequado a privilégios DCSync | |
| Permissões | Configurações inadequadas de AdminCount | Permissões | Privilégios inadequados de modificação de GPO | |
| Permissões | Número inadequado de administradores de domínio | Permissões | Contas de máquina com privilégios inadequados | |
| Permissões | Contas de máquina com privilégios inadequados | Permissões | Privilégios de admin local não-tier 0 no ADCS | |
| Permissões | Objetos com histórico de SID | Permissões | Caminhos para DNS Admins | |
| Permissões | Caminhos para Domain Admins | Permissões | Caminhos para grupos de operadores | |
| Permissões | Caminhos para Unidades Organizacionais (OU) | Permissões | Caminhos para servidores | |
| Permissões | Caminhos para o contêiner AdminSDHolder | Permissões | Grupo "Acesso pré-Windows 2000 Compatível" | |
| Permissões | Conta privilegiada fora do grupo de usuários protegidos | Permissões | Acesso RDP (computadores) | |
| Permissões | Acesso RDP (usuários) | Permissões | Violação de Tier-0 (sessões) | |
| Permissões | Usuários com privilégios poderosos entre domínios | Permissões | Usuários com privilégios de admin local |
| Categoria | Descrição | Categoria | Descrição |
|---|
| Entra ID Diversos | Contas inativas no Azure | Entra ID MS Graph | Controladores diretos do MS Graph | |
| Entra ID Senhas | Privilégios de redefinição de senha no Entra ID | Entra ID MS Graph | Contas do Entra ID não sincronizadas on-prem | |
| Entra ID Senhas | Alteração de senha incoerente | Entra ID MS Graph | Contas sincronizadas com conta gêmea desabilitada | |
| Entra ID Permissões | Acesso a funções privilegiadas do Entra ID | Entra ID Permissões | Contas privilegiadas tanto on-prem quanto Azure | |
| Entra ID Permissões | Caminho entre on-prem/Entra ID para Tier-0 | Entra ID Permissões | Usuários possivelmente relacionados ao AADConnect | |
| Entra ID Permissões | Usuários do Entra ID com caminhos para alvos de alto valor |