
Controllo hash online per Virustotal e altri servizi
_________ _ _ ______ _____ ______
| | | | | \ | | | | | | \ \ | | | | \ \ /.)
| | | | | | | | | | | | | | | | | | | | /)\|
|_| |_| |_| \_|__|_| |_| |_| _|_|_ |_| |_| // /
/'" "
Controllo online di hash per Virustotal e altri servizi
Florian Roth
Munin è un'utilità di controllo online degli hash che recupera informazioni preziose da varie fonti online
La versione attuale di Munin interroga i seguenti servizi:
Modalità predefinita - Leggi hash da file

usage: munin.py [-h] [-f path] [--vh search-string]
[--vhrule search-string] [-o output] [--vtwaitquota]
[--vtminav min-matches] [--limit hash-limit]
[--vhmaxage days] [-c cache-db] [-i ini-file]
[-s sample-folder] [--comment] [-p vt-comment-prefix]
[--download] [-d download_path] [--nocache] [--nocsv]
[--verifycert] [--sort] [--web] [-w port] [--cli]
[--rescan] [--debug]
Controllo online di hash
argomenti opzionali:
-h, --help mostra questo messaggio di aiuto ed esci
-f path File da elaborare (hash riga per riga OPPURE csv con hash
in ogni riga - rileva automaticamente posizione e commento)
--vh search-string Interroga Valhalla per hash tramite parola chiave, tag, nome
regola YARA, software Mitre ATT&CK (es. S0154),
tecnica (es. T1023) o gruppo di minaccia (es. G0049)
--vhrule search-string
Interroga Valhalla per hash tramite regole tramite parola
chiave, tag, nome regola YARA, software Mitre ATT&CK (es.
S0154), tecnica (es. T1023) o gruppo di minaccia
(es. G0049)
-o output File di output per i risultati (CSV)
--vtwaitquota Non continuare se la quota VT è superata, ma attendi
il giorno successivo
--vtminav min-matches
Numero minimo di corrispondenze AV per interrogare le info
hash da VT"
--limit hash-limit Esci dopo aver gestito questo numero di nuovi hash in modalità
batch (cache ignorata).
--vhmaxage days Età massima del campione su Valhalla da elaborare
-c cache-db Nome del file di database della cache (default: vt-hash-
db.json)
-i ini-file Nome del file ini che contiene le chiavi API
-s sample-folder Cartella con campioni da elaborare
--comment Invia un commento per l'hash analizzato che
contiene il commento dalla riga di log
-p vt-comment-prefix Prefisso commento Virustotal
--download Abilita il download dei campioni da Hybrid Analysis.
È necessario lo SHA256 del campione.
-d download_path Percorso di output per il download dei campioni da Hybrid
Analysis. La cartella deve esistere
--nocache Non utilizzare il file di database della cache
--nocsv Non scrivere un CSV con i risultati
--verifycert Verifica i certificati SSL/TLS
--sort Ordina le righe di input
--web Esegui Munin come servizio web
-w port Porta del servizio web
--cli Esegui Munin in modalità interfaccia a riga di comando
--rescan Attiva una nuova scansione di ogni file analizzato
--debug Output di debug
pip3 install -r requirements.txt (su macOS aggiungi --user)cp munin.ini my.ini (vedi sezione Ottenere le chiavi API per aiuto)python munin.py -i my.ini -f munin-demo.txtElabora un risultato di Retrohunt di Virustotal e ordina le righe prima del controllo in modo che le firme corrispondenti vengano controllate in blocchi
python3 munin.py -i my.ini -f ~/Downloads/retro_hunt
Elabora una directory con campioni e verifica i loro hash online
python3 munin.py -i my.ini -s ~/malware/case34
Usa la modalità interfaccia a riga di comando (novità nella v0.14)
python3 munin.py -i my.ini
Profilo > La mia chiave API per la tua chiave API pubblicaRegistrati qui https://malshare.com/register.php
Registrati qui https://bazaar.abuse.ch/. Puoi poi trovare la tua chiave API nella tua Panoramica account.
Profilo > Chiave APIAuthkey viene usato come chiave APIAttualmente solo per clienti o ricercatori invitati
https://valhalla.nextron-systems.com/
Hashlookup L'istanza di CIRCL è fornita gratuitamente e servita secondo il criterio del miglior sforzo.
Avvia munin con --cli e segui le istruzioni.
Es.
python3 munin.py -i my.ini --cli
Incolla il contenuto con valori hash e poi premi CTRL+D per finalizzare l'input. L'ultima riga necessita di un'interruzione di riga alla fine.
Nella modalità predefinita, verrà creato un file CSV con la data corrente nel nome.

Avvia munin con --web e opzionalmente seleziona una porta -w port.
Es.
python3 munin.py -i my.ini --web -w 8080
Il servizio web attende stringhe nel seguente schema URL.
http://server:port/<stringa>
La stringa può essere qualsiasi stringa senza interruzioni di riga, es.
Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83
Il risultato sarà simile a questo:
{
"comment": "Emotet",
"commenter": "-",
"comments": "0",
"copyright": "Copyright (C) America Online, Inc. 1999 - 2004",
"description": "Utilities",
"expired": false,
"filenames": "sourcedev.exe, MISCUTIL, x8ykNnr_9WofXq7Nh_xuEzSPW.exe, jwuKBLWN681ztj6Zks.exe",
"filetype": "Win32 EXE",
"first_submitted": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
"firstsubmission": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
"harmless": false,
"hash": "1585ad28f7d1e0ca696e6c6c2f1d008a",
"hybrid_available": false,
"hybrid_compromised": "-",
"hybrid_date": "-",
"hybrid_score": "-",
"imphash": "2820d9bdc397f88a8a1e957e1a824482",
"last_submitted": "2019-02-27 09:44:03",
"malshare_available": false,
"md5": "1585ad28f7d1e0ca696e6c6c2f1d008a",
"misp_available": true,
"misp_events": "",
"misp_info": [],
"mssoft": false,
"origname": "-",
"positives": 48,
"rating": "malicious",
"res_color": "\u001b[41m",
"result": "48 / 64",
"revoked": false,
"sha1": "4561d0ad575d5f02fb06e062a37de15861c3bd89",
"sha256": "35e304d10d53834e3e41035d12122773c9a4d183a24e03f980ad3e6b2ecde7fa",
"signed": false,
"signer": "-",
"total": 64,
"urlhaus_available": true,
"vendor_results": {
"CrowdStrike": "win/malicious_confidence_100% (W)",
"ESET-NOD32": "a variant of Win32/Kryptik.GOUY",
"F-Secure": "Trojan.TR/AD.Emotet.pdiuu",
"GData": "Trojan.GenericKD.40960256",
"Kaspersky": "HEUR:Trojan.Win32.Generic",
"McAfee": "Emotet-FLL!1585AD28F7D1",
"Microsoft": "Trojan:Win32/Emotet.DN",
"Sophos": "Mal/Emotet-Q",
"Symantec": "Trojan.Gen.2",
"TrendMicro": "-"
},
"virus": "Microsoft: Trojan:Win32/Emotet.DN / Kaspersky: HEUR:Trojan.Win32.Generic / McAfee: Emotet-FLL!1585AD28F7D1 / CrowdStrike: win/malicious_confidence_100% (W) / ESET-NOD32: a variant of Win32/Kryptik.GOUY / Symantec: Trojan.Gen.2 / F-Secure: Trojan.TR/AD.Emotet.pdiuu / Sophos: Mal/Emotet-Q / GData: Trojan.GenericKD.40960256",
"virusbay_available": false,
"vt_positives": 48,
"vt_queried": false,
"vt_total": 64,
"vt_verbose_msg": "Scan finished, information embedded"
}
Le query a Virustotal devono essere limitate. Pertanto il servizio web applica un tempo di raffreddamento, che è minimizzato sottraendo il tempo impiegato per elaborare tutte le altre piattaforme dal tempo di attesa di 15 secondi.
cooldown_time = vt_wait_time - process_time
Durante il raffreddamento, le richieste restituiranno questa risposta:
{"status": "VT cooldown active"}
Il raffreddamento non è rilevante quando si richiedono hash già presenti nella cache di ricerca.
Lo script di controllo host e IP di Munin (munin-host.py) recupera maggiori informazioni su indirizzi IP e nomi host/dominio negli elenchi IOC.
usage: munin-host.py [-h] [-f path] [-o output] [-m max-items] [-c cache-db]
[-i ini-file] [--nocache] [--nocsv] [--recursive]
[--download] [-d download_path] [--dups] [--noresolve]
[--ping] [--debug]
Virustotal Online Checker (IP/Domain)
argomenti opzionali:
-h, --help mostra questo messaggio di aiuto ed esci
-f path File da elaborare (hash riga per riga OPPURE csv con hash in
ogni riga - rileva automaticamente posizione e commento)
-o output File di output per i risultati (CSV)
-m max-items Numero massimo di elementi (url, host, campioni) da mostrare
-c cache-db Nome del file di database della cache (default: vt-hosts-
db.json)
-i ini-file Nome del file ini che contiene le chiavi API
--nocache Non utilizzare il caricamento del database cache (vt-check-cache.pkl)
--nocsv Non scrivere un CSV con i risultati
--recursive Elabora anche gli IP risolti
--download Prova a scaricare gli URL (directory con nomi host/ip)
-d download_path Salva i download nella directory specificata
--dups Non saltare hash duplicati
--noresolve Non eseguire il test di risoluzione DNS sui nomi di dominio trovati
--ping Esegui controllo ping sugli IP (accelera il processo se molti
IP pubblici ma instradati internamente appaiono nel file di testo)
--debug Output di debug

Analizza il file demo, estrai IP e host, non controllare solo i domini che sono ancora risolvibili e scarica i campioni direttamente dai sistemi remoti.
python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download
Usare munin-host.py in una rete monitorata da IDS causerà numerosi avvisi poiché munin-host.py esegue ricerche DNS per domini malevoli e ha l'opzione per scaricare campioni malevoli.
Lo script munin-host.py richiede il modulo pycurl. A volte è complicato farlo funzionare su macOS poiché richiede un openssl installato, che viene poi utilizzato nel processo di compilazione.
Se si verificano errori, prova quanto segue (alcuni ambienti richiederanno pip3)
pip uninstall pycurl
brew update
brew reinstall openssl
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"
Lo script Hugin (hugin.py) recupera e visualizza informazioni su tutti i campioni restituiti in un retrohunt. Il grande vantaggio è che non devi aspettare 15 secondi tra ogni richiesta di campione, ma puoi ottenere il file JSON completo dei risultati tramite v3 dell'API di Virustotal. In questo modo ottieni i risultati immediatamente. Lo svantaggio è che altri servizi come Any.run, Hybrid-Analysis, MISP o Valhalla non vengono interrogati con Hugin.
usage: hugin.py [-h] [-r retrohunt-name] [-i ini-file]
[--csv-path CSV_PATH] [--debug] [--no-comments]
Retrohunt Checker
argomenti opzionali:
-h, --help mostra questo messaggio di aiuto ed esci
-r retrohunt-name Nome per il retrohunt interrogato
-i ini-file Nome del file ini che contiene la chiave API VT
--csv-path CSV_PATH Scrivi un CSV con i risultati
--debug Output di debug
--no-comments Salta i commenti di VirusTotal
Analizza un retrohunt ed esporta un file CSV con i risultati.
python3 hugin.py -i config-with-your-key.ini -r retrohunt-123456789