
Vérificateur de hash en ligne pour Virustotal et autres services
_________ _ _ ______ _____ ______
| | | | | \ | | | | | | \ \ | | | | \ \ /.)
| | | | | | | | | | | | | | | | | | | | /)\|
|_| |_| |_| \_|__|_| |_| |_| _|_|_ |_| |_| // /
/'" "
Vérificateur de hachages en ligne pour Virustotal et autres services
Florian Roth
Munin est un utilitaire de vérification de hachages en ligne qui récupère des informations précieuses auprès de diverses sources en ligne
La version actuelle de Munin interroge les services suivants :
Mode par défaut - Lire les hachages depuis un fichier

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]
Vérificateur de hachages en ligne
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-f path Fichier à traiter (hachage ligne par ligne OU csv avec hachage dans chaque ligne - détecte automatiquement la position et le commentaire)
--vh search-string Interroge Valhalla pour les hachages par mot-clé, tags, nom de règle YARA, logiciel Mitre ATT&CK (ex. S0154), technique (ex. T1023) ou groupe de menace (ex. G0049)
--vhrule search-string
Interroge Valhalla pour les hachages via des règles par mot-clé, tags, nom de règle YARA, logiciel Mitre ATT&CK (ex. S0154), technique (ex. T1023) ou groupe de menace (ex. G0049)
-o output Fichier de sortie pour les résultats (CSV)
--vtwaitquota Ne pas continuer si le quota VT est dépassé mais attendre le jour suivant
--vtminav min-matches
Nombre minimum de correspondances AV pour interroger les informations de hachage depuis VT
--limit hash-limit Quitter après avoir traité ce nombre de nouveaux hachages en mode batch (cache ignoré).
--vhmaxage days Âge maximum de l'échantillon sur Valhalla à traiter
-c cache-db Nom du fichier de base de données cache (par défaut : vt-hash-db.json)
-i ini-file Nom du fichier ini contenant les clés API
-s sample-folder Dossier contenant les échantillons à traiter
--comment Publie un commentaire pour le hachage analysé contenant le commentaire de la ligne de log
-p vt-comment-prefix Préfixe de commentaire Virustotal
--download Active le téléchargement d'échantillons depuis Hybrid Analysis. SHA256 de l'échantillon requis.
-d download_path Chemin de sortie pour le téléchargement d'échantillons depuis Hybrid Analysis. Le dossier doit exister
--nocache Ne pas utiliser le fichier de base de données cache
--nocsv Ne pas écrire de CSV avec les résultats
--verifycert Vérifier les certificats SSL/TLS
--sort Trier les lignes d'entrée
--web Lancer Munin en tant que service web
-w port Port du service web
--cli Lancer Munin en mode interface en ligne de commande
--rescan Déclencher une nouvelle analyse de chaque fichier analysé
--debug Sortie de débogage
pip3 install -r requirements.txt (sur macOS ajoutez --user)cp munin.ini my.ini (voir section Obtenir les clés API pour de l'aide)python munin.py -i my.ini -f munin-demo.txtTraiter un résultat Virustotal Retrohunt et trier les lignes avant la vérification afin que les signatures correspondantes soient vérifiées par blocs
python3 munin.py -i my.ini -f ~/Downloads/retro_hunt
Traiter un répertoire contenant des échantillons et vérifier leurs hachages en ligne
python3 munin.py -i my.ini -s ~/malware/case34
Utiliser le mode interface en ligne de commande (nouveau dans v0.14)
python3 munin.py -i my.ini
Profil > Ma clé API pour votre clé API publiqueInscrivez-vous ici https://malshare.com/register.php
Inscrivez-vous ici https://bazaar.abuse.ch/. Vous pouvez ensuite trouver votre clé API dans votre Aperçu du compte.
Profil > Clé APIAuthkey est utilisée comme clé APIActuellement réservé aux clients ou chercheurs invités uniquement
https://valhalla.nextron-systems.com/
Hashlookup L'instance CIRCL est fournie gratuitement et servie au mieux.
Lancez munin avec --cli et suivez les instructions.
Exemple :
python3 munin.py -i my.ini --cli
Collez le contenu contenant des valeurs de hachage, puis appuyez sur CTRL+D pour finaliser l'entrée. La dernière ligne doit avoir un saut de ligne à sa fin.
Par défaut, il créera un fichier CSV avec la date du jour dans le nom du fichier.

Lancez munin avec --web et sélectionnez éventuellement un port -w port.
Exemple :
python3 munin.py -i my.ini --web -w 8080
Le service web attend des chaînes dans le schéma d'URL suivant.
http://server:port/<chaîne>
La chaîne peut être n'importe quelle chaîne sans sauts de ligne, par exemple
Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83
Le résultat ressemblera à ceci :
{
"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"
}
Les requêtes vers Virustotal doivent être limitées. Par conséquent, le service web applique un temps de refroidissement, minimisé en soustrayant le temps de traitement de toutes les autres plateformes du temps d'attente de 15 secondes.
cooldown_time = vt_wait_time - process_time
Pendant le refroidissement, les requêtes renverront cette réponse :
{"status": "VT cooldown active"}
Le refroidissement n'est pas pertinent lors de la demande de hachages déjà présents dans le cache de recherche.
Le script de vérification d'hôte et d'IP Munin (munin-host.py) récupère plus d'informations sur les adresses IP et les noms d'hôtes/domaines dans les listes d'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]
Vérificateur en ligne Virustotal (IP/Domaine)
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-f path Fichier à traiter (hachage ligne par ligne OU csv avec hachage dans chaque ligne - détecte automatiquement la position et le commentaire)
-o output Fichier de sortie pour les résultats (CSV)
-m max-items Nombre maximum d'éléments (urls, hôtes, échantillons) à afficher
-c cache-db Nom du fichier de base de données cache (par défaut : vt-hosts-db.json)
-i ini-file Nom du fichier ini contenant les clés API
--nocache Ne pas utiliser le chargement de la base de cache (vt-check-cache.pkl)
--nocsv Ne pas écrire de CSV avec les résultats
--recursive Traiter également les IP résolues
--download Essayer de télécharger les URLs (répertoires avec noms d'hôte/ip)
-d download_path Stocker les téléchargements dans le répertoire donné
--dups Ne pas ignorer les hachages en double
--noresolve Ne pas effectuer de test de résolution DNS sur les noms de domaine trouvés
--ping Effectuer un test ping sur les IP (accélère le processus si de nombreuses IP publiques mais routées en interne apparaissent dans le fichier texte)
--debug Sortie de débogage

Analyser le fichier de démonstration, extraire les IP et les hôtes, ne pas vérifier uniquement les domaines encore résolvables et télécharger les échantillons directement depuis les systèmes distants.
python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download
L'utilisation de munin-host.py dans un réseau surveillé par IDS déclenchera de nombreuses alertes car munin-host.py effectue des requêtes DNS pour des domaines malveillants et a la possibilité de télécharger des échantillons malveillants.
Le script munin-host.py nécessite le module pycurl. Il est parfois difficile de le faire fonctionner sur macOS car il nécessite qu'un openssl soit installé, qui est ensuite utilisé dans le processus de construction.
Si des erreurs se produisent, essayez ce qui suit (certains environnements nécessiteront 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"
Le script Hugin (hugin.py) récupère et affiche les informations de tous les échantillons renvoyés dans une rétrochasse. Le grand avantage est que vous n'avez pas à attendre 15 secondes entre chaque demande d'échantillon, mais que vous récupérez le fichier JSON complet via la v3 de l'API Virustotal. De cette façon, vous obtenez vos résultats immédiatement. L'inconvénient est que les autres services comme Any.run, Hybrid-Analysis, MISP ou Valhalla ne sont pas interrogés avec Hugin.
usage: hugin.py [-h] [-r retrohunt-name] [-i ini-file]
[--csv-path CSV_PATH] [--debug] [--no-comments]
Vérificateur de rétrochasse
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-r retrohunt-name Nom de la rétrochasse interrogée
-i ini-file Nom du fichier ini contenant la clé API VT
--csv-path CSV_PATH Écrire un CSV avec les résultats
--debug Sortie de débogage
--no-comments Ignorer les commentaires VirusTotal
Analyser une rétrochasse et exporter un fichier CSV avec les résultats.
python3 hugin.py -i config-with-your-key.ini -r retrohunt-123456789