Volatility - CheatSheet

Reading time: 22 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

​

Si vous avez besoin d'un outil qui automatise l'analyse de la mémoire avec différents niveaux de scan et exécute plusieurs plugins Volatility3 en parallÚle, vous pouvez utiliser autoVolatility3:: https://github.com/H3xKatana/autoVolatility3/

bash
# Full scan (runs all plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s full

# Minimal scan (runs a limited set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s minimal

# Normal scan (runs a balanced set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s normal

Si vous voulez quelque chose de rapide et fou qui lancera plusieurs plugins Volatility en parallĂšle, vous pouvez utiliser : https://github.com/carlospolop/autoVolatility

bash
python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)

Installation

volatility3

bash
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h

volatility2

Download the executable from https://www.volatilityfoundation.org/26

Commandes Volatility

Accédez à la documentation officielle dans Volatility command reference

Une note sur les plugins “list” vs. “scan”

Volatility a deux approches principales pour les plugins, qui se reflĂštent parfois dans leurs noms. Les plugins “list” essaieront de naviguer Ă  travers les structures du noyau Windows pour rĂ©cupĂ©rer des informations comme les processus (localiser et parcourir la liste chaĂźnĂ©e des structures _EPROCESS en mĂ©moire), les handles du systĂšme d'exploitation (localiser et lister la table des handles, dĂ©sĂ©rfĂ©rencer les pointeurs trouvĂ©s, etc.). Ils se comportent plus ou moins comme l'API Windows le ferait si on lui demandait, par exemple, de lister les processus.

Cela rend les plugins “list” assez rapides, mais tout aussi vulnĂ©rables que l'API Windows Ă  la manipulation par des malwares. Par exemple, si un malware utilise DKOM pour dissocier un processus de la liste chaĂźnĂ©e _EPROCESS, il n'apparaĂźtra pas dans le Gestionnaire des tĂąches et ne sera pas non plus dans le pslist.

Les plugins “scan”, en revanche, adopteront une approche similaire Ă  celle du carving de la mĂ©moire pour des Ă©lĂ©ments qui pourraient avoir du sens lorsqu'ils sont dĂ©sĂ©rfĂ©rencĂ©s en tant que structures spĂ©cifiques. psscan, par exemple, lira la mĂ©moire et essaiera de crĂ©er des objets _EPROCESS Ă  partir de celle-ci (il utilise le scanning par pool-tag, qui recherche des chaĂźnes de 4 octets indiquant la prĂ©sence d'une structure d'intĂ©rĂȘt). L'avantage est qu'il peut dĂ©terrer des processus qui ont quittĂ©, et mĂȘme si un malware altĂšre la liste chaĂźnĂ©e _EPROCESS, le plugin trouvera toujours la structure traĂźnant en mĂ©moire (puisqu'elle doit encore exister pour que le processus fonctionne). Le inconvĂ©nient est que les plugins “scan” sont un peu plus lents que les plugins “list”, et peuvent parfois donner des faux positifs (un processus qui a quittĂ© il y a trop longtemps et dont des parties de la structure ont Ă©tĂ© Ă©crasĂ©es par d'autres opĂ©rations).

De : http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/

Profils OS

Volatility3

Comme expliqué dans le readme, vous devez mettre la table des symboles du systÚme d'exploitation que vous souhaitez prendre en charge dans volatility3/volatility/symbols.
Des packs de tables de symboles pour les différents systÚmes d'exploitation sont disponibles en téléchargement à :

Volatility2

Profil Externe

Vous pouvez obtenir la liste des profils pris en charge en faisant :

bash
./volatility_2.6_lin64_standalone --info | grep "Profile"

Si vous souhaitez utiliser un nouveau profil que vous avez téléchargé (par exemple un profil linux), vous devez créer quelque part la structure de dossiers suivante : plugins/overlays/linux et y mettre le fichier zip contenant le profil. Ensuite, obtenez le numéro des profils en utilisant :

bash
./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
Volatility Foundation Volatility Framework 2.6


Profiles
--------
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
VistaSP0x64                                   - A Profile for Windows Vista SP0 x64
VistaSP0x86                                   - A Profile for Windows Vista SP0 x86

Vous pouvez télécharger les profils Linux et Mac depuis https://github.com/volatilityfoundation/profiles

Dans le morceau précédent, vous pouvez voir que le profil s'appelle LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, et vous pouvez l'utiliser pour exécuter quelque chose comme :

bash
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan

DĂ©couvrir le profil

volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp

Différences entre imageinfo et kdbgscan

À partir d'ici : Contrairement Ă  imageinfo qui fournit simplement des suggestions de profil, kdbgscan est conçu pour identifier positivement le bon profil et la bonne adresse KDBG (s'il y en a plusieurs). Ce plugin recherche les signatures KDBGHeader liĂ©es aux profils Volatility et applique des vĂ©rifications de validitĂ© pour rĂ©duire les faux positifs. La verbositĂ© de la sortie et le nombre de vĂ©rifications de validitĂ© qui peuvent ĂȘtre effectuĂ©es dĂ©pendent de la capacitĂ© de Volatility Ă  trouver un DTB, donc si vous connaissez dĂ©jĂ  le bon profil (ou si vous avez une suggestion de profil d'imageinfo), assurez-vous de l'utiliser.

Prenez toujours en compte le nombre de processus que kdbgscan a trouvés. Parfois, imageinfo et kdbgscan peuvent trouver plus d'un profil approprié, mais seul le valide aura des processus associés (C'est parce que pour extraire des processus, la bonne adresse KDBG est nécessaire).

bash
# GOOD
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
bash
# BAD
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)

KDBG

Le bloc de débogage du noyau, appelé KDBG par Volatility, est crucial pour les tùches d'analyse judiciaire effectuées par Volatility et divers débogueurs. Identifié comme KdDebuggerDataBlock et de type _KDDEBUGGER_DATA64, il contient des références essentielles comme PsActiveProcessHead. Cette référence spécifique pointe vers le début de la liste des processus, permettant l'énumération de tous les processus, ce qui est fondamental pour une analyse approfondie de la mémoire.

Informations sur le systĂšme d'exploitation

bash
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
./vol.py -f file.dmp windows.info.Info

Le plugin banners.Banners peut ĂȘtre utilisĂ© dans vol3 pour essayer de trouver des banniĂšres linux dans le dump.

Hashes/Mots de passe

Extraire les hashes SAM, les identifiants mis en cache du domaine et les secrets lsa.

bash
./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets

Vidage de mémoire

Le vidage de mémoire d'un processus va extraire tout l'état actuel du processus. Le module procdump va seulement extraire le code.

volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/

Processus

Lister les processus

Essayez de trouver des processus suspects (par nom) ou des processus enfants inattendus (par exemple un cmd.exe comme enfant de iexplorer.exe).
Il pourrait ĂȘtre intĂ©ressant de comparer le rĂ©sultat de pslist avec celui de psscan pour identifier les processus cachĂ©s.

bash
python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)

Dump proc

bash
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory

Ligne de commande

Quelque chose de suspect a été exécuté ?

bash
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments

Les commandes exĂ©cutĂ©es dans cmd.exe sont gĂ©rĂ©es par conhost.exe (ou csrss.exe sur les systĂšmes antĂ©rieurs Ă  Windows 7). Cela signifie que si cmd.exe est terminĂ© par un attaquant avant qu'un dump mĂ©moire ne soit obtenu, il est toujours possible de rĂ©cupĂ©rer l'historique des commandes de la session Ă  partir de la mĂ©moire de conhost.exe. Pour ce faire, si une activitĂ© inhabituelle est dĂ©tectĂ©e dans les modules de la console, la mĂ©moire du processus associĂ© conhost.exe doit ĂȘtre dumpĂ©e. Ensuite, en recherchant des strings dans ce dump, les lignes de commande utilisĂ©es dans la session peuvent potentiellement ĂȘtre extraites.

Environnement

Obtenez les variables d'environnement de chaque processus en cours d'exécution. Il pourrait y avoir des valeurs intéressantes.

bash
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables

PrivilĂšges de jeton

VĂ©rifiez les jetons de privilĂšges dans des services inattendus.
Il pourrait ĂȘtre intĂ©ressant de lister les processus utilisant un jeton privilĂ©giĂ©.

bash
#Get enabled privileges of some processes
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
#Get all processes with interesting privileges
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"

SIDs

Vérifiez chaque SSID possédé par un processus.
Il pourrait ĂȘtre intĂ©ressant de lister les processus utilisant un SID de privilĂšges (et les processus utilisant un SID de service).

bash
./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

Handles

Utile de savoir à quels autres fichiers, clés, threads, processus... un processus a un handle (a ouvert)

bash
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]

DLLs

bash
./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process

ChaĂźnes par processus

Volatility nous permet de vérifier à quel processus une chaßne appartient.

bash
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt

Il permet également de rechercher des chaßnes à l'intérieur d'un processus en utilisant le module yarascan :

bash
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"

UserAssist

Windows suit un suivi des programmes que vous exécutez grùce à une fonctionnalité dans le registre appelée UserAssist keys. Ces clés enregistrent combien de fois chaque programme est exécuté et quand il a été exécuté pour la derniÚre fois.

bash
./vol.py -f file.dmp windows.registry.userassist.UserAssist

​

Services

bash
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

RĂ©seau

bash
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2

Ruche de registre

Imprimer les ruches disponibles

bash
./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys

Obtenir une valeur

bash
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"

Dump

bash
#Dump a hive
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
#Dump all hives
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp

SystĂšme de fichiers

Monter

bash
#See vol2

Analyse/vidage

bash
./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command

Table de fichiers maĂźtre

bash
# I couldn't find any plugin to extract this information in volatility3

Le systĂšme de fichiers NTFS utilise un composant critique connu sous le nom de table de fichiers maĂźtre (MFT). Cette table comprend au moins une entrĂ©e pour chaque fichier sur un volume, couvrant Ă©galement la MFT elle-mĂȘme. Des dĂ©tails vitaux sur chaque fichier, tels que taille, horodatages, autorisations et donnĂ©es rĂ©elles, sont encapsulĂ©s dans les entrĂ©es de la MFT ou dans des zones externes Ă  la MFT mais rĂ©fĂ©rencĂ©es par ces entrĂ©es. Plus de dĂ©tails peuvent ĂȘtre trouvĂ©s dans la documentation officielle.

Clés/Certificats SSL

bash
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates

Malware

bash
./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
#Malfind will search for suspicious structures related to malware
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses

./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks

{{#endtab}}

{{#tab name="vol2"}}

bash
volatility --profile=Win7SP1x86_23418 -f file.dmp malfind [-D /tmp] #Find hidden and injected code [dump each suspicious section]
volatility --profile=Win7SP1x86_23418 -f file.dmp apihooks #Detect API hooks in process and kernel memory
volatility --profile=Win7SP1x86_23418 -f file.dmp driverirp #Driver IRP hook detection
volatility --profile=Win7SP1x86_23418 -f file.dmp ssdt #Check system call address from unexpected addresses

volatility --profile=SomeLinux -f file.dmp linux_check_afinfo
volatility --profile=SomeLinux -f file.dmp linux_check_creds
volatility --profile=SomeLinux -f file.dmp linux_check_fop
volatility --profile=SomeLinux -f file.dmp linux_check_idt
volatility --profile=SomeLinux -f file.dmp linux_check_syscall
volatility --profile=SomeLinux -f file.dmp linux_check_modules
volatility --profile=SomeLinux -f file.dmp linux_check_tty
volatility --profile=SomeLinux -f file.dmp linux_keyboard_notifiers #Keyloggers

{{#endtab}} {{#endtabs}}

Analyse avec yara

Utilisez ce script pour télécharger et fusionner toutes les rÚgles de malware yara depuis github : https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Créez le répertoire rules et exécutez-le. Cela créera un fichier appelé malware_rules.yar qui contient toutes les rÚgles yara pour les malwares.

bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
#Only Windows
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
#All
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar

MISC

Plugins externes

Si vous souhaitez utiliser des plugins externes, assurez-vous que les dossiers liés aux plugins sont le premier paramÚtre utilisé.

bash
./vol.py --plugin-dirs "/tmp/plugins/" [...]

Autoruns

Téléchargez-le depuis https://github.com/tomchop/volatility-autoruns

volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns

Mutexes

./vol.py -f file.dmp windows.mutantscan.MutantScan

Liens symboliques

bash
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

Il est possible de lire l'historique bash depuis la mémoire. Vous pourriez également extraire le fichier .bash_history, mais il a été désactivé, vous serez heureux de pouvoir utiliser ce module de volatilité.

./vol.py -f file.dmp linux.bash.Bash

Chronologie

bash
./vol.py -f file.dmp timeLiner.TimeLiner

Pilotes

./vol.py -f file.dmp windows.driverscan.DriverScan

Obtenir le presse-papiers

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp

Obtenir l'historique d'IE

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp

Obtenir le texte de Notepad

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp

Capture d'Ă©cran

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp

Master Boot Record (MBR)

bash
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp

Le Master Boot Record (MBR) joue un rÎle crucial dans la gestion des partitions logiques d'un support de stockage, qui sont structurées avec différents systÚmes de fichiers. Il contient non seulement des informations sur la disposition des partitions, mais également du code exécutable agissant comme un chargeur de démarrage. Ce chargeur de démarrage initie soit directement le processus de chargement de deuxiÚme étape du systÚme d'exploitation (voir chargeur de démarrage de deuxiÚme étape), soit fonctionne en harmonie avec le volume boot record (VBR) de chaque partition. Pour des connaissances approfondies, consultez la page Wikipedia du MBR.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks