Exploration standard de l'antémémoire via Volatility

ѠOOT

Exploration standard de l'antémémoire via Volatility

par ѠOOT »

Bonjour,

Existe t'il un moyen de savoir quand et comment a eu lieu l'infection ? C'était la question d'un internaute curieux alors je lui ai répondu en mentionnant le sujet de 2014 sur la préservation des traces par acquisitions logicielles. L'internaute a noté, à juste titre, qu'il y avait une absence d'information sur les exploitations du fichier brute (RAW) obtenu après extraction de la mémoire vive.

Comme je l'ai souligné, les techniques et outils varient suivant les buts recherchés, il est par exemple possible de faire des recherches de bugs, faiblesses, vulnérabilités,.. tout comme il est possible de réaliser des investigations numériques légales,.. et dans le cas de cet internaute, de réaliser une analyse post-mortem d'une machine infectée afin de comprendre chronologiquement ce qui a bien pu se passer.

J'ai présumé que l'internaute était sous Windows ; la méthode décrite est similaire sur Linux.
Commencer par télécharger et installer dans l'ordre le nécessaire : Python + pycrypto + 7-Zip + Volatility

Clique-droit sur "volatility-master.zip", menu contextuel "7-Zip" → "Extract here"

Pour interroger Volatility en ligne de commandes, exécuter l'interpréteur de commandes.

Démarrer → Exécuter "cmd.exe" ( si besoins, "Exécuter en tant qu'Administrateur" )

A l'affichage du prompt, se déplacer dans le répertoire "volatility-master".
Dans l'exemple ci-dessous, on image qu'il est à la racine (C:)

cd c:\volatility-master\

Imaginons un "SRVCOMPTA-20160308-130526.raw" ( NomMachine-Date-Heure.raw ) situé dans C:

Pour vérifier l'état de l'image :
vol.py imageinfo -f "C:\SRVCOMPTA-20160308-130526.raw"

Ensuite s'adapter au contexte, notamment au fuseau horaire de la machine à analyser.
Le GTM ( Greenwich Mean Time ) doit absolument correspondre sinon tout est faussé.
Si vous ne les connaissez pas par cœur ( Démarrer → Exécuter "timedate.cpl" )
Imaginons que SRVCOMPTA est en France, il faudra donc utiliser GTM+01:00
nb: le --tz=+1 apparait partout même s'il n'est pas toujours nécessaire

Pour afficher l'arbre des processus
vol.py pstree --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Pour afficher la liste des ruches
vol.py hivelist -f "C:\SRVCOMPTA-20160308-130526.raw"

Virtual Physical Name
---------- ---------- ----
0xe1589b50 0x034b2b60 \Device\HarddiskVolume1\WINDOWS\system32\config\software
0xe1582738 0x03455748 \Device\HarddiskVolume1\WINDOWS\system32\config\default
0xe154c508 0x02b20518 \Device\HarddiskVolume1\WINDOWS\system32\config\SECURITY
0xe154bb50 0x02ab5b60 \Device\HarddiskVolume1\WINDOWS\system32\config\SAM
0xe11181e0 0x017a61f0 \Device\HarddiskVolume1\WINDOWS\system32\config\system


Avec l'argument -o je spécifie la ruche en indiquant l'offset "Virtual"
Exemple, pour afficher l'état des éléments du Security Center de Microsoft depuis la ruche SOFTWARE:
vol.py printkey -o 0xe1589b50 -K "Microsoft\Security Center" --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Pour extraire toutes les ruches en tant que fichiers
mkdir ruches & vol.py dumpregistry --dump-dir ruches --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Pour extraire tous les processus en tant que fichiers ( attention si codes malveillants )
mkdir process & vol.py procdump --tz=+1 -f c:\SRVCOMPTA-20160307-210526.raw --dump-dir process

Pour ce qui est de l'état des connexions actives (réseaux)
vol.py sockets --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"
vol.py sockscan --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"


Avec la MFT j'utilise la sortie HTML pour avoir sous la main un moteur de recherche intégré
vol.py mftparser --output=html --output-file=mft.html --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Image

Pour afficher les historiques d'Internet Explorer ( URLs )
vol.py iehistory --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Pour lister par exemple les processus par date d'exécution:
vol.py timeliner --type=Process --output=html --output-file=process.html --tz=+1 -f "C:\SRVCOMPTA-20160308-130526.raw"

Pour lister l'historique complet des activités ( [!] traitements longs... patienter )
vol.py timeliner --tz=+1 --output=html --output-file=histo.html -f "C:\SRVCOMPTA-20160308-130526.raw"

Il est aussi interessant d'utiliser certains modules, notamment yarascan. Je l'utilise souvent car yara permet de charger et d'écrire rapidement ses propres règles ( basés sur des artéfacts, patterns, signatures, IOC,... ) ; bref, en réponse sur incident c'est un must. Voilà! C'est une courte introduction mais ça vous permettra de vous débrouiller un minimum pour pas cher. Ce ne sont pas les ouvrages spécialisés de qualité qui manquent donc si ça vous intéresse, il faudra penser à vous affranchir de quelques piécettes :]~

Revenir à « Tech, Tips & Tricks »