TP 1 - Analyse statique et dynamique
En cas d’incident, on va naturellement se demander :
- Quels fichiers (locaux ou non) ont été accédés, créés, supprimés ?
- Y-a-t-il eu des communications réseaux, et si oui, lesquelles (internes, externes, multiples, ponctuelles, permanentes, etc.)?
- En cas de communications réseaux, 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 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
- Importez le LAB virtuel AVL-LAB.ova
- Pour configurer l’interface réseau (
sudo ifup enpXsX
) - Décompressez avec
unzip
le fichier~/malware_samples/fichiers_cours_malwares.zip
- 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
)
Générer leurs empreintes (le hash). Vous pouvez utiliser les commandes linux (
md5sum
etsha256sum
).Calculer le leur fuzzy hash
- Quel est son intérêt ?
Tester les hashs dans
VirusTotal
ou un équivalent.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 bienfs 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” ?
- Quelle est la date/heure de compilation de chaque fichier ? Donnez votre conclusion (
Analyse du fichier lab01-01.exe
- 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 commandestrings
ou la commandeizz
de radare2 ? - Utilsez TheHive (Incident Management System) pour enregistrer l’incident (case), ses observables, IoCs, …
Analyse du fichier lab01-01.dll
- 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. - Identifiez les IoCs obtenues.
- Utilsez TheHive (Incident Management System) pour enregistrer l’incident (case), ses observables, IoCs, …
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)
- Le es fichier concerné est
~/malware_samples/fichiers_cours_malwares/tp1/lab01-02.exe
- Le fichier est il packé ?
- 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)
Créer un snapshot avant toute modification sur la VM windows.
Le fichier concerné par l’analyse est
Lab02-01.exe
Pour configurer l’interface réseau (
sudo ifup enpXsX
)Décompresser avec
unzip
le fichier~/malware_samples/fichiers_cours_malwares.zip
Mettez à jour la VM Linux AVL :
Lancer la VM XP à partir de ce snapshot
- Lancez
ProcessExplorer
- Lancez
Procmon
avec les filtres suivants :Process Name
Operation
RegSetValue
WriteFile
- Lancez
- Réaliser une première capture de la base de registre à l’aide de
Regshot
- 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
- Vous pouvez également lancer
tcpdump -n -i interface_réseau
(ou installezwireshark
) pour capturer et analyser le trafic entre la VM XP et la VM linux - 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 tramesWireshark
- 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 utiliserwireshark
si vous l’avez installé ounetcat
:sudo nc -l -p port_ecoute
)
Identifiez les IoCs obtenues.