
Scanner basato su IOC e YARA per il rilevamento di indicatori di compromesso tramite regex su nomi di file, firme YARA, corrispondenza di hash e controlli di back-connect C2 sugli endpoint.
Ho scritto un nuovo scanner YARA Open Source chiamato LOKI RS (Rust). LOKI (Python) è ora ufficialmente deprecato.
Questo progetto è ora in modalità di manutenzione inattiva. Ciò significa che, sebbene accetti pull request per correzioni di bug e problemi semplici, attualmente non ho tempo per aggiungere nuove funzionalità o espandere quelle esistenti. Per anni, la mia attenzione è stata rivolta allo sviluppo di uno scanner più avanzato, THOR, che offre una serie di miglioramenti rispetto a questo progetto. Una versione gratuita, THOR Lite, è disponibile; è più veloce, più stabile e rigorosamente testata nei nostri ambienti CI—semplicemente una soluzione migliore. Puoi trovare un confronto degli scanner open-source, gratuiti e commerciali qui.
Ho anche iniziato a lavorare su una versione basata su Rust di LOKI chiamata LOKI 2. Tuttavia, non sono sicuro di quando raggiungerà la parità di funzionalità con l'attuale rilascio di LOKI. Inoltre, ho creato un diagramma di flusso per aiutarti a decidere quale scanner soddisfi meglio le tue esigenze.

Scanner per Indicatori Semplici di Compromissione
Il rilevamento si basa su quattro metodi di rilevamento:
1. IOC basato sul nome file
Corrispondenza regex sul percorso/nome file completo
2. Controllo regole YARA
Corrispondenza firma YARA sui dati del file e sulla memoria dei processi
3. Controllo hash
Confronta hash dannosi noti (MD5, SHA1, SHA256) con i file scansionati
4. Controllo connessione C2
Confronta gli endpoint di connessione dei processi con gli IOC C2 (nuovo dalla versione v.10)
Controlli aggiuntivi:
1. Controllo del filesystem di Regin (tramite --reginfs)
2. Controllo anomalie dei processi (basato su [Sysforensics](http://goo.gl/P99QZQ))
3. Scansione di file SWF decompressi (nuovo dalla versione v0.8)
4. Controllo dump SAM
Il binario Windows è compilato con PyInstaller e dovrebbe funzionare come applicazione x86 su sistemi sia x86 che x64.
Nessun requisito se usi l'EXE compilato.
Se vuoi compilarlo da solo:
usage: loki.py [-h] [-p path] [-s kilobyte] [-l log-file] [-r remote-loghost]
[-t remote-syslog-port] [-a alert-level] [-w warning-level]
[-n notice-level] [--allhds] [--alldrives] [--printall]
[--allreasons] [--noprocscan] [--nofilescan] [--vulnchecks]
[--nolevcheck] [--scriptanalysis] [--rootkit] [--noindicator]
[--dontwait] [--intense] [--csv] [--onlyrelevant] [--nolog]
[--update] [--debug] [--maxworkingset MAXWORKINGSET]
[--syslogtcp] [--logfolder log-folder] [--nopesieve]
[--pesieveshellc] [--nolisten]
[--excludeprocess EXCLUDEPROCESS] [--force]
Loki - Simple IOC Scanner
argomenti facoltativi:
-h, --help mostra questo messaggio di aiuto ed esci
-p path Percorso da scansionare
-s kilobyte Dimensione massima del file da controllare in KB (default 5000 KB)
-l log-file File di log
-r remote-loghost Sistema syslog remoto
-t remote-syslog-port Porta syslog remota
-a alert-level Punteggio di allerta
-w warning-level Punteggio di avviso
-n notice-level Punteggio di notifica
--allhds Scansiona tutti i dischi rigidi locali (solo Windows)
--alldrives Scansiona tutte le unità (incluse unità di rete e supporti rimovibili)
--printall Stampa tutti i file scansionati
--allreasons Stampa tutti i motivi che hanno causato il punteggio
--noprocscan Salta la scansione dei processi
--nofilescan Salta la scansione dei file
--vulnchecks Esegue i controlli delle vulnerabilità
--nolevcheck Salta il controllo della distanza di Levenshtein
--scriptanalysis Analisi statistica per script per rilevare codice offuscato (beta)
--rootkit Salta il controllo dei rootkit
--noindicator Non mostrare un indicatore di progresso
--dontwait Non attendere all'uscita
--intense Modalità di scansione intensiva (scansiona anche tipi di file sconosciuti e tutte le estensioni)
--csv Scrivi formato log CSV su STDOUT (elaborazione automatica)
--onlyrelevant Stampa solo avvisi o allerte
--nolog Non scrivere un file di log locale
--update Aggiorna le firme dal sotto-repository "signature-base"
--debug Output di debug
--maxworkingset MAXWORKINGSET Dimensione massima del working set dei processi da scansionare (in MB, default 100 MB)
--syslogtcp Usa TCP invece di UDP per la registrazione syslog
--logfolder log-folder Cartella da usare per la registrazione quando il file di log non è specificato
--nopesieve Non eseguire scansioni pe-sieve
--pesieveshellc Esegue la scansione shellcode pe-sieve
--nolisten Non mostrare le connessioni in ascolto
--excludeprocess EXCLUDEPROCESS Specifica un nome eseguibile da escludere dalle scansioni, può essere usato più volte
--force Forza la scansione su una cartella specifica (anche se esclusa con esclusione forzata nel codice di LOKI
Dalla versione 0.15 le firme YARA risiedono nel sotto-repository signature-base. Non otterrai il sotto-repository scaricando LOKI come file ZIP. Sarà incluso quando clonerai il repository.
I file IOC per hash e nomi file sono memorizzati nella cartella './signature-base/iocs'. Tutti i file '.yar' posizionati nella cartella './signature-base/yara' verranno inizializzati insieme al set di regole già incluso. Usa il valore 'score' per definire il livello del messaggio in caso di corrispondenza di firma.
Puoi aggiungere IOC di hash, c2 e nomi file aggiungendo file nella sottocartella './signature-base/iocs'. Tutti gli IOC di hash e i file IOC di nomi file devono essere nel formato usato da LOKI (vedi i file predefiniti). I file devono avere le stringhe "hash", "filename" o "c2" nel loro nome per essere caricati durante l'inizializzazione.
Per IOC di hash (divisi da nuova riga; il tipo di hash è rilevato automaticamente)
Hash;Description [Reference]
Per IOC di nomi file (divisi da nuova riga)
# (opzionale) Description [Reference]
Filename as Regex[;Score as integer[;False-positive as Regex]]
Dalla versione v0.16.2 LOKI supporta la definizione di esclusioni definite dall'utente tramite "excludes.cfg" nella nuova cartella "./config". Ogni riga rappresenta un'espressione regolare che viene applicata al percorso completo del file durante l'attraversamento delle directory. In questo modo puoi escludere determinate directory indipendentemente dal nome dell'unità, estensioni di file in certe cartelle e tutti i file e directory che appartengono a un prodotto sensibile alla scansione antivirus.
Il file '''exclude.cfg''' si presenta così:
# Excluded directories
#
# - add directories you want to exclude from the scan
# - double escape back slashes
# - values are case-insensitive
# - remember to use back slashes on Windows and slashes on Linux / Unix / OSX
# - each line contains a regex that matches somewhere in the full path (case insensitive)
# e.g.:
# Regex: \\System32\\
# Matches C:\Windows\System32\cmd.exe
#
# Regex: /var/log/[^/]+\.log
# Matches: /var/log/test.log
# Not Matches: /var/log/test.gz
#
# Useful examples
\\Ntfrs\\
\\Ntds\\
\\EDB[^\.]+\.log
Sysvol\\Staging\\Nntfrs_cmp
\\System Volume Information\\DFSR
Scansione Loki

Corrispondenze Regin

Falsi positivi Regin

IOC basati su hash

IOC basati su nome file

File di log generato

Scanner LOKI sulla homepage della nostra azienda https://www.nextron-systems.com/loki/
Twitter @cyb3rOps @thor_scanner
Se sei interessato a una soluzione aziendale per la scansione APT, dai un'occhiata al fratello maggiore di Loki, THOR.
Scarica PyInstaller, passa alla directory del programma pyinstaller ed esegui:
python ./pyinstaller.py -F C:\path\to\loki.py
Questo creerà un loki.exe nella sottocartella ./loki/dist.
Per includere msvcr100.dll e migliorare la compatibilità del sistema operativo di destinazione, modifica la riga nel file ./loki/loki.spec che contiene a.binaries, con la seguente:
a.binaries + [('msvcr100.dll', 'C:\Windows\System32\msvcr100.dll', 'BINARY')],
venv, quindi esegui python -m venv path/to/venv dove path/to/venv è il percorso del tuo ambiente virtuale. Testa il tuo ambiente virtuale eseguendo path/to/venv/bin/python --version.
Aggiorna i moduli dell'ambiente virtuale per pip, setuptools e wheel eseguendo path/to/venv/bin/python -m pip install --upgrade pip setuptools wheel.path/to/venv/bin/python -m pip install colorama yara-python psutil rfc5424-logging-handler netaddrpath/to/venv/bin/python path/to/loki/loki-upgrader.py dove path/to/loki è il percorso del repository di Loki.sudo path/to/venv/bin/python loki.pyScarica i sorgenti YARA da qui
Lo scanner compilato potrebbe essere rilevato dai motori antivirus. Ciò è dovuto al fatto che lo scanner è uno script Python compilato che implementa alcune funzionalità di scansione del file system e dei processi che sono anche utilizzate nel codice malware compilato.
Se non ti fidi dell'eseguibile compilato, per favore compilalo tu stesso.
Loki - Semplice Scanner IOC Copyright (c) 2015 Florian Roth
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, versione 3 della Licenza, o (a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli.
Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, consultare http://www.gnu.org/licenses/