
APT-Hunter è uno strumento di Threat Hunting per i log degli eventi di Windows, realizzato con una mentalità da purple team, per rilevare i movimenti APT nascosti nel mare dei log degli eventi di Windows, riducendo il tempo necessario per scoprire attività sospette.
Threat hunting per i log eventi di Windows, sviluppato con una mentalità purple-team.
APT-Hunter è uno strumento di threat hunting per i log eventi di Windows. Utilizza regole di rilevamento predefinite e statistiche sui log per far emergere attività APT nascoste in grandi volumi di eventi, riducendo il tempo necessario per individuare comportamenti sospetti. È particolarmente efficace per le valutazioni di compromissione.
I risultati vengono scritti come una timeline che può essere analizzata direttamente in Excel, Timeline Explorer, Timesketch e strumenti simili, oppure esplorata nella dashboard web integrata con triage opzionale tramite LLM locale.
Scarica i binari compilati dalla pagina Releases, oppure esegui dal sorgente (Python 3.8+):
git clone https://github.com/ahmedkhlief/APT-Hunter.git
cd APT-Hunter
python3 -m pip install -r requirements.txt
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
-p accetta una directory o un singolo file. Aggiungi -web per aprire la dashboard al termine dell'analisi.





Esegui python3 APT-Hunter.py -h per l'elenco completo. Opzioni principali:
Analizza una cartella di file EVTX (i tipi di log vengono rilevati automaticamente):
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
Concentrati su un intervallo temporale:
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport -start 2022-04-03 -end 2022-04-05T20:56
Hunting con una stringa, una regex o un file di regex:
python3 APT-Hunter.py -hunt "psexec" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile "(psexec|psexesvc)" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile huntfile.txt -p /opt/wineventlogs/ -o Project2
Hunting con regole Sigma:
python3 APT-Hunter.py -sigma -rules rules.json -p /opt/wineventlogs/ -o Project2
Scarica le ultime regole Sigma convertite per APT-Hunter (scrive rules.json):
./Get_Latest_Sigma_Rules.sh
Sfoglia un report generato nel browser: filtri, grafici, timeline degli incidenti ed esportazione del report IR.
python3 run_webapp.py <Output>/<Output>_Report.xlsx # or pass the output directory
python3 APT-Hunter.py -p <logs> -o <Output> -web # analyse, then open the dashboard
python3 APT-Hunter.py -webview <Output> # open an existing report
Accettare un riscontro di triage lo fissa alla timeline degli incidenti insieme alle sue evidenze, allegate come sub-eventi comprimibili: si trovano sotto il riscontro nella tabella anziché intervallati con tutto il resto, e sono esclusi dai grafici della timeline in modo che i grafici rimangano leggibili. Rimuovere un riscontro rimuove anche i suoi sub-eventi.
Il server si associa a 0.0.0.0:5000 per impostazione predefinita. Usa --host / --port (o -webhost / -webport) per modificarlo, ad esempio --host 127.0.0.1 per mantenerlo locale. I riscontri revisionati e la timeline vengono conservati quando la cache del report viene ricostruita.

Dashboard principale: totale eventi e conteggi per severità, ripartizione per severità, regole di rilevamento più attivate e volume giornaliero degli eventi. La barra laterale elenca ogni log eventi e tabella di riepilogo nel report.

Timeline degli incidenti: riscontri fissati tracciati nel tempo e codificati a colori per severità. Esegui zoom e pan nei periodi più intensi, genera un riepilogo esecutivo con AI ed esporta il report IR o il CSV.

Timeline cronologica: una catena di attacco si espande nei suoi sub-eventi e il pannello dei dettagli mostra la narrazione, le tecniche MITRE e il punteggio.
Il grafico della timeline degli incidenti è zoomabile, così le raffiche di eventi a minuti o secondi di distanza rimangono leggibili: trascina sul grafico per zoomare su un intervallo, Shift+trascina per fare pan, Ctrl/Cmd+rotella per zoomare attorno al cursore, oppure usa la striscia di panoramica sottostante. Le etichette non si sovrappongono mai; quelle che non entrano vengono nascoste e passando il mouse su un punto vengono elencati tutti gli eventi sovrapposti.
Assegna un punteggio di maliciousness agli eventi rilevati usando un modello locale, dalla riga di comando:
python3 APT-Hunter.py -p <logs> -o <Output> -llm -llm-provider ollama -llm-model llama3 -llm-severity High
Oppure per singolo evento dalla dashboard (verifica, spiega, correla). Configura provider (Ollama / LM Studio / llama.cpp), modello, URL e timeout nella pagina Settings della dashboard. Qualsiasi server locale compatibile con OpenAI funziona; nessun dato viene inviato a un servizio cloud.
Il Triage agentico nella barra laterale della dashboard trasforma migliaia di alert in un breve elenco di riscontri:
La fase di indagine richiede un LLM che supporti il tool calling. Se il tuo non lo fa, APT-Hunter ripiega su una pipeline fissa di pivot/correlazione. La copertura è identica in entrambi i casi, poiché l'agente aggiunge solo profondità sopra il primo passaggio. I round degli strumenti e un limite di tempo reale sono limitati in Settings.

Triage agentico: la cronologia delle esecuzioni mostra ambito, conteggi di alert e cluster, riscontri e chiamate LLM per esecuzione. Qui 91 alert critici su un host si sono ridotti a 32 cluster e a una singola catena di attacco con punteggio elevato.

Dettaglio del riscontro: la narrazione, le tecniche MITRE, le evidenze e la traccia completa dell'indagine (ogni evento letto, finestra della timeline e ricerca negli alert effettuata dall'agente), così ogni conclusione può essere verificata.
Nota: l'output dell'LLM è un ausilio al triage, non un verdetto. Rivedi i riscontri prima di basarti su di essi. I modelli di reasoning potrebbero richiedere di alzare il timeout della richiesta ben oltre il valore predefinito di 200 s.
Twitter: @ahmed_khlief · LinkedIn: Ahmed Khlief
Distribuito sotto GNU GPL v3. Vedi LICENSE.
Grazie a Joe Maccry per il suo straordinario contributo ai casi d'uso di Sysmon (più di 100 casi d'uso aggiunti da Joe)
| Opzione | Descrizione |
|---|
-p, --path | File o cartella di log da analizzare |
-o, --out | Nome / directory di output |
-start, -end | Limita la timeline (formato ISO) |
-tz | Fuso orario (local o ad es. Asia/Dubai) |
-cores | Core CPU da utilizzare (predefinito: metà di quelli disponibili) |
-hunt, -huntfile, -eid | Hunting tramite stringa/regex, file di regex o Event ID |
-sigma, -rules | Hunting con regole Sigma convertite in JSON |
-o365hunt, -o365rules, -o365raw | Hunting sui log di audit di Office 365 |
-procexec, -logon, -objaccess, -allreport | Report aggiuntivi |
-web, -webview, -webhost, -webport | Avvia la dashboard web |
-llm, -llm-provider, -llm-url, -llm-model, -llm-key, -llm-severity, -llm-batch, -llm-context | Analisi con LLM locale |
| Esempio | Descrizione |
|---|
| Sample_TimeSketch.csv | Timeline che puoi caricare su Timesketch per vedere il quadro completo di un attacco |
| Sample_Report.xlsx | Ogni evento rilevato in tutti i log di Windows forniti |
| Sample_Logon_Events.csv | Tutti gli eventi di logon con campi analizzati (data, utente, IP di origine, processo di logon, workstation, tipo di logon, dispositivo, log originale) |
| Sample_Process_Execution_Events.csv | Tutte le esecuzioni di processi catturate dai log eventi |
| Sample_Object_Access_Events.csv | Accesso agli oggetti catturato dall'Event 4663 |
| Sample_Collected-SIDS.csv | Utenti e i loro SID, per aiutare le indagini |
| EventID_Frequency_Analysis.xls | Analisi della frequenza degli Event ID |