
Analisador de EVTX de Pós-exploração para Mapeamento do BloodHound
Analisador EVTX de Pós-Exploração para Mapeamento com BloodHound
O LogHound coleta e analisa os Logs de Eventos de Segurança do Windows (.evtx) para extrair eventos de autenticação, dados de sessão e metadados de logon para ingestão no BloodHound e para telemetria adversarial mais aprofundada.
O LogHound foi criado para resolver um problema específico para Red Teams e testadores de penetração de redes: como rastrear com eficiência alvos de movimento lateral, decifrar sessões de usuário ativas e estabelecer a propriedade definitiva das máquinas sem queimar segurança operacional (OpSec).
Os arquivos de log de eventos (Security.evtx) em Controladores de Domínio do Active Directory podem ser verdadeiros gigantes de vários gigabytes. Técnicas tradicionais de carregamento frequentemente esgotam a memória do sistema ou travam, deixando artefatos ruidosos. O LogHound resolve isso utilizando um paradigma de streaming baseado em blocos sobre o robusto framework Impacket.
Ele mapeia estruturas de rede, estabelece quem realmente "possui" uma máquina com base na frequência de login, calcula horários de trabalho precisos para identificar operações fora do expediente (Night Owl) e alimenta essa inteligência de forma integrada no BloodHound CE (v5+).
O LogHound depende de Python 3 e Impacket. É altamente recomendável usar um ambiente virtual.
# 1. Clone the repository
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (Optional but Recommended) Create a Python virtual environment
python3 -m venv venv
source venv/bin/activate
# 3. Install the required dependencies
pip install -r requirements.txt
A CLI do LogHound interage de forma idêntica aos módulos padrão do Impacket (como secretsdump.py), exigindo que você especifique um modo de operação explícito (--local ou --remote).
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: Analisa um arquivo .evtx já presente em sua máquina local.--remote: Baixa o Security.evtx do sistema remoto alvo usando as credenciais fornecidas.-hashes LMHASH:NTHASH: Use hashes NTLM para autenticação Pass-The-Hash.-k: Use autenticação Kerberos. Obtém as credenciais de um arquivo .ccache especificado pela variável de ambiente KRB5CCNAME.-aesKey hex_key: Use uma chave AES específica (128 ou 256 bits) para Kerberos.-no-pass: Não solicite uma senha interativamente.-keytab KEYTAB_FILE: Use um arquivo keytab Kerberos para autenticação.-dc-ip IP: Endereço IP explícito do controlador de domínio.-target-ip IP: Endereço IP explícito da máquina alvo (ignora falhas de resolução de nomes NetBIOS).-format {json,csv,md,all}: Define o formato de saída baseado em texto. Observação: um relatório HTML interativo e os arquivos JSON do BloodHound são sempre gerados. O padrão é json.-outputfile BASENAME: Prefixo de nome para os relatórios de saída gerados nos subdiretórios.-threads N: Número de threads do analisador para executar em paralelo (Padrão: 4).-chunk-size N: Número de registros de log por bloco de análise. Valores menores reduzem o consumo de RAM; valores maiores analisam um pouco mais rápido (Padrão: 1000).
O LogHound utiliza um pipeline analítico altamente desacoplado e eficiente em memória:
core/collector.py): Conecta-se ao alvo via SMB e executa wevtutil epl Security via WMI para exportar o log de eventos de Segurança para um arquivo temporário no alvo. O arquivo exportado é então baixado via SMB para loot/YYYY-MM-DD_<target>_Security.evtx para evitar sobrescritas.core/parser.py): Um analisador de blocos com threads processa o binário .evtx bruto e emite continuamente eventos analisados para um buffer temporário de linhas JSON (jsonl/loghound_dump.jsonl). Se interrompido, ele pode retomar a partir de checkpoints precisos.core/analyzer.py): Percorre linha por linha o fluxo .jsonl para manter um baixo consumo de RAM. Ele calcula dicionários de estado intermediário (rastreamento de sessão, pontuação de propriedade, rastreamento de lógica).core/exporter.py & core/exporter_bloodhound.py): Despeja o estado em RAM da análise nos formatos de exportação finais html/ e dinamicamente.Para lógica arquitetural aprofundada e erros de ingestão já tratados, consulte a documentação interna em ARCHITECTURE.md.
O LogHound filtra nativamente seis IDs explícitos de Eventos de Segurança do Windows: 4624, 4634, 4648, 4768, 4769, 4776.
Usando esses eventos, o LogHound aprimora o BloodHound CE ao vincular os seguintes atributos personalizados diretamente aos nós de Usuário gerados, por meio do bloco Properties:
ObjectIdentifier se alinhem perfeitamente com as ingestões existentes do SharpHound. Os Usuários de Domínio do AD recebem seu SID nativo do Windows (S-1-5-21-...). Para evitar a quebra de nós no BloodHound, as Contas Locais da Máquina mantêm corretamente o padrão de fallback USER@HOSTNAME.computers.json gerado utiliza exatamente a estrutura de dados nativa SessionAPIResult para traçar arestas reais "HasSession" entre máquinas e usuários.O mecanismo de análise calcula as horas operacionais de trabalho com base em eventos de logon/logoff rastreados, omitindo anomalias (como sessões que abrangem vários dias).
A análise determina o proprietário explícito de qualquer estação de trabalho ou Endereço IP contando os Logons interativos mais frequentes. Isso vincula um Owner primário ao nó de origem, juntamente com uma matriz de Other Users secundários.
Este software é fornecido apenas para fins educacionais, de teste de penetração autorizado e investigação forense. Não o utilize contra redes nas quais você não tenha permissão explícita para operar.
Este projeto é licenciado sob a Apache License 2.0 - consulte o arquivo LICENSE.
json/| Nome da Propriedade | Tipo | Descrição da Métrica |
|---|
loghound_avg_start_time | String | Calcula a média do primeiro logon (00:00 HH:MM) registrado em todos os dias válidos observados para o usuário. |
loghound_avg_end_time | String | Calcula a média da última atividade (logoff ou último toque) registrada por dia. |
loghound_active_days | Integer | Contagem total de dias validados (com pelo menos uma sessão adequada) utilizados para calcular as médias dos intervalos de tempo. |
loghound_outside_hours | Boolean | Verdadeiro/Falso. Identifica especificamente um Night Owl. É avaliado como True se a janela ativa calculada do usuário, do início ao fim, se sobrepõe ao intervalo noturno de 22:00 às 06:00. |
Avg Hours per Day | Float | Calculado internamente como a diferença exata de tempo entre o horário médio de início e o horário médio de término do usuário. (Exibido nos relatórios de texto/HTML). |