Entreprise d'experts en Sécurité Informatique : Audits et conseils en cybersécurité
Entreprise française de cybersécurité depuis 2004
☎ 03 60 47 09 81 - info@securiteinfo.com

MALWARE OUTIL D'ADMINISTRATION

munin, vérificateur de hashs en ligne pour Virustotal et d'autres services


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.


    SecuriteInfo.com est une entreprise française de cybersécurité. Nous proposons différentes solutions matérielles et prestations de services permettant de sécuriser les données des Systèmes d'Information d'entreprises ou de collectivités. Notre périmètre d'intervention couvre l'intégralité de votre système d'information : Sécurité périmétrique, réseaux, accès distants, VPN, solutions anti-spam et anti-malwares, différents audits réseaux et systèmes, vérification de la politique de sécurité, hébergement sécurisé ...
    Facebook SecuriteInfo.com
    Twitter de SecuriteInfo.com
    Github de SecuriteInfo.com
    Calculs scientifiques distribués contre les maladies, équipe SecuriteInfo.com
    Depuis 2015, SecuriteInfo.com soumet et analyse des malwaressur VirusTotal
    Depuis 2020, SecuriteInfo.com participe à la lutte antivirale avec nos amis suisses de Malware Baazar (Abuse.ch)
    © 2000-2026 - Tous droits réservés SecuriteInfo.com