# Volatility - CheatSheet {{#include ../../../banners/hacktricks-training.md}} ​ 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/](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](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 {{#tabs}} {{#tab name="Method1"}} ``` Download the executable from https://www.volatilityfoundation.org/26 ``` {{#endtab}} {{#tab name="Méthode 2"}} ```bash git clone https://github.com/volatilityfoundation/volatility.git cd volatility python setup.py install ``` {{#endtab}} {{#endtabs}} ## Commandes Volatility Accédez à la documentation officielle dans [Volatility command reference](https://github.com/volatilityfoundation/volatility/wiki/Command-Reference#kdbgscan) ### 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/](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** à : - [https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip) - [https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip) - [https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip) ### 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](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**](https://www.andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/) : 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](../../../windows-hardening/stealing-credentials/credentials-protections.md#cached-credentials) et [les secrets lsa](../../../windows-hardening/authentication-credentials-uac-and-efs/index.html#lsa-secrets). {{#tabs}} {{#tab name="vol3"}} ```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 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 hashdump -f file.dmp #Grab common windows hashes (SAM+SYSTEM) volatility --profile=Win7SP1x86_23418 cachedump -f file.dmp #Grab domain cache hashes inside the registry volatility --profile=Win7SP1x86_23418 lsadump -f file.dmp #Grab lsa secrets ``` {{#endtab}} {{#endtabs}} ## 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. {{#tabs}} {{#tab name="vol3"}} ```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) ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=PROFILE pstree -f file.dmp # Get process tree (not hidden) volatility --profile=PROFILE pslist -f file.dmp # Get process list (EPROCESS) volatility --profile=PROFILE psscan -f file.dmp # Get hidden process list(malware) volatility --profile=PROFILE psxview -f file.dmp # Get hidden process list ``` {{#endtab}} {{#endtabs}} ### Dump proc {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid #Dump the .exe and dlls of the process in the current directory ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 procdump --pid=3152 -n --dump-dir=. -f file.dmp ``` {{#endtab}} {{#endtabs}} ### Ligne de commande Quelque chose de suspect a été exécuté ? {{#tabs}} {{#tab name="vol3"}} ```bash python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=PROFILE cmdline -f file.dmp #Display process command-line arguments volatility --profile=PROFILE consoles -f file.dmp #command history by scanning for _CONSOLE_INFORMATION ``` {{#endtab}} {{#endtabs}} 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. {{#tabs}} {{#tab name="vol3"}} ```bash python3 vol.py -f file.dmp windows.envars.Envars [--pid ] #Display process environment variables ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=PROFILE envars -f file.dmp [--pid ] #Display process environment variables volatility --profile=PROFILE -f file.dmp linux_psenv [-p ] #Get env of process. runlevel var means the runlevel where the proc is initated ``` {{#endtab}} {{#endtabs}} ### 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é. {{#tabs}} {{#tab name="vol3"}} ```bash #Get enabled privileges of some processes python3 vol.py -f file.dmp windows.privileges.Privs [--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" ``` {{#endtab}} {{#tab name="vol2"}} ```bash #Get enabled privileges of some processes volatility --profile=Win7SP1x86_23418 privs --pid=3152 -f file.dmp | grep Enabled #Get all processes with interesting privileges volatility --profile=Win7SP1x86_23418 privs -f file.dmp | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege" ``` {{#endtab}} {{#endtabs}} ### 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). {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.getsids.GetSIDs [--pid ] #Get SIDs of processes ./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 getsids -f file.dmp #Get the SID owned by each process volatility --profile=Win7SP1x86_23418 getservicesids -f file.dmp #Get the SID of each service ``` {{#endtab}} {{#endtabs}} ### Handles Utile de savoir à quels autres fichiers, clés, threads, processus... un **processus a un handle** (a ouvert) {{#tabs}} {{#tab name="vol3"}} ```bash vol.py -f file.dmp windows.handles.Handles [--pid ] ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 -f file.dmp handles [--pid=] ``` {{#endtab}} {{#endtabs}} ### DLLs {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.dlllist.DllList [--pid ] #List dlls used by each ./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid #Dump the .exe and dlls of the process in the current directory process ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 dlllist --pid=3152 -f file.dmp #Get dlls of a proc volatility --profile=Win7SP1x86_23418 dlldump --pid=3152 --dump-dir=. -f file.dmp #Dump dlls of a proc ``` {{#endtab}} {{#endtabs}} ### Chaînes par processus Volatility nous permet de vérifier à quel processus une chaîne appartient. {{#tabs}} {{#tab name="vol3"}} ```bash strings file.dmp > /tmp/strings.txt ./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt ``` {{#endtab}} {{#tab name="vol2"}} ```bash strings file.dmp > /tmp/strings.txt volatility -f /tmp/file.dmp windows.strings.Strings --string-file /tmp/strings.txt volatility -f /tmp/file.dmp --profile=Win81U1x64 memdump -p 3532 --dump-dir . strings 3532.dmp > strings_file ``` {{#endtab}} {{#endtabs}} Il permet également de rechercher des chaînes à l'intérieur d'un processus en utilisant le module yarascan : {{#tabs}} {{#tab name="vol3"}} ```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://" ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 yarascan -Y "https://" -p 3692,3840,3976,3312,3084,2784 ``` {{#endtab}} {{#endtabs}} ### 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. {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.registry.userassist.UserAssist ``` {{#endtab}} {{#tab name="vol2"}} ``` volatility --profile=Win7SP1x86_23418 -f file.dmp userassist ``` {{#endtab}} {{#endtabs}} ​ ## Services {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.svcscan.SvcScan #List services ./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services ``` {{#endtab}} {{#tab name="vol2"}} ```bash #Get services and binary path volatility --profile=Win7SP1x86_23418 svcscan -f file.dmp #Get name of the services and SID (slow) volatility --profile=Win7SP1x86_23418 getservicesids -f file.dmp ``` {{#endtab}} {{#endtabs}} ## Réseau {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.netscan.NetScan #For network info of linux use volatility2 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 netscan -f file.dmp volatility --profile=Win7SP1x86_23418 connections -f file.dmp#XP and 2003 only volatility --profile=Win7SP1x86_23418 connscan -f file.dmp#TCP connections volatility --profile=Win7SP1x86_23418 sockscan -f file.dmp#Open sockets volatility --profile=Win7SP1x86_23418 sockets -f file.dmp#Scanner for tcp socket objects volatility --profile=SomeLinux -f file.dmp linux_ifconfig volatility --profile=SomeLinux -f file.dmp linux_netstat volatility --profile=SomeLinux -f file.dmp linux_netfilter volatility --profile=SomeLinux -f file.dmp linux_arp #ARP table volatility --profile=SomeLinux -f file.dmp linux_list_raw #Processes using promiscuous raw sockets (comm between processes) volatility --profile=SomeLinux -f file.dmp linux_route_cache ``` {{#endtab}} {{#endtabs}} ## Ruche de registre ### Imprimer les ruches disponibles {{#tabs}} {{#tab name="vol3"}} ```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 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 -f file.dmp hivelist #List roots volatility --profile=Win7SP1x86_23418 -f file.dmp printkey #List roots and get initial subkeys ``` {{#endtab}} {{#endtabs}} ### Obtenir une valeur {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion" ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 printkey -K "Software\Microsoft\Windows NT\CurrentVersion" -f file.dmp # Get Run binaries registry value volatility -f file.dmp --profile=Win7SP1x86 printkey -o 0x9670e9d0 -K 'Software\Microsoft\Windows\CurrentVersion\Run' ``` {{#endtab}} {{#endtabs}} ### 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 {{#tabs}} {{#tab name="vol3"}} ```bash #See vol2 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=SomeLinux -f file.dmp linux_mount volatility --profile=SomeLinux -f file.dmp linux_recover_filesystem #Dump the entire filesystem (if possible) ``` {{#endtab}} {{#endtabs}} ### Analyse/vidage {{#tabs}} {{#tab name="vol3"}} ```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 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 filescan -f file.dmp #Scan for files inside the dump volatility --profile=Win7SP1x86_23418 dumpfiles -n --dump-dir=/tmp -f file.dmp #Dump all files volatility --profile=Win7SP1x86_23418 dumpfiles -n --dump-dir=/tmp -Q 0x000000007dcaa620 -f file.dmp volatility --profile=SomeLinux -f file.dmp linux_enumerate_files volatility --profile=SomeLinux -f file.dmp linux_find_file -F /path/to/file volatility --profile=SomeLinux -f file.dmp linux_find_file -i 0xINODENUMBER -O /path/to/dump/file ``` {{#endtab}} {{#endtabs}} ### Table de fichiers maître {{#tabs}} {{#tab name="vol3"}} ```bash # I couldn't find any plugin to extract this information in volatility3 ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 mftparser -f file.dmp ``` {{#endtab}} {{#endtabs}} 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](https://docs.microsoft.com/en-us/windows/win32/fileio/master-file-table). ### Clés/Certificats SSL {{#tabs}} {{#tab name="vol3"}} ```bash #vol3 allows to search for certificates inside the registry ./vol.py -f file.dmp windows.registry.certificates.Certificates ``` {{#endtab}} {{#tab name="vol2"}} ```bash #vol2 allos you to search and dump certificates from memory #Interesting options for this modules are: --pid, --name, --ssl volatility --profile=Win7SP1x86_23418 dumpcerts --dump-dir=. -f file.dmp ``` {{#endtab}} {{#endtabs}} ## 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](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. {{#tabs}} {{#tab name="vol3"}} ```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 ``` {{#endtab}} {{#tab name="vol2"}} ```bash wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py mkdir rules python malware_yara_rules.py volatility --profile=Win7SP1x86_23418 yarascan -y malware_rules.yar -f ch2.dmp | grep "Rule:" | grep -v "Str_Win32" | sort | uniq ``` {{#endtab}} {{#endtabs}} ## 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é. {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py --plugin-dirs "/tmp/plugins/" [...] ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatilitye --plugins="/tmp/plugins/" [...] ``` {{#endtab}} {{#endtabs}} #### Autoruns Téléchargez-le depuis [https://github.com/tomchop/volatility-autoruns](https://github.com/tomchop/volatility-autoruns) ``` volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns ``` ### Mutexes {{#tabs}} {{#tab name="vol3"}} ``` ./vol.py -f file.dmp windows.mutantscan.MutantScan ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 mutantscan -f file.dmp volatility --profile=Win7SP1x86_23418 -f file.dmp handles -p -t mutant ``` {{#endtab}} {{#endtabs}} ### Liens symboliques {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.symlinkscan.SymlinkScan ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 -f file.dmp symlinkscan ``` {{#endtab}} {{#endtabs}} ### 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é. {{#tabs}} {{#tab name="vol3"}} ``` ./vol.py -f file.dmp linux.bash.Bash ``` {{#endtab}} {{#tab name="vol2"}} ``` volatility --profile=Win7SP1x86_23418 -f file.dmp linux_bash ``` {{#endtab}} {{#endtabs}} ### Chronologie {{#tabs}} {{#tab name="vol3"}} ```bash ./vol.py -f file.dmp timeLiner.TimeLiner ``` {{#endtab}} {{#tab name="vol2"}} ``` volatility --profile=Win7SP1x86_23418 -f timeliner ``` {{#endtab}} {{#endtabs}} ### Pilotes {{#tabs}} {{#tab name="vol3"}} ``` ./vol.py -f file.dmp windows.driverscan.DriverScan ``` {{#endtab}} {{#tab name="vol2"}} ```bash volatility --profile=Win7SP1x86_23418 -f file.dmp driverscan ``` {{#endtab}} {{#endtabs}} ### 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](https://en.wikipedia.org/wiki/File_system). 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](https://en.wikipedia.org/wiki/Second-stage_boot_loader)), soit fonctionne en harmonie avec le [volume boot record](https://en.wikipedia.org/wiki/Volume_boot_record) (VBR) de chaque partition. Pour des connaissances approfondies, consultez la [page Wikipedia du MBR](https://en.wikipedia.org/wiki/Master_boot_record). ## Références - [https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/](https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/) - [https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html](https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html) - [https://or10nlabs.tech/cgi-sys/suspendedpage.cgi](https://or10nlabs.tech/cgi-sys/suspendedpage.cgi) - [https://www.aldeid.com/wiki/Windows-userassist-keys](https://www.aldeid.com/wiki/Windows-userassist-keys) ​\* [https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table](https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table) - [https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa](https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa) {{#include ../../../banners/hacktricks-training.md}}