BloodHound MCP

Permite que Modelos de Linguagem de Grande Escala interajam com dados do BloodHound Community Edition.

Documentação

BloodHound MCP

License: GPL v3

Um servidor Model Context Protocol (MCP) que conecta LLMs ao BloodHound Community Edition e ao BloodHound Enterprise. Faça perguntas em linguagem natural, obtenha análise de caminhos de ataque, execute consultas Cypher e explore ambientes Active Directory, Azure/Entra ID e OpenGraph — tudo a partir do seu assistente de IA.

Demonstração

Assista ao vídeo de demonstração


Como Funciona

O servidor expõe a API REST do BloodHound CE e o grafo Neo4j por meio de um conjunto de 13 ferramentas MCP compostas, 10 recursos de referência e um prompt de sistema ajustado para análise de segurança ofensiva.

Ferramentas Compostas

Cada ferramenta usa um parâmetro info_type para selecionar quais dados são retornados, mantendo a superfície de ferramentas pequena e eficiente em tokens:

FerramentaOpções de info_type
domain_infolist, info, users, groups, computers, ous, gpos, dc_syncers, foreign_admins, foreign_group_members, linked_gpos, search
user_infoinfo, sessions, memberships, admin_rights, rdp_rights, dcom_rights, ps_remote_rights, sql_admin_rights, constrained_delegation, controllables, controllers
group_infoinfo, members, memberships, admin_rights, rdp_rights, dcom_rights, ps_remote_rights, controllers, controllables
computer_infoinfo, sessions, local_admins, rdp_rights, dcom_rights, ps_remote_rights, sql_admins, constrained_delegation, controllables, controllers
ou_infoinfo, users, groups, computers, gpos
gpo_infoinfo, controllers
graph_analysisshortest_path, edge_composition, search
adcs_infotemplates, esc_paths
cypher_queryrun, saved_list, saved_get
data_qualitystats, platform_list, platform_info
asset_groupslist, members, custom_selectors
custom_nodeslist, get, create, update, delete, validate_icon, extension_list, extension_upsert, extension_delete, extension_edges
file_uploadupload, start_job, upload_to_job, upload_bytes, upload_bytes_to_job, end_job

Recursos

Material de referência que o LLM carrega sob demanda — sem chamadas extras de API:

URI do RecursoConteúdo
bloodhound://cypher/referenceSintaxe Cypher, esquema, nomes de propriedades, padrões
bloodhound://cypher/offensive-queriesModelos testados em batalha: DCSync, Kerberoasting, abuso de GPO, delegação, ADCS, credenciais sombra, relay NTLM e mais
bloodhound://guides/adReferência rápida de tipos de nós e relacionamentos do AD
bloodhound://guides/ad-methodologyMetodologia e fluxo de trabalho completos de ataque ao AD
bloodhound://guides/azureReferência rápida de análise do Azure/Entra ID
bloodhound://guides/azure-methodologyCadeias completas de ataque ao Azure
bloodhound://guides/adcsReferência rápida de ADCS ESC1–ESC13
bloodhound://guides/adcs-methodologyAnálise detalhada de ESC e exploração
bloodhound://opengraph/guideDesign de esquema de nós personalizados e melhores práticas
bloodhound://opengraph/examplesExemplos de OpenGraph para SQL Server e Aplicativos Web

Prompt de Sistema

O prompt bloodhound_assistant inclui regras comportamentais que orientam o LLM:

  • Carregue a biblioteca de consultas ofensivas antes de escrever Cypher para qualquer cenário de ataque
  • Nunca tire conclusões de privilégios sem verificar associações de grupos e admincount
  • Respeite as convenções de nomenclatura de propriedades do BloodHound (hasspn, enabled, admincount — tudo em minúsculas)
  • Lide corretamente com o armazenamento de nomes em maiúsculas (DOMAIN ADMINS@CORP.LOCAL) em filtros
  • Siga os padrões adequados de travessia de bordas DCSync e GPO

Pré-requisitos

  • Python 3.11+
  • uv
  • Instância do BloodHound Community Edition com dados carregados
  • Credenciais da API do BloodHound (Token ID + Token Key)

Instalação

Execute o servidor MCP diretamente do Git sem cloná-lo primeiro:

export BLOODHOUND_DOMAIN=your-bloodhound-instance.domain.com
export BLOODHOUND_TOKEN_ID=your-token-id
export BLOODHOUND_TOKEN_KEY=your-token-key
uvx --from git+https://github.com/mwnickerson/bloodhound_mcp bloodhound-mcp

Para uma integração reproduzível, acrescente um commit após a URL do repositório, por exemplo git+https://github.com/mwnickerson/bloodhound_mcp@<commit>. Uma instalação uvx não lê o .env de um checkout separado, portanto o processo que inicia o cliente MCP deve fornecer as variáveis de credenciais.

Para desenvolvimento, clone o repositório e instale seu ambiente:

git clone https://github.com/mwnickerson/bloodhound_mcp.git
cd bloodhound-mcp
uv sync

Crie um arquivo .env na raiz do projeto:

BLOODHOUND_DOMAIN=your-bloodhound-instance.domain.com
BLOODHOUND_TOKEN_ID=your-token-id
BLOODHOUND_TOKEN_KEY=your-token-key

Na inicialização, o servidor MCP faz uma solicitação assinada e somente leitura para /api/v2/self. Credenciais inválidas, falhas de conectividade e falhas de TLS interrompem o servidor antes que ele aceite chamadas de ferramentas MCP. A solicitação de inicialização expira após 10 segundos.

O servidor usa como padrão https na porta 443. Substitua se necessário:

BLOODHOUND_PORT=8080
BLOODHOUND_SCHEME=http

A verificação do certificado TLS permanece habilitada quando nenhuma configuração adicional é fornecida. Para uma implantação confiável em laboratório que usa um certificado autoassinado, a verificação pode ser explicitamente desabilitada:

BLOODHOUND_VERIFY_TLS=false

Desabilitar a verificação enfraquece a segurança do transporte e registra um aviso. Não use esta opção em redes não confiáveis.


Configuração

Claude Desktop

Adicione ao claude_desktop_config.json:

{
  "mcpServers": {
    "bloodhound_mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/mwnickerson/bloodhound_mcp",
        "bloodhound-mcp"
      ]
    }
  }
}

Claude Code

Adicione ao ~/.claude/mcp.json:

{
  "mcpServers": {
    "bloodhound_mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/mwnickerson/bloodhound_mcp",
        "bloodhound-mcp"
      ]
    }
  }
}

OpenAI Codex CLI

Adicione ao ~/.codex/config.toml (ou .codex/config.toml para configuração no escopo do projeto):

[mcp_servers.bloodhound_mcp]
command = "uvx"
args = ["--from", "git+https://github.com/mwnickerson/bloodhound_mcp", "bloodhound-mcp"]

O servidor herda as credenciais do processo que inicia o Codex. Para mantê-las na configuração MCP, passe-as explicitamente:

[mcp_servers.bloodhound_mcp]
command = "uvx"
args = ["--from", "git+https://github.com/mwnickerson/bloodhound_mcp", "bloodhound-mcp"]

[mcp_servers.bloodhound_mcp.env]
BLOODHOUND_DOMAIN = "your-bloodhound-instance.domain.com"
BLOODHOUND_TOKEN_ID = "your-token-id"
BLOODHOUND_TOKEN_KEY = "your-token-key"

MCP Inspector

  • Comando: uvx
  • Argumentos: --from git+https://github.com/mwnickerson/bloodhound_mcp bloodhound-mcp

Token da API do BloodHound

  1. Entre no BloodHound CE ou BloodHound Enterprise
  2. Navegue até AdministraçãoTokens de API
  3. Crie um novo token e copie o Token ID e o Token Key para o seu .env

Uso

Exemplos de Consultas

Reconhecimento:

What domains are in BloodHound?
Show me all Domain Admins in CORP.LOCAL
Find all kerberoastable users
Which computers have unconstrained delegation?

Análise de Usuários e Grupos:

What admin rights does jsmith@corp.local have?
Show me all sessions for the administrator account
What groups is this user a member of?
Who controls the IT ADMINS group?

Análise de Caminhos de Ataque:

Find the shortest path from jsmith@corp.local to Domain Admins
Who has DCSync rights in the domain?
Show me all GPO abuse paths
Find ADCS ESC1 paths in the domain

Cypher Personalizado:

Run a Cypher query to find all users with SPN set and admincount=1
Find all computers where DOMAIN USERS can RDP

Uploads de Coleta:

Upload this SharpHound ZIP from /tmp/sharphound.zip into BloodHound
Upload these base64-encoded SharpHound ZIP bytes as sharphound.zip
Start an upload job, upload these base64 JSON bytes as users.json, then end the job

Agentes que já possuem uma coleta SharpHound ou AzureHound em memória devem codificar os bytes da coleta em base64 e chamar:

file_upload(
    info_type="upload_bytes",
    file_name="sharphound.zip",
    file_bytes_base64="<base64-encoded zip bytes>"
)

Para trabalhos com vários arquivos, chame start_job, depois upload_bytes_to_job para cada payload base64 e, em seguida, end_job.


Suporte a OpenGraph

O BloodHound 8.0+ suporta tipos de nós personalizados via OpenGraph, permitindo modelar infraestrutura não-AD (recursos em nuvem, bancos de dados, ativos personalizados) no mesmo grafo do Active Directory.

A ferramenta custom_nodes lida com operações CRUD legadas em configurações de exibição de tipos de nós por meio de /api/v2/custom-nodes. Para instâncias BloodHound v9.0.0+ com gerenciamento de extensões OpenGraph habilitado, a mesma ferramenta composta também suporta /api/v2/extensions e /api/v2/extensions-edges via extension_list, extension_upsert, extension_delete e extension_edges.

Use os recursos bloodhound://opengraph/guide e bloodhound://opengraph/examples para design de esquema e padrões Cypher. Para esquemas OpenGraph estruturados, faça upsert do esquema de extensão primeiro e depois ingira os dados de coleta com file_upload.

Requer BloodHound Enterprise ou BloodHound CE 8.0 ou posterior. O gerenciamento de extensões OpenGraph requer BloodHound 9.0.0+ e o sinalizador de recurso correspondente habilitado.


Considerações de Segurança

Os dados do BloodHound processados por esta ferramenta são transmitidos aos servidores do seu provedor de LLM. Não use isso com dados de AD de produção, a menos que você tenha avaliado esse risco.

Casos de uso recomendados:

  • Ambientes de laboratório (GOAD, DetectionLab, faixas personalizadas)
  • Preparação para treinamento e certificação
  • Pesquisa e desenvolvimento de ferramentas
  • Análise de domínios não produtivos

Melhores práticas:

  • Gire os tokens da API do BloodHound regularmente
  • Use um token de API somente leitura quando possível
  • Considere uma ponte LLM local para ambientes sensíveis

Testes

# Full test suite
uv run pytest

# Specific modules
uv run pytest tests/test_main_mcp_tools.py -v
uv run pytest tests/test_bloodhound_api.py -v

# Integration tests (requires a live BloodHound instance)
BLOODHOUND_INTEGRATION_TESTS=1 uv run pytest tests/test_integration.py -v

Roadmap

  • Modo de acesso direto ao Neo4j (ignorar a API REST para travessia complexa de grafos)
  • Ferramentas aprimoradas para Azure/Entra ID
  • Melhor cobertura de caminhos de ataque ADCS
  • Exemplos e modelos adicionais de OpenGraph

Contribuições

Contribuições são bem-vindas. Abra uma issue para discutir mudanças significativas antes de enviar um PR.

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Adicione testes para novas funcionalidades
  4. Execute uv run pytest e confirme que tudo passa
  5. Envie um pull request

Agradecimentos

Licença

GNU General Public License v3.0 — veja LICENSE para detalhes.