TP2 : Forensics : Analyse de la mémoire vive avec Volatility - tsylla/IT381_TP GitHub Wiki
L'analyse de la mémoire vive (RAM) est une partie très importante dans le forensic. Elle permet de trouver les malwares et/ou autres programmes malveillants éventuels
en cours d'exécution sur le système. Ce TP sera basé sur l'utilisation de Volatility, un outil open source pour l'analyse de mémoire vive. Il peut être utilisé sur les
systèmes 32 et 64 bits et supporte Windows, Linux, Mac et les systèmes Android. Le framework Volatility est écrit en Python et peux donc être aisement utilisé sur les OS
compatibles Python. Il peut analyser les dumps de mémoire de machines physiques, de VM VMWare et VirtualBox, etc.
Le plugin malfind
permet de rapidement dumper les processus malicieux et les analyser. cmdscan
est utilié pour savoir les dernières commandes exécutées sur la machine compromise.
Les outils en ligne Virus Total et Payload Security peuvent être utilisés pour vérifier les résultats des analyses.
Format mémoire supporté par Volatility :
* Mémoire physique Raw
* Firewire (IEEE 1394)
* Expert Witness (EWF)
* 32 and 64-bit Windows Crash Dump
* 32 and 64-bit Windows Hibernation
* 32 and 64-bit MachO files
* Virtualbox Core Dumps
* VMware Saved State (.vmss) and Snapshot (.vmsn)
* HPAK Format (FastDump)
* QEMU memory dumps
Volatility est par défaut installé sur Kali Linux. Pour toute autre raison si vous ne disposez pas de Volatility sur votre système (par exemple autre que Kali), installez-le :
apt-get install volatility
L'outil VBoxManage nous permet de créer un extrait de la mémoire RAM d'une VM en cours d'exécution. Pour ce faire, nous allons spécifier l'option dumpvmcore --filename <name>
. Cela
va créer un dump (capture) de la VM en cours d'exécution qui sera sauvegardé dans le fichier spécifié. Le fichier créé aura l'extension standart ELF (Executable et Linkable Format) et comportera
quelques extensions documentation de VBoxManage.
vboxmanage debugvm "nom_VM" dumpvmcore --filename dump_nom_vm_date_heure.elf
Nous allons récupérer les références (adresses) de la mémoire principale (section LOAD) à travers objdump :
objdump -h dump_nom_vm_date_heure.elf|egrep -w "(Idx|load1)"
- A partir du résultat envoyé, quelle est l'offset de départ de la section LOAD ? Quelle est sa taille en Mo, en Go ?
Extrayez la RAM en utilisant la commande suivante :
size=taille_en_octet;off=_adresse_offset;head -c $(($size+$off)) dump_nom_vm_date_heure.elf|tail -c +$(($off+1)) > ram_nom_vm_date_heure.raw
NB: Il faut ajouter la valeur 0x comme préfixe de taille_en_octet et off.
A présent, créer un hash du fichier de la RAM en utilisant l'algorithme SHA-256, sauvegardez un fichier. Ce hash sera utilisé pour vérifier que le fichier n'a pas été altéré lors de l'analyse.
sha256sum ram_nom_vm_date_heure.raw > ram_checksum.txt
- Quel est le hash généré ? Selon vous, que pourrais-t-il se passer si un octect du fichier RAM est modifié ?
Effectuez une copie du fichier. Nous travaillerons à partir de cette copie. Cela permet de garder le fichier original intact.
cp ram_nom_vm_date_heure.raw ram_nom_vm_date_heure_copie.raw
Créez à nouveau un hash de la copie du fichier.
- Quel est le hash généré ?
Pour commencer, il faut identifier les profils pris en charge par l'image RAM dumpé. Pour ce faire, exécutez la commande suivante :
volatility -f ram_nom_vm_date_heure_copie.raw imageinfo
- Quels sont les profils déterminés ? Lequel choisir pour la suite de l'analyse ?
Maintenant, nous allons lister les processus en cours d'exécution dans le dump de la mémoire. Le plugin pslist de volatility permet de lister les processus en cours d'exécution dans la RAM.
volatility --profile=profil_detecte pslist -f ram_nom_vm_date_heure_copie.raw
- Dans le résultat obtenu, quels sont les processus douteux/malicieux que vous avez détecté ?
Il est possible d'afficher l'arborescence des processus pour connaitre les processus parent/enfant des processus malicieux précédemment détectés.
volatility --profile=profil_detecte pstree -f ram_nom_vm_date_heure_copie.raw
Le résultat de pstree montre les processus avec leurs PID et PPID (PID du parent).
A présent, nous allons utiliser malfind pour trouver les DLL des processus malicieux. Le résultat de malfind effectue un dump du DLL malicieux dans un répertoire de sortie.
volatility --profile=profil_detecte malfind -D chemin_vers_dossier_output/pid-numeroPID -p le_PID_du_process -f ram_nom_vm_date_heure_copie
Réalisez cette action pour chaque processus douteux. Si le processus comporte des DLL douteux, ils sont dumpés dans le répertoire de sortie.
Créer un hash de chaque dossier de sortie de l'analyse malfind.
Maintenant nous allons scannés les dumps des processus douteux s'ils existent en utilisant un antivirus (Windows defender, Malware bytes, bit defender, etc. ou par Virus Total).
6. Que vous reporte l'analyse antivirus?
A présent, nous allons chercher à avoir l'historique des commandes exécutées sur la machine si intrusion il y'a eu lieu. Comme énoncé cmdscan permet d'avoir l'historique des commandes exécutées sur la machine cible.
volatility --profile=profil_detecte cmdscan -f ram_nom_vm_date_heure_copie.raw
7. Que montre le résultat de cmdscan ?
Toujours à partir du dump de la RAM, on peut effectuer une analyse des connexions réseau avec netscan.
volatility --profile=profil_detecte netscan -f ram_nom_vm_date_heure_copie.raw
-
Que nous renseigne le résultat de cette commande ? Par exemple, quel était le numéro de port utilisé, l'adresse IP de la machine de l'attaquant et le nom du processus utilisé ?
-
A ce niveau nous avons assez d'éléments pour arrêter notre analyse forensic et documenter les preuves collectées.
-
Avant de terminer l'analyse, créer un hash du fichier ram_nom_vm_date_heure_copie.raw et comparez-le aux hash du fichier avant le début de l'analyse et de l'original ram_nom_vm_date_heure.raw. Les preuves ont-elles été altérées ? Conclure ?