
🐍 Scanner YARA e IOC multi-thread ad alte prestazioni

Una riscrittura di Loki in Rust. Scanner YARA e IOC ad alte prestazioni, multi-thread, in un singolo binario.
Stato: Beta. Funziona, ma ancora in fase di sviluppo attivo.
La scansione della memoria dei processi su macOS è "best-effort" e richiede generalmente entitlements di debug o privilegi elevati. Senza di essi, Loki-RS scansionerà comunque i file ma non sarà in grado di leggere la maggior parte della memoria dei processi. Usa --no-procs per saltare la scansione dei processi, se necessario.
Su Linux, Loki-RS salta i mapping di processi relativi a dispositivi e kernel speciali prima di leggere /proc/<pid>/mem. Questo evita note instabilità con alcune VMA gestite da driver, pur mantenendo la scansione normale di memoria anonima, heap/stack e file-backed regolari. Se si verificano ancora problemi specifici dell'ambiente, usa --no-procs per disabilitare la scansione dei processi.
Scarica il binario precompilato per la tua piattaforma dalla Pagina delle Release.
# Estrai
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Aggiorna le firme (consigliato)
./loki-util update
# Esegui
sudo ./loki --help
Le firme sono incluse nella release ma invecchiano rapidamente. Esegui loki-util update per ottenere le ultime regole YARA-Forge Core.
Loki-RS utilizza YARA Forge come fonte predefinita di firme. Loki-RS include e aggiorna il set di regole Core (alta accuratezza, pochi falsi positivi, ottimizzato per le prestazioni). Se hai bisogno di una copertura più ampia, puoi sostituire i set Extended o Full di YARA Forge.
I file IOC in signatures/iocs/ rimangono supportati come contenuto locale/personalizzato opzionale.
# Scansione di base (TUI abilitata per impostazione predefinita)
sudo ./loki
# Scansiona una cartella specifica
sudo ./loki --folder /tmp
# Disabilita TUI, usa output standard da riga di comando
sudo ./loki --no-tui
# Scansiona un'immagine montata (salta scansione processi, usa tutti i core)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Scansione lenta e cauta (limite CPU basso, singolo thread)
sudo ./loki --cpu-limit 60 --threads 1
# Scansiona e invia log a syslog remoto
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Opzione | Predefinito | Descrizione |
|---|---|---|
-f, --folder <PERCORSO> | / | Cartella da scansionare. Racchiudi tra virgolette i percorsi che contengono spazi, es. -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
| Opzione | Predefinito | Descrizione |
|---|---|---|
--no-procs | false | Salta la scansione della memoria dei processi |
--no-fs | false | Salta la scansione del filesystem |
--no-archive | false | Salta la scansione all'interno degli archivi (ZIP) |
--scan-all-drives | false | Scansiona tutte le unità incluse quelle montate/rete/cloud |
--scan-all-files | false | Scansiona tutti i file indipendentemente dall'estensione/tipo |
| Opzione | Predefinito | Descrizione |
|---|---|---|
-l, --log <FILE> | auto | File di log in testo semplice |
--no-log | false | Disabilita l'output di log in testo semplice |
-j, --jsonl <FILE> | auto | File di output JSONL |
--no-jsonl | false | Disabilita l'output JSONL |
--no-html | false | Disabilita la generazione di report HTML |
--no-tui | false | Disabilita TUI, usa output standard da riga di comando |
-r, --remote <HOST:PORTA> | nessuno | Destinazione syslog remota |
-p, --remote-proto <PROTO> | udp | Protocollo remoto (udp/tcp) |
--remote-format <FORMATO> | syslog | Formato remoto (syslog/json) |
| Opzione | Predefinito | Descrizione |
|---|---|---|
--alert-level <PUNTEGGIO> | 80 | Soglia di punteggio per ALLARME |
--warning-level <PUNTEGGIO> | 60 | Soglia di punteggio per AVVISO |
--notice-level <PUNTEGGIO> | 40 | Soglia di punteggio per NOTIFICA |
--max-reasons <NUM> | 2 | Numero massimo di motivi di corrispondenza da mostrare per risultato |
-m, --max-file-size <BYTE> | 64000000 | Dimensione massima del file da scansionare (64MB) |
--yara-timeout <SECONDI> | 10 | Tempo massimo di scansione YARA per ogni file o buffer di memoria del processo (minimo: 1 secondo) |
-c, --cpu-limit <PERCENTUALE> | 100 | Limite di utilizzo CPU (1-100) |
--threads <NUM> | -2 | Numero di thread (0=tutti, -1=tutti-1, -2=tutti-2) |
| Opzione | Predefinito | Descrizione |
|---|---|---|
--version | - | Mostra la versione ed esci |
-d, --debug | false | Mostra output di debug |
--trace | false | Mostra output di traccia dettagliato |
--show-access-errors | false | Mostra errori di accesso a file/processi |
Loki-RS fornisce molteplici meccanismi per escludere file e cartelle dalle scansioni.
Per impostazione predefinita, Loki-RS esclude automaticamente:
Directory di sistema (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runDirectory di archiviazione cloud (a meno che non venga usato --scan-all-drives):
Unità di rete e montate (a meno che non venga usato --scan-all-drives):
/media, /volumesDirectory del programma:
| Opzione | Descrizione |
|---|---|
--scan-all-drives | Include unità montate, unità di rete e archiviazione cloud |
--scan-all-files | Scansiona tutti i file indipendentemente dal tipo/estensione (per impostazione predefinita, vengono scansionati solo i tipi di file rilevanti) |
-m, --max-file-size <BYTE> | Salta file più grandi di questa dimensione (predefinito: 64MB) |
--no-procs | Salta completamente la scansione della memoria dei processi |
--no-fs | Salta completamente la scansione del filesystem |
--no-archive | Salta la scansione all'interno di file di archivio (ZIP) |
Puoi escludere file noti come buoni tramite il loro hash. Questo è utile per autorizzare file legittimi che generano falsi positivi.