Qu'est-ce que Munin ?
nunin est un utilitaire de vérification de hashs en ligne qui récupère des informations précieuses à partir de diverses sources en ligne.
La version actuelle de Munin interroge les services suivants :
Copie d'écran
node par défaut : Lecture des hashs à partir d'un fichier
Utilisation
usage: munin.py [-h] [-f path] [-c cache-db] [-i ini-file] [-s sample-folder]
[--comment] [-p vt-comment-prefix] [--download]
[-d download_path] [--nocache] [--intense] [--retroverify]
[-r num-results] [--nocsv] [--verifycert] [--sort] [--debug]
Online Hash Checker
optional arguments:
-h, --help show this help message and exit
-f path File to process (hash line by line OR csv with hash in
each line - auto-detects position and comment)
-c cache-db Name of the cache database file (default: vt-hash-
db.pkl)
-i ini-file Name of the ini file that holds the API keys
-s sample-folder Folder with samples to process
--comment Posts a comment for the analysed hash which contains
the comment from the log line
-p vt-comment-prefix Virustotal comment prefix
--download Enables Sample Download from Hybrid Analysis. SHA256
of sample needed.
-d download_path Output Path for Sample Download from Hybrid Analysis.
Folder must exist
--nocache Do not use cache database file
--intense Do use PhantomJS to parse the permalink (used to
extract user comments on samples)
--retroverify Check only 40 entries with the same comment and
therest at the end of the run (retrohunt verification)
-r num-results Number of results to take as verification
--nocsv Do not write a CSV with the results
--verifycert Verify SSL/TLS certificates
--sort Sort the input lines (useful for VT retrohunt results)
--debug Debug output
Caractéristiques
- MODE A: Extrait des hashs de n'importe quel fichier texte à l'aide d'expressions régulières
- MODE B: Recherche des fichiers dans le répertoire et vérifie les hashs en ligne
- MODE C: Interface en ligne de commande (ne fonctionne pas si aucun fichier ou répertoire n'est spécifié)
- Récupère des informations de Virustotal par l'API (réponse JSON) et d'autres informations via permalink (analyse HTML)
- Récupère des informations supplémentaires d'une liste de platformes
- Conserve un historique (cache) pour interroger les services une seule fois pour un hachage pouvant apparaître plusieurs fois dans le fichier texte
- Les objets mis en cache sont stockés en JSON
- Crée un fichier CSV avec les résultats pour un post-traitement et un rapport faciles
- Ajoute les résultats à un fichier CSV précédent, s'il existe.
Affichage
- Hash et commentaire (le commentaire est le reste de la ligne dont le hash a été extrait)
- Correspondances des éditeurs antivirus basés sur une liste définie par l'utilisateur
- Noms de fichiers utilisés sur Internet
- Informations PE, telles que la description, le nom de fichier d'origine et la déclaration de copyright
- Signataire d'un exécutable portable signé
- Résultat basé sur le ratio de Virustotal
- Première et dernière soumission
- Tags pour certains indicateurs: Inoffensif, Signé, Expiré, Révoqué, MSSoftware
Contrôles supplémentaires
- Demande à Malshare.com des fichiers uploadés
- Demande des rapports d'analyse à Hybrid-Analysis.com
- Demande plusieurs instances MISP à la recherche d'évènements disponibles
- Demande des rapports d'analyse à la sandbox Any.run
- Demande des rapports d'analyse à la sandbox CAPE
- Demande des rapports d'analyse à URLhaus
- Demande des fichiers disponibles à Malshare
- Demande à Valhalla des règles YARA qui correspondent
- Imphash duplique dans le batch actuel > vous permet de repérer les doublons dans les hachages de la table d'importation
- Vérification des soublons de signatures des exécutables PE
Pour commencer
- Télécharger / cloner le référentiel
- Installez les paquets requis :
pip3 install -r requirements.txt (sur macOS ajouter --user)
- (facultatif: requis pour le mode --intense) Téléchargez PhantomJS et placez-le dans votre $PATH, exemple /usr/local/bin http://phantomjs.org/download.html
- Définissez les clés d’API pour les différents services dans votre propre fichier ini (utilisez
munin.ini comme template, et voir la section Obtenir vos clés API si vous avez besoin d'aide)
- Utilisez le fichier de démonstration pour une première utilisation :
python munin.py -i my.ini -f munin-demo.txt
Lignes de commande typiques
Traiter un résultat Virustotal Retrohunt et trier les lignes avant de vérifier afin que les signatures correspondantes soient vérifiées par blocs
python3 munin.py -i my.ini -f ~/Downloads/retro_hunt
Traiter un fichier IOC et montrer qui a commenté ces exemples sur Virustotal (utilise PhantomJS, utilisation plus importante de la CPU)
python3 munin.py -i my.ini -f ~/Downloads/misp-event-1234.csv --sort --intense
Traiter un répertoire avec des échantillons et vérifier leurs hachages en ligne
python3 munin.py -i my.ini -s ~/malware/case34
Utiliser l'interface de ligne de commande (nouveauté de la version 0.14)
python3 munin.py -i my.ini
Obtenir vos clés API utilisées par Munin
Virustotal
Créer un compte ici https://www.virustotal.com/gui/join-us
Allez chercher votre clé publique d'API dans Profile > My API key
Malshare
Créer un compte ici
https://malshare.com/register.php
Hybrid Analysis
Créer un compte ici https://www.hybrid-analysis.com/signup
Après s'être logué, vérifier Profile > API key
MISP
Logez vous sur votre MISP
Aller sur votre profil (My Profile)
La valeur de Authkey est utilisée comme clé API
Notez que le fichier ini utilise à la fois une liste d'instance MISP et les clés API correspondantes
Valhalla
Actuellement pour les clients, et les chercheurs, sur invitation.
Mode interface de ligne de commande
Exécutez munin avec l'option
--cli et suivez les instructions.
exemple :
python3 munin.py -i my.ini --cli
Coller les valeurs de hashs puis pressez
CTRL+D pour terminer la saisie. La dernière ligne à besoin d'un "ligne break" à la fin.
Par défaut, l'outil va créer un fichier CSV avec la date courante et le nom du fichier.
Mode service web
Exécutez munin avec l'option
--web et, facultativement, spécifier un port avec
-w port
exemple :
python3 munin.py -i my.ini --web -w 8080
Le service web attend les chaines de caractères dans ce format :
http://server:port/
Les chaines de caractères peut être n'importe quoi, sans line break. Exemple :
Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83
Le résultat sera :
{
"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 ont besoin d'être ralenties. Donc le service web applique une temps de ralentissement, qui est minimisé par la substraction du temps que pennenent chaque plateforme à exécuter la requête, des 15 secondes d'attentes.
cooldown_time = vt_wait_time - process_time
Pendant le ralentissement, les requêtes répondrons cette réponse :
{"status": "VT cooldown active"}
Le ralentissement n'est pas applicable lorsque les hashs intéroogés sont dans le cache.
Hosts Munin
La vérification de hosts et d'adresses IP de Munin (
munin-host.py) récupère plus d'informations sur les adresses IP et les hosts ou noms de domaines dans les listes IOC
Utilisation
usage: munin.py [-h] [-f path] [-c cache-db] [-i ini-file] [-s sample-folder]
[--comment] [-p vt-comment-prefix] [--download]
[-d download_path] [--nocache] [--intense] [--nocsv]
[--verifycert] [--sort] [--web] [-w port] [--debug]
Online Hash Checker
optional arguments:
-h, --help show this help message and exit
-f path File to process (hash line by line OR csv with hash in
each line - auto-detects position and comment)
-c cache-db Name of the cache database file (default: vt-hash-
db.pkl)
-i ini-file Name of the ini file that holds the API keys
-s sample-folder Folder with samples to process
--comment Posts a comment for the analysed hash which contains
the comment from the log line
-p vt-comment-prefix Virustotal comment prefix
--download Enables Sample Download from Hybrid Analysis. SHA256
of sample needed.
-d download_path Output Path for Sample Download from Hybrid Analysis.
Folder must exist
--nocache Do not use cache database file
--intense Do use PhantomJS to parse the permalink (used to
extract user comments on samples)
--nocsv Do not write a CSV with the results
--verifycert Verify SSL/TLS certificates
--sort Sort the input lines
--web Run Munin as web service
-w port Web service port
--cli Run Munin in command line interface mode
--debug Debug output
Copie d'écran
Exemples
Balayez le fichier de démonstration pour extraire les IP et les hosts, ne vous contentez pas de vérifier que les domaines sont toujours résolvables et de télécharger les fichiers directement à partir des systèmes distants.
python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download
Attention
Utiliser
munin-host.py dans un réseau surveillé par un
IDS provoquera des alertes puisque munin-host.py fait des requêtes DNS des domaines malicieux et a une option pour télécharger les fichiers malicieux.
Problèmes
pycurl sur macOS
Le script munin-host.py nécessite le module pycurl. C'est quelquefois assez compliqué à le faire fonctionner sur macOS puisqu'il nécessite l'installation d'openssl, qui est utilisé lors de la compilation du module.
Si cette erreur survient, essayer ce qui suit (vous aurez besoin de 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"
Téléchargement
Tags
MALWARE
OUTIL D'ADMINISTRATION
Inscription à notre lettre d'information
Inscrivez-vous à notre
lettre d'information pour vous tenir au courant de nos actualités et de nos dernières trouvailles.