Garden of KnowledgeApplied Sciences › Computer Science › Software › Security › Defensive › SOC Analysis › DFIR
February 15, 2025

Volatility 3 — Analyse de Mémoire

Volatility 3 est le framework open source de référence pour l’analyse de dumps mémoire (RAM). Il permet d’extraire des artefacts du système tels que les processus, connexions réseau, registre, fichiers et de détecter des injections malveillantes.

Installation et prérequis§

# Installation
git clone https://github.com/volatilityfoundation/volatility3
cd volatility3
pip3 install -r requirements.txt

# Vérifier l'installation
python3 vol.py -h

# Alias utile
alias vol="python3 /opt/volatility3/vol.py"

Contrairement à Volatility 2, Volatility 3 ne nécessite pas de profil OS. Il détecte automatiquement le système d’exploitation depuis le dump.

Syntaxe générale§

python3 vol.py -f <dump.mem> <plugin>
python3 vol.py -f <dump.mem> <plugin> [options]

Plugins Windows§

Informations système§

# Infos OS (version, build, machine)
vol -f dump.mem windows.info

# Exemple de sortie :
# Variable    Value
# Kernel Base 0xf8047e600000
# DTB         0x1ad000
# Symbols     file:///volatility3/symbols/windows/ntkrnlmp.pdb/...
# Is64Bit     True
# IsPAE       False
# primary     0 WindowsIntel32e
# memory_layer 1 FileLayer
# KdVersionBlock 0xf8047f015490
# Major/Minor 15.19041
# MachineType 34404
# ...

Processus§

# Liste des processus (depuis la doubly-linked list EPROCESS)
vol -f dump.mem windows.pslist

# Scan de processus (inclut les processus cachés par rootkits)
vol -f dump.mem windows.psscan

# Arborescence parent/enfant
vol -f dump.mem windows.pstree

# Ligne de commande de chaque processus
vol -f dump.mem windows.cmdline

# Arguments de processus spécifique
vol -f dump.mem windows.cmdline --pid 1234

# Variables d'environnement
vol -f dump.mem windows.envars --pid 1234

# Handles ouverts par un processus (fichiers, clés registre, etc.)
vol -f dump.mem windows.handles --pid 1234

# Modules chargés dans un processus
vol -f dump.mem windows.dlllist
vol -f dump.mem windows.dlllist --pid 1234

Comparaison pslist / psscan / pstree :

PluginSourceAvantageCas d’usage
pslistDoubly-linked list EPROCESSRapide, exhaustif pour processus normauxVue d’ensemble
psscanScan de structures _EPROCESSDétecte les processus délinkés (rootkits DKOM)Détection rootkits
pstreepslist + relations parent/enfantVisualisation hiérarchieLateral movement, injections

Anomalies à rechercher :

Réseau§

# Connexions TCP actives (similaire à netstat)
vol -f dump.mem windows.netstat

# Scan des structures réseau (inclut connexions fermées)
vol -f dump.mem windows.netscan

# Filtrer par protocole ou état
vol -f dump.mem windows.netscan | grep ESTABLISHED
vol -f dump.mem windows.netscan | grep -v "0.0.0.0"

IOCs réseau à analyser :

DLLs et modules§

# Lister les DLLs chargées dans tous les processus
vol -f dump.mem windows.dlllist

# DLLs pour un processus spécifique
vol -f dump.mem windows.dlllist --pid 1234

# Modules kernel
vol -f dump.mem windows.modules

# Scan de modules kernel (inclut modules cachés)
vol -f dump.mem windows.driverscan

# Vérifier l'intégrité des DLLs (comparaison avec fichiers sur disque)
vol -f dump.mem windows.dlllist | grep -v "C:\Windows"

Registre§

# Lister les hives chargées
vol -f dump.mem windows.registry.hivelist

# Lire une clé
vol -f dump.mem windows.registry.printkey --key "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

# Chercher une valeur spécifique
vol -f dump.mem windows.registry.printkey \
    --key "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" \
    --recurse

# Hive complète d'un utilisateur (NTUSER.DAT)
vol -f dump.mem windows.registry.hivelist | grep NTUSER

Extraction de fichiers§

# Scanner les fichiers en mémoire
vol -f dump.mem windows.filescan

# Filtrer par extension
vol -f dump.mem windows.filescan | grep -i ".exe\|.dll\|.ps1"

# Extraire un fichier (par adresse virtuelle depuis filescan)
vol -f dump.mem windows.dumpfiles --virtaddr 0xe48f2be2a020

# Extraire tous les fichiers d'un processus
vol -f dump.mem windows.dumpfiles --pid 1234

# Extraire l'exécutable d'un processus
vol -f dump.mem windows.procdump --pid 1234

Détection d’injection (malfind)§

malfind est le plugin principal pour détecter du code injecté. Il recherche les régions mémoire avec permissions exécutables (RWX ou RX) sans fichier sur disque associé.

# Détecter les injections
vol -f dump.mem windows.malfind

# Filtrer par PID
vol -f dump.mem windows.malfind --pid 1234

# Exemple de sortie malfind :
# PID    Process   Start            End              Tag   Protection
# 1234   explorer  0x00400000       0x00500000       VadS  PAGE_EXECUTE_READWRITE
# Disassembly:
# 0x00400000  4d 5a 90 00 03 00 00 00   MZ......  ← MZ header = PE injecté !

Interpréter malfind :

Secrets et credentials§

# Extraire les hashes NTLM (SAM)
vol -f dump.mem windows.hashdump

# Extraire les hashes depuis le domaine (NTDS)
vol -f dump.mem windows.hashdump --sam <sam_offset> --sys <system_offset>

# LSA secrets
vol -f dump.mem windows.lsadump

# Chercher des strings de mots de passe en mémoire
vol -f dump.mem windows.strings | grep -i "password\|passwd\|credentials"

# Ou extraire les strings directement
strings -el dump.mem | grep -i "http\|ftp\|password\|token" | head -100

Rootkits et évasion§

# SSDT hooks (System Service Descriptor Table)
vol -f dump.mem windows.ssdt

# Callbacks kernel (notification routines)
vol -f dump.mem windows.callbacks

# Vérifier IDT (Interrupt Descriptor Table)
vol -f dump.mem windows.idt

# Comparer modules pslist vs psscan (processus cachés !)
vol -f dump.mem windows.pslist > pslist.txt
vol -f dump.mem windows.psscan > psscan.txt
diff pslist.txt psscan.txt
# Les PIDs dans psscan mais pas pslist = processus cachés par rootkit

YARA scanning§

# Scanner avec règle YARA
vol -f dump.mem windows.yarascan.YaraScan --yara-file malware.yar

# Avec règle inline
vol -f dump.mem windows.yarascan.YaraScan \
    --yara-rules 'rule test { strings: $s = "malware" condition: $s }'

# Dans un processus spécifique
vol -f dump.mem windows.yarascan.YaraScan \
    --yara-file malware.yar --pid 1234

Plugins Linux§

# Infos Linux
vol -f dump.mem linux.bash

# Processus Linux
vol -f dump.mem linux.pslist
vol -f dump.mem linux.pstree

# Connexions réseau
vol -f dump.mem linux.netstat

# Modules kernel chargés
vol -f dump.mem linux.lsmod

# Fichiers ouverts
vol -f dump.mem linux.lsof

# Malfind Linux
vol -f dump.mem linux.malfind

# Check rootkit (comparer les syscall table entries)
vol -f dump.mem linux.check_syscall

Workflow d’investigation complet§

Étape 1 : Orientation§

# Identifier l'OS
vol -f dump.mem windows.info

# Vue d'ensemble des processus
vol -f dump.mem windows.pstree > pstree.txt
cat pstree.txt

Étape 2 : Processus suspects§

# Identifier les anomalies
vol -f dump.mem windows.psscan > psscan.txt
vol -f dump.mem windows.pslist > pslist.txt

# Processus avec connexions réseau
vol -f dump.mem windows.netscan | grep ESTABLISHED

# Lignes de commande complètes
vol -f dump.mem windows.cmdline

Étape 3 : Injection et code malveillant§

# Rechercher les injections
vol -f dump.mem windows.malfind

# Pour chaque PID suspect, extraire l'image
vol -f dump.mem windows.procdump --pid $SUSPICIOUS_PID

# Analyser les DLLs hors \Windows\
vol -f dump.mem windows.dlllist --pid $SUSPICIOUS_PID | grep -v "C:\\Windows"

Étape 4 : Réseau et C2§

# Connexions actives
vol -f dump.mem windows.netstat

# Toutes les connexions (inclus fermées)
vol -f dump.mem windows.netscan | tee netconn.txt
grep ESTABLISHED netconn.txt
grep -v "0.0.0.0" netconn.txt

Étape 5 : Persistence§

# Run Keys
vol -f dump.mem windows.registry.printkey \
    --key "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

# Services
vol -f dump.mem windows.svcscan

# Tâches planifiées (via filescan)
vol -f dump.mem windows.filescan | grep -i "\\tasks\\"

Étape 6 : Extraction et analyse§

# Extraire les exécutables suspects
vol -f dump.mem windows.procdump --pid $PID

# Analyser avec YARA
yara malware_rules.yar pid.$PID.*.exe

# Hash pour VirusTotal
sha256sum pid.*.exe

Référence rapide des plugins§

PluginDescription
windows.infoInformations OS
windows.pslistListe processus
windows.psscanScan processus (rootkits)
windows.pstreeArborescence processus
windows.cmdlineLignes de commande
windows.dlllistDLLs par processus
windows.netscanConnexions réseau (inclus fermées)
windows.netstatConnexions actives
windows.filescanFichiers en mémoire
windows.dumpfilesExtraire fichiers
windows.procdumpExtraire exécutable
windows.malfindDétecter injections
windows.hashdumpExtraire hashes NTLM
windows.lsadumpLSA secrets
windows.ssdtSSDT hooks
windows.modulesModules kernel
windows.driverscanScan drivers
windows.registry.hivelistHives registre
windows.registry.printkeyLire clé registre
windows.svcscanServices Windows
windows.yarascan.YaraScanScanner avec YARA
windows.callbacksKernel callbacks
windows.handlesHandles ouverts
windows.envarsVariables d’environnement
windows.memmapMapping mémoire processus
—The Gardener