
Analizzatore EVTX post-exploitation per la mappatura di BloodHound
Analizzatore EVTX Post-Sfruttamento per la Mappatura di BloodHound
LogHound raccoglie e analizza i registri eventi di sicurezza di Windows (.evtx) per estrarre eventi di autenticazione, dati delle sessioni e metadati di accesso, da inserire in BloodHound e per una telemetria avversaria più approfondita.
LogHound è stato creato per risolvere un problema specifico per i Red Team e i penetration tester di rete: come tracciare in modo efficiente i target del movimento laterale, decifrare le sessioni utente attive e stabilire una proprietà definitiva delle macchine senza compromettere la sicurezza operativa (OpSec).
I file di registro eventi (Security.evtx) sui domain controller di Active Directory possono essere dei colossi da multi-gigabyte. Le tecniche di caricamento tradizionali spesso esauriscono la memoria di sistema o causano crash, lasciando artefatti evidenti. LogHound affronta il problema utilizzando un paradigma di streaming basato su blocchi (chunk) sopra il robusto framework Impacket.
Mappa le strutture di rete, stabilisce chi "possiede" effettivamente una macchina in base alla frequenza di accesso, calcola le ore lavorative precise per identificare le operazioni fuori orario (nottambule) e alimenta queste informazioni senza soluzione di continuità in BloodHound CE (v5+).
LogHound si basa su Python 3 e Impacket. È fortemente consigliato utilizzare un ambiente virtuale.
# 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
La CLI di LogHound si comporta in modo identico ai moduli Impacket standard (come secretsdump.py), richiedendo di specificare una modalità operativa esplicita (--local o --remote).
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: Analizza un file .evtx già presente sulla tua macchina locale.--remote: Scarica Security.evtx dal sistema remoto target utilizzando le credenziali fornite.-hashes LMHASH:NTHASH: Usa gli hash NTLM per l'autenticazione Pass-The-Hash.-k: Usa l'autenticazione Kerberos. Recupera le credenziali da un file .ccache specificato dalla variabile d'ambiente KRB5CCNAME.-aesKey hex_key: Usa una chiave AES specifica (128 o 256 bit) per Kerberos.-no-pass: Non richiedere una password in modo interattivo.-keytab KEYTAB_FILE: Usa un file keytab Kerberos per l'autenticazione.-dc-ip IP: Indirizzo IP esplicito del domain controller.-target-ip IP: Indirizzo IP esplicito della macchina target (aggira gli errori di risoluzione dei nomi NetBIOS).-format {json,csv,md,all}: Determina il formato di output testuale. Nota: un report HTML interattivo e i file JSON per BloodHound vengono sempre generati. Il valore predefinito è json.-outputfile BASENAME: Prefisso del nome per i report di output generati nelle sottodirectory.-threads N: Numero di thread del parser da eseguire in parallelo (predefinito: 4).-chunk-size N: Numero di record di log per blocco di parsing. Valori più bassi riducono il consumo di RAM; valori più alti analizzano leggermente più velocemente (predefinito: 1000).
LogHound utilizza una pipeline analitica altamente disaccoppiata ed efficiente in termini di memoria:
core/collector.py): Si collega al target tramite SMB, quindi esegue wevtutil epl Security via WMI per esportare il registro eventi di sicurezza in un file temporaneo sul target. Il file esportato viene poi scaricato via SMB in loot/YYYY-MM-DD_<target>_Security.evtx per evitare sovrascritture.core/parser.py): Un parser a blocchi multi-thread esegue lo streaming sul binario .evtx grezzo ed emette continuamente gli eventi analizzati in un buffer temporaneo JSON Lines (jsonl/loghound_dump.jsonl). Se interrotto, può riprendere da checkpoint precisi.core/analyzer.py): Itera riga per riga sul flusso .jsonl per mantenere un basso impiego di RAM. Calcola dizionari di stato intermedi (tracciamento delle sessioni, punteggio di proprietà, tracciamento della logica).core/exporter.py & core/exporter_bloodhound.py): Scarica dinamicamente lo stato RAM dell'analisi nei formati di esportazione finali e .Per la logica architetturale approfondita e gli errori di importazione già affrontati, fare riferimento alla documentazione interna in ARCHITECTURE.md.
LogHound filtra nativamente sei ID evento di sicurezza Windows espliciti: 4624, 4634, 4648, 4768, 4769, 4776.
Utilizzando questi eventi, LogHound estende BloodHound CE associando i seguenti attributi personalizzati direttamente ai nodi User generati tramite il blocco Properties:
ObjectIdentifier si allineino perfettamente agli ingest SharpHound esistenti. Gli utenti di dominio AD ricevono il loro SID Windows nativo (S-1-5-21-...). Per prevenire la rottura dei nodi di BloodHound, gli account locali della macchina mantengono correttamente lo standard di fallback USER@HOSTNAME.computers.json generato utilizza l'esatta struttura dati nativa SessionAPIResult per disegnare archi reali "HasSession" tra macchine e utenti.Il motore di analisi calcola le ore operative lavorative sulla base degli eventi di logon/logoff tracciati, omettendo le anomalie (come sessioni che si estendono su più giorni).
L'analisi determina il proprietario esplicito di qualsiasi Workstation o indirizzo IP contando i logon interattivi più frequenti. Questo associa un Owner primario al nodo di origine insieme a un array di Other Users secondari.
Questo software è fornito esclusivamente per scopi educativi, test di penetrazione autorizzati e indagini forensi. Non utilizzarlo contro reti per cui non hai l'esplicita autorizzazione a operare.
Questo progetto è concesso in licenza secondo l'Apache License 2.0 - vedi il file LICENSE.
html/json/| Nome Proprietà | Tipo | Descrizione della Metrica |
|---|
loghound_avg_start_time | String | Calcola la media del primo logon (00:00 HH:MM) registrato in tutti i giorni validi osservati per l'utente. |
loghound_avg_end_time | String | Calcola la media dell'ultima attività (logoff o ultimo contatto) registrata per giorno. |
loghound_active_days | Integer | Numero totale di giorni validati (con almeno una sessione corretta) utilizzati per calcolare gli array temporali medi. |
loghound_outside_hours | Boolean | True/False. Identifica specificamente un nottambulo. Restituisce True se la finestra attività calcolata inizio-fine dell'utente si sovrappone all'intervallo notturno 22:00 - 06:00. |
Avg Hours per Day | Float | Calcolata internamente come differenza temporale esatta tra average start time e average end time dell'utente. (Mostrata nei report testuali/HTML). |