TP 1 - Analyse statique et dynamique

En cas d’incident, on va naturellement se demander :

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 adjacent est 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. Ceci 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,..), la date de compilation, l’adresse relative du point d’entrée (main, DLLMain, DriverEntry,..), 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 leur IDS. L’alerte consiste en des tentatives de connections 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, chaines 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. Générer leurs empreintes (le hash). Vous pouvez utiliser les commandes linux (md5sum et sha256sum).

  2. Calculer le leur fuzzy hash

    • Quel est son intérêt ?
  3. Tester les hashs dans VirusTotal ou un équivalent.

  4. A l’aide de la commande radare2 -A fihier_à_analyser, analysez les deux fichiers. (cf. https://rada.re/r/docs.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 obtenues 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 ?
  2. Utilsez TheHive (Incident Management System) pour enregistrer l’incident (case), ses observables, IoCs, …

Analyse du fichier lab01-01.dll

  1. A l’aide de radare2, analysez le fichier lab01-01.dll en suivant les mêmes étapes et en utlisant les mêmes outils que précédement.
  2. Identifiez les IoCs obtenues.
  3. Utilsez TheHive (Incident Management System) pour enregistrer l’incident (case), ses observables, IoCs, …
Note

On peut déterminer si un fichier est “packed”, en utilisant l’utilitaire PEiD. Il se touve dans la VM XP du LAB. Dans le cas où le fichier est packé, Vous pouvez utiliser upx pour décompressez 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 es 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. Mettez à jour la VM Linux AVL :

  5. 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 installez 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 clefs 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 la programme (Vous pouvez utiliser wireshark si vous l’avez installé ou netcat : sudo nc -l -p port_ecoute)

Identifiez les IoCs obtenues.