TP - Analyse statique et dynamique

ImportantPréparation VM d’analyse sous Windows

Flare (sous Windows) et REMnux (sous Linux) sont des VMs très utilisées en cybersécurité pour l’analyse de logiciels malveillants. Faute de temps, nous allons tout simplement créer une VM Windows 10 à partir de cet ISO par exemple et installer ces quelques outils d’analyse nécessaires pour ce TP.

Pour les utilisateurs de VirtualBox, vous pouvez télécharger cette VM au format OVA déjà prête, mais il faut compter le temps de téléchargement et de décompression qui ne sont pas négligeables.

Une fois la VM installée, veuillez désactiver les protections Windows (protection antivirus, Windows Defender, pare-feu, etc.), puis mettez la VM en pause et créez un snapshot.

TP 1 - Analyse Statique de Malware

PART 1

Important

Les fichiers à analyser peuvent être téléchargés ici

CautionObjectifs pédagogiques

À la fin de ce TP, vous serez capable de :

  • Générer et comparer différents types de hachages.
  • Utiliser VirusTotal pour l’identification.
  • Comprendre et appliquer le fuzzy hashing.
  • Identifier le vrai type d’un fichier.
  • Extraire et analyser des chaînes de caractères.

Exercice 1 : Hashing et identification simple

Objectif

Comprendre la génération d’empreintes cryptographiques.

Étapes

  1. Téléchargez md5-1.exe et md5-2.exe.

  2. Calculez leur MD5 :

    Get-FileHash .\md5-1.exe -Algorithm MD5
    Get-FileHash .\md5-2.exe -Algorithm MD5
  3. Constatez qu’ils ont le même MD5.

  4. Générez un SHA256 :

    Get-ChildItem *.exe | Get-FileHash -Algorithm SHA256

Questions

  1. Les fichiers sont-ils identiques ?
  2. Pourquoi MD5 n’est-il plus fiable ?
  3. Pourquoi SHA256 est-il recommandé ?

Exercice 2 : Vérifier la présence d’un malware sur VirusTotal

Objectif

Éviter de réanalyser un malware déjà connu.

Étapes

  1. Obtenir le SHA256 du fichier 8888888.png.
  2. Rechercher ce hash sur VirusTotal.

Questions

  1. VirusTotal retourne-t-il des résultats ?
  2. Que signifie l’absence d’identification ?
  3. Pourquoi le hashbusting est-il utilisé ?

Exercice 3 : Fuzzy Hashing (ssdeep)

Objectif

Comparer des fichiers même s’ils ne sont pas strictement identiques.

Étapes

  1. Placer ssdeep.exe avec 8888888.png.

  2. Générez un fuzzy hash :

    .\ssdeep.exe .\8888888.png

Questions

  1. À quoi sert le fuzzy hashing ?
  2. Pourquoi contourne-t-il le hashbusting ?

Exercice 4 : Identifier le vrai type d’un fichier

Étapes

  1. Utilisez filetype.exe :

    .\filetype.exe -i .\8888888.png

Exercice 5 : Extraction et analyse de chaînes de caractères

Étapes

  1. Extraire les chaînes de caractères :

    strings.exe -n 5 .\8888888.png > strings_output.txt
  2. Rechercher :

    • APIs réseau
    • APIs d’injection
    • URLs, chemins, éléments suspects

Analyse

  • Identifier :

  • comportements internes,

  • chaînes codées,

  • exécutable légitime utilisé comme base.

PART 2

En cas d’incident, on se demande naturellement :

  • Quels fichiers (locaux ou non) ont été accédés, créés, supprimés ?
  • Y a-t-il eu des communications réseau, et si oui, lesquelles (internes, externes, multiples, ponctuelles, permanentes, etc.) ?
  • En cas de communications réseau, quels sont leurs buts / contenus (spamming, (D)DoS, exfiltration de données, etc.) et leurs destinations ?
  • Est-ce une attaque ciblée ou opportuniste ?
  • Est-ce une attaque persistante ou non ?
  • Quel est le périmètre de compromission ?

Lorsque votre antivirus détecte un code malveillant, il ne suffit pas de le supprimer ou de le mettre en quarantaine, qui plus est dans un environnement d’entreprise. Il faut essayer de répondre aux questions non exhaustives citées plus haut.

L’objectif de ce TP est de se familiariser avec les outils d’analyse statique d’un code malveillant. Ces outils permettent d’analyser la structure sur disque du malware, à savoir les fichiers au format PE et ELF, afin d’en extraire des informations comme les valeurs des variables initialisées, les DLLs importées et les fonctions associées, les fonctions exportées, le nombre de sections, les noms des sections, le type du fichier (DLL, EXE, etc.), la date de compilation, l’adresse relative du point d’entrée (main, DLLMain, DriverEntry, etc.), l’adresse préférée de chargement du fichier en mémoire et de ses différentes sections, le contenu de la section .rsrc, etc.

L’équipe SOC vous a alerté d’un incident de sécurité remonté par un de leurs IDS. L’alerte consiste en des tentatives de connexions suspectes vers cette adresse IP 127.26.152.13. Après une première phase de collecte de preuves, il a été découvert sur la machine en question deux fichiers suspects tp1/lab01-01.exe et tp1\lab01-01.dll. Faites une première analyse des fichiers.

L’analyse d’un malware comprend d’abord une analyse statique (hachage, recherche OSINT, chaînes de caractères, structure PE). Ensuite, une analyse dynamique est effectuée (surveillance des processus, du réseau, du registre et des systèmes de fichiers), souvent avec des outils d’analyse automatisés. Enfin, une désobfuscation des scripts peut être nécessaire pour comprendre le malware.

Exercice 1 (cf. Analyse statique)

Dans la VM Linux AVL

  1. Importez le LAB virtuel AVL-LAB.ova
  2. Pour configurer l’interface réseau (sudo ifup enpXsX)
  3. Décompressez avec unzip le fichier ~/malware_samples/fichiers_cours_malwares.zip
  4. Mettez à jour la VM :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/securitylab-repository/scripts/refs/heads/main/install_mfa)"  -s  user_name

Taches d’analyse communes aux deux fichiers (lab01-01.exe et lab01-01.dll)

  1. Tester les hashs dans VirusTotal ou un équivalent.

  2. À l’aide de la commande radare2 -A fichier_à_analyser, analysez les deux fichiers (cf. https://book.rada.re/install/docker.html) :

    • Quelle est la date/heure de compilation de chaque fichier ? Donnez votre conclusion (iI | grep --color=auto compiled)
    • Relevez les APIs utilisées (ii ou bien fs imports ; f)
    • Quelle est la taille de chaque section sur disque et en mémoire, les noms des sections, leur nombre et leur contenu (iS) ?
    • Le fichier est-il compressé “packed” ?

Analyse du fichier lab01-01.exe

  1. Identifiez les IoCs obtenus en analysant les fonctions importées de la DLL kernel32.dll (ii~KERNEL32) et les chaînes de caractères retrouvées par la commande strings ou la commande izz de radare2.

Analyse du fichier lab01-01.dll

  1. À l’aide de radare2, analysez le fichier lab01-01.dll en suivant les mêmes étapes et en utilisant les mêmes outils que précédemment.
  2. Identifiez les IoCs obtenus.
Note

On peut déterminer si un fichier est “packed” en utilisant l’utilitaire PEiD. Il se trouve dans la VM XP du LAB. Dans le cas où le fichier est packé, vous pouvez utiliser upx pour décompresser le fichier :

$ upx -o unpacked.exe -d packed.exe

Que pouvez-vous dire sur le comportement du fichier en analysant les fonctions importées et les chaînes de caractères retrouvées ?

Exercice 2 (cf. Analyse statique)

  1. Le fichier concerné est ~/malware_samples/fichiers_cours_malwares/tp1/lab01-02.exe.
  2. Le fichier est-il packé ?
  3. Refaites les mêmes étapes que lors de l’exercice 1.> Que pouvez-vous dire sur le comportement du fichier en analysant les fonctions importées et les chaînes de caractères retrouvées ?

Exercice 3 (cf. Analyse dynamique)

Important

Créer un snapshot avant toute modification sur la VM Windows.

  1. Le fichier concerné par l’analyse est Lab02-01.exe

  2. Pour configurer l’interface réseau (sudo ifup enpXsX)

  3. Décompresser avec unzip le fichier ~/malware_samples/fichiers_cours_malwares.zip.

  4. Lancer la VM XP à partir de ce snapshot :

    • Lancez ProcessExplorer
    • Lancez Procmon avec les filtres suivants :
      • Process Name
      • Operation
        • RegSetValue
        • WriteFile

50%
  1. Réaliser une première capture de la base de registre à l’aide de Regshot.
  2. Lancer dans la VM Linux INetSim (c’est un simulateur de services) :
sudo systemctl stop systemd-resolved
sudo inetsim --data /home/debian/.inetsim_data/data/inetsim --conf /home/debian/.inetsim_data/inetsim.conf
  1. Vous pouvez également lancer tcpdump -n -i interface_réseau (ou installer wireshark) pour capturer et analyser le trafic entre la VM XP et la VM Linux.
  2. Lancer maintenant le programme à analyser dans la VM XP :

Analyser les caractéristiques du processus avec ProcessExplorer, notamment :

  • Les handles ouverts par le processus (View --> Lower Pane View --> Handles)
  • Les DLLs qui sont chargées dynamiquement par le processus (View --> Lower Pane View --> DLLs)

Analyser le résultat de Procmon :

  • Y a-t-il des fichiers créés par le programme ? Relevez leurs noms et comparez leurs caractéristiques avec ceux du programme analysé.
  • Y a-t-il des clés ou des valeurs de registre modifiées ? Si oui, dans quel but le programme fait-il cela ? Confirmez ces résultats avec RegShot.

Analyser le résultat des logs de INetSim ou les trames Wireshark :

  • Le programme a-t-il une activité réseau ? Si oui, laquelle ?
  • Récupérez les données envoyées ou reçues par le programme (vous pouvez utiliser wireshark si vous l’avez installé ou netcat : sudo nc -l -p port_ecoute).

Identifiez les IoCs obtenus.