Nous venons de voir comment fonctionne la mémoire sous Windows et comment utiliser le framework Volatility pour l'analyse de base. Dans ce chapitre, nous verrons un peu plus en détail l’exploration de la mémoire Windows.
Analysez en détail les processus avec Volatility
Dans le premier chapitre, nous avons vu quelques commandes de base pour extraire des informations liées aux processus en cours de fonctionnement. Il existe de nombreuses autres commandes permettant l’exploration et l’analyse des processus.
Certaines de ces informations nécessitent de connaître un peu plus en détail les structures de données utilisées. Je ne vais donc pas détailler ces éléments dans ce cours. Mais si vous voulez aller plus loin dans l'analyse, je vous invite à lire le livre « Windows Internals », édité par Microsoft.
Affichez l'arborescence des processus avec pstree
Nous avons vu qu’il était possible de lister les processus en cours de fonctionnement dans le dump mémoire avec la commande pslist
. Il existe toutefois une autre commande, pstree
, qui permet d’afficher la liste des processus sous forme d’arborescence.
Voici la commande à exécuter pour afficher l'arborescence des processus :
$ volatility -f memdump.mem –-profile=Win7SP1x64 pstree Name Pid PPid Thds Hnds Time -------------------------------------------------- ------ ------ ------ ------ ---- 0x867f7030:wininit.exe 412 352 3 74 2019-07-31 11:50:01 UTC+0000 . 0x8684a6c0:services.exe 512 412 8 209 2019-07-31 11:50:01 UTC+0000 .. 0x84a49a80:taskhost.exe 1644 512 9 205 2019-07-31 11:56:18 UTC+0000 .. 0x86a46030:svchost.exe 780 512 18 502 2019-07-31 11:50:01 UTC+0000 .. 0x85c4e030:svchost.exe 728 512 9 310 2019-07-31 11:50:01 UTC+0000 .. 0xa75ffa80:SearchIndexer. 3012 512 13 734 2019-07-31 11:52:04 UTC+0000 .. 0x86cac748:svchost.exe 1960 512 5 98 2019-07-31 11:50:03 UTC+0000 .. 0x84964d40:wmpnetwk.exe 2408 512 9 223 2019-07-31 11:56:25 UTC+0000 .. 0x86abd510:svchost.exe 948 512 41 1226 2019-07-31 11:50:01 UTC+0000 .. 0x86a33030:vmacthlp.exe 696 512 3 53 2019-07-31 11:50:01 UTC+0000 .. 0x86c20640:vmtoolsd.exe 1596 512 9 306 2019-07-31 11:50:02 UTC+0000 .. 0x86c4ca08:svchost.exe 2896 512 13 364 2019-07-31 11:52:03 UTC+0000 .. 0x86b6a378:spoolsv.exe 1348 512 12 321 2019-07-31 11:50:02 UTC+0000 .. 0x86bca4a0:svchost.exe 1488 512 14 243 2019-07-31 11:50:02 UTC+0000 .. 0x86ae5728:svchost.exe 1108 512 9 280 2019-07-31 11:50:02 UTC+0000 .. 0x86b0bb78:svchost.exe 1240 512 16 491 2019-07-31 11:50:02 UTC+0000 .. 0x86c0ed18:VGAuthService. 1572 512 3 89 2019-07-31 11:50:02 UTC+0000 .. 0x86ca4030:TPAutoConnSvc. 2012 512 9 129 2019-07-31 11:50:03 UTC+0000 ... 0x84ba8890:TPAutoConnect. 1984 2012 3 111 2019-07-31 11:56:19 UTC+0000 .. 0x84b5a030:msdtc.exe 1632 512 12 143 2019-07-31 12:17:50 UTC+0000 .. 0x86ca1790:svchost.exe 1916 512 6 90 2019-07-31 11:50:03 UTC+0000 .. 0x86a7cd00:svchost.exe 876 512 15 382 2019-07-31 11:50:01 UTC+0000 ... 0x868b8030:dwm.exe 1176 876 3 70 2019-07-31 11:56:18 UTC+0000 .. 0x86b754d0:svchost.exe 1384 512 18 313 2019-07-31 11:50:02 UTC+0000 .. 0x8690e190:svchost.exe 636 512 10 361 2019-07-31 11:50:01 UTC+0000 ... 0x86bd1988:WmiPrvSE.exe 332 636 10 291 2019-07-31 11:50:03 UTC+0000 . 0x868d6b80:lsass.exe 520 412 7 610 2019-07-31 11:50:01 UTC+0000 . 0x868d7960:lsm.exe 528 412 10 150 2019-07-31 11:50:01 UTC+0000 0x8673f030:csrss.exe 360 352 9 381 2019-07-31 11:50:00 UTC+0000 0x867f3030:explorer.exe 588 288 31 945 2019-07-31 11:56:18 UTC+0000 . 0x84948030:OUTLOOK.EXE 3476 588 26 1643 2019-07-31 11:56:34 UTC+0000 . 0x84b1c030:WINWORD.EXE 3544 588 13 621 2019-07-31 12:45:34 UTC+0000 .. 0x84e19030:rad5163B.tmp.e 1416 3544 11 472 2019-07-31 12:45:47 UTC+0000 ... 0x84a46030:systeminfo.exe 2472 1416 0 ------ 2019-07-31 12:51:36 UTC+0000 ... 0x84aeebf8:cscript.exe 2728 1416 5 198 2019-07-31 12:53:57 UTC+0000 .... 0x84d165e8:rfhyMVOQxfc.ex 1292 2728 0 ------ 2019-07-31 12:53:57 UTC+0000 .... 0x84dc3d40:rfhyMVOQxfc.ex 1808 2728 3 91 2019-07-31 13:45:17 UTC+0000 ... 0x84ad3a08:cmd.exe 2204 1416 0 ------ 2019-07-31 12:55:36 UTC+0000 ... 0x84aca030:reg.exe 3360 1416 0 ------ 2019-07-31 12:51:38 UTC+0000 ... 0x84dbcd40:reg.exe 3300 1416 0 ------ 2019-07-31 12:52:35 UTC+0000 ... 0x84f58030:cmd.exe 2192 1416 0 ------ 2019-07-31 13:11:32 UTC+0000 ... 0x86e61c88:cmd.exe 3860 1416 0 ------ 2019-07-31 13:16:12 UTC+0000 ... 0x84e07030:net.exe 3876 1416 0 ------ 2019-07-31 12:51:28 UTC+0000 ... 0x84cd81b8:reg.exe 3136 1416 0 ------ 2019-07-31 12:51:40 UTC+0000 ... 0x84957030:notepad.exe 2592 1416 0 ------ 2019-07-31 13:39:28 UTC+0000 ... 0x84c84d40:NETSTAT.EXE 1716 1416 0 ------ 2019-07-31 12:51:27 UTC+0000 ... 0x87b2b030:reg.exe 1256 1416 0 ------ 2019-07-31 12:52:25 UTC+0000 ... 0x8617b2f0:reg.exe 1892 1416 0 ------ 2019-07-31 12:52:24 UTC+0000 ... 0x84ff0778:NETSTAT.EXE 3928 1416 0 ------ 2019-07-31 12:51:27 UTC+0000 ... 0x849b25f0:cmd.exe 2284 1416 0 ------ 2019-07-31 12:51:27 UTC+0000 ... 0x84e6fa90:cmd.exe 1896 1416 0 ------ 2019-07-31 13:00:28 UTC+0000 . 0x86ca1030:FTK Imager.exe 2108 588 14 323 2019-07-31 12:46:05 UTC+0000 . 0x86ca8030:chrome.exe 724 588 0 ------ 2019-07-31 12:03:30 UTC+0000 . 0x84a787d0:vmtoolsd.exe 2500 588 5 328 2019-07-31 11:56:19 UTC+0000 0x848338e8:System 4 0 90 547 2019-07-31 11:49:59 UTC+0000 . 0x87002020:smss.exe 272 4 2 29 2019-07-31 11:49:59 UTC+0000 0x84d9a5b8:recorder.exe 2856 3288 0 ------ 2019-07-31 12:06:58 UTC+0000 0x84bc6790:net1.exe 1940 3464 0 ------ 2019-07-31 12:51:27 UTC+0000 0x86d94d40:whoami.exe 3432 3996 0 ------ 2019-07-31 13:38:21 UTC+0000 0x867f55f8:csrss.exe 420 404 11 388 2019-07-31 11:50:01 UTC+0000 . 0x84bae6c8:conhost.exe 2312 420 1 33 2019-07-31 11:56:19 UTC+0000 . 0x84f04030:conhost.exe 2876 420 1 33 2019-07-31 12:53:57 UTC+0000 0x86879d40:winlogon.exe 468 404 3 110 2019-07-31 11:50:01 UTC+0000 0x86d70d40:net1.exe 2220 2916 0 ------ 2019-07-31 12:51:36 UTC+0000 0x849940f8:whoami.exe 3100 3796 0 ------ 2019-07-31 13:39:27 UTC+0000 0x86c83030:whoami.exe 2924 2680 0 ------ 2019-07-31 13:38:22 UTC+0000 0x86c4e888:net1.exe 1276 3124 0 ------ 2019-07-31 12:51:35 UTC+0000 0x86dcbd40:whoami.exe 2072 1972 0 ------ 2019-07-31 13:39:28 UTC+0000 0x86e1a9f0:whoami.exe 1880 3936 0 ------ 2019-07-31 13:40:09 UTC+0000 0x84af7030:net1.exe 4052 3340 0 ------ 2019-07-31 12:51:28 UTC+0000 0x84a835a8:whoami.exe 2100 3992 0 ------ 2019-07-31 13:40:09 UTC+0000 0x86da1030:net1.exe 2532 1700 0 ------ 2019-07-31 12:51:28 UTC+0000 0x86e1dcd0:whoami.exe 3972 2772 0 ------ 2019-07-31 13:40:10 UTC+0000 0x84f30648:whoami.exe 596 2304 0 ------ 2019-07-31 13:39:52 UTC+0000
Nous pouvons voir énormément de processus en cours de fonctionnement sur le système. Il sera ainsi possible d’identifier un processus suspect.
Par exemple, dans notre cas, nous pouvons voir que le processus avec le PID 1416 précédemment identifié est fils du process avec le PID 3544 correspondant au processus Winword.
Affichez les processus cachés avec psxview
Une autre commande qui peut être utilisée pour lister les processus est psxview
. Cette commande permet d’afficher les processus cachés.
$ volatility -f memdump.mem –-profile=Win7SP1x86 psxview Offset(P) Name PID pslist psscan thrdproc pspcid csrss session deskthrd ExitTime ---------- -------------------- ------ ------ ------ -------- ------ ----- ------- -------- -------- 0x7d4d6b80 lsass.exe 520 True False True True True True False 0x7d27cd00 svchost.exe 876 True False True True True True False 0x7ef04030 conhost.exe 2876 True False True True True True False [...] 0x7ce1a9f0 whoami.exe 1880 True False False True False True False 2019-07-31 13:40:09 UTC+0000 0x7d083030 whoami.exe 2924 True False False True False True False 2019-07-31 13:38:22 UTC+0000 0x7f2f7030 net1.exe 4052 True False False True False True False 2019-07-31 12:51:28 UTC+0000
Si un processus est caché, la colonne pslist
, psscan
sera marquée comme False.
Détectez l'injection de code avec malfind
La commande malfind
peut être utilisée pour détecter de l’injection de code malveillant. Pour cela, utilisez cette commande :
$volatility -f memdump.mem –-profile=Win7SP1x86 malfind Process:rad5163B.tmp.ePid:1416Address:0x18b0000 VadTag:VadSProtection:PAGE_EXECUTE_READWRITE Flags:CommitCharge:33,MemCommit:1,PrivateMemory:1,Protection:6 0x018b00004d5a90000300000004000000ffff0000MZ.............. 0x018b0010b8000000000000004000000000000000........@....... 0x018b002000000000000000000000000000000000................ 0x018b0030000000000000000000000000e8000000................ 0x018b00004dDECEBP 0x018b00015aPOPEDX 0x018b000290NOP 0x018b00030003ADD[EBX],AL 0x018b00050000ADD[EAX],AL 0x018b0007000400ADD[EAX+EAX],AL 0x018b000a0000ADD[EAX],AL 0x018b000cffDB0xff 0x018b000dff00INCDWORD[EAX] 0x018b000f00b800000000ADD[EAX+0x0],BH 0x018b00150000ADD[EAX],AL 0x018b0017004000ADD[EAX+0x0],AL 0x018b001a0000ADD[EAX],AL 0x018b001c0000ADD[EAX],AL 0x018b001e0000ADD[EAX],AL 0x018b00200000ADD[EAX],AL 0x018b00220000ADD[EAX],AL 0x018b00240000ADD[EAX],AL 0x018b00260000ADD[EAX],AL 0x018b00280000ADD[EAX],AL 0x018b002a0000ADD[EAX],AL 0x018b002c0000ADD[EAX],AL 0x018b002e0000ADD[EAX],AL 0x018b00300000ADD[EAX],AL 0x018b00320000ADD[EAX],AL 0x018b00340000ADD[EAX],AL 0x018b00360000ADD[EAX],AL 0x018b00380000ADD[EAX],AL 0x018b003a0000ADD[EAX],AL 0x018b003ce8DB0xe8 0x018b003d0000ADD[EAX],AL 0x018b003f00DB0x0
Ici, nous pouvons voir un extrait de l’en-tête du processus avec le PID1416. Nous pouvons voir ici qu’il s’agit d’un exécutable avec l’en-tête MZ.
Il existe une multitude de techniques d’injection, telles que la technique « Process Hollowing » ou encore la technique « Process Doppelganging ». L’analyse de la mémoire peut permettre de détecter ces injections de codes.
Process dump avec procdump
Lors de l’analyse mémoire, il sera possible de dumper un processus en particulier pour l’analyser en détail. Il est également possible de réaliser un dump mémoire d’un processus en cours d’exécution.
Ce dump est un instantané d’un processus en cours d'exécution et contient les modules chargés pour l’application à un moment donné.
Volatility possède une option permettant de dumper un processus spécifique.
$ volatility -f memdump.mem –-profile=Win7SP1x86 procdump -D dir/ -p 1416
Les dumps de processus sont principalement utilisés pour résoudre les problèmes de machines auxquelles les développeurs n’ont pas accès. Toutefois, ils peuvent s’avérer très utile, pour l’analyse détaillée d’un processusmalveillant, par exemple. Gardez bien ce dump, car nous l'analyserons plus tard.
L’investigation de la mémoire pour la détection et l’analyse de processus malveillants permet d’extraire des informations qui peuvent être difficilement récupérables avec une analyse statique. Volatility permet également d’analyser d’autres éléments qui peuvent être intéressants.
Listez les mutex avec mutantscan
Il est également possible de lister les mutex (Mutual Exclusion) avec la commande mutantscan. Un mutex est une primitive de synchronisation. C'est un outil utilisé en programmation informatique pour éviter que des ressources partagées d'un système ne soient utilisées en même temps.
Les mutex peuvent être utilisés par des logiciels malveillants pour ne pas réinfecter une même machine. Ce type d’information permet également d’identifier un malware en particulier, c’est un indicateur de compromission.
La commande mutantscan
permet de scanner les mutex dans la mémoire.
$ volatility -f memdump.mem –-profile=Win7SP1x86 mutantscan Offset(P) #Ptr #Hnd Signal Thread CID Name ------------------ -------- -------- ------ ---------- --------- ---- 0x000000000ed801f0 2 1 1 0x00000000 ASP.NET_4.0.30319_Perf_Library_Lock_PID_63c 0x000000000f124030 1 1 1 0x00000000 0x00000000165e1180 1 1 1 0x00000000 [...] 0x000000007f5d2228 1 1 1 0x00000000 0x000000007f5d4cb8 1 1 1 0x00000000 0x000000007f5eb6f8 2 1 1 0x00000000 SMSvcHost 4.0.0.0_Perf_Library_Lock_PID_14c
Extraction des services
La commande svcscan
permet de lister les services sur la machine en cours d’investigation.
Allez plus loin avec d'autres options de Volatility
Volatility permet une analyse en profondeur de la mémoire. Nous n'allons pas voir en détail toutes les options possibles, mais voici quelques autres commandes qui pourront vous servir :
cmdscan
pour extraire l’historique des commandes entrées dans l’invite de commande, et donc voir quelles ont été les dernières commandes entrées avant l'incident. Si vous détectez une commande suspecte entrée juste avant l'incident, vous avez peut-être trouvé le déclencheur du malware !yarascan
permettant d'utiliser des YARA rules. Les YARA rules sont un moyen de chercher des caractéristiques particulières des malwares dans des fichiers, afin de détecter des fichiers malveillants. Ce sont des techniques particulières, mais sachez que vous pouvez les utiliser avec Volatility. Je vous invite à consulter cette page sur les YARA rules pour en savoir un peu plus.
Les plugins Volatility
Il est également possible de développer et d’utiliser des plugins complémentaires, par exemple pour extraire des informations relatives à un malware en particulier.
Pour utiliser un plugin, il suffit de spécifier l’emplacement du plugin avec l’option --plugins=“”
. Nous pouvons voir ici un exemple avec le plugin autoruns. Ce plugin permet d’extraire les clés de registre Run permettant l’exécution de programmes à chaque démarrage. En d'autres termes, il vous permet de détecter quelles sont les manières dont le malware persiste sur la machine.
$ vol.py --plugins="/home/rocfor/forensic_case001/volatility-autoruns/" -f memdump.mem --profile=Win7SP1x86_23418 autoruns Volatility Foundation Volatility Framework 2.6.1 Autoruns========================================== Hive: \SystemRoot\System32\Config\SOFTWARE Microsoft\Windows\CurrentVersion\Run (Last modified: 2019-07-31 12:34:18 UTC+0000) "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr : VMware User Process (PIDs: 2500) [...] Hive: \??\C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT Software\Microsoft\Windows\CurrentVersion\RunOnce (Last modified: 2019-07-24 04:59:44 UTC+0000) C:\Windows\System32\mctadmin.exe : mctadmin (PIDs: ) Hive: \??\C:\Users\johnoc\ntuser.dat Software\Microsoft\Windows\CurrentVersion\Run (Last modified: 2019-07-31 12:53:57 UTC+0000) C:\Users\johnoc\AppData\Local\Temp\krtYMkVgyjNdd.vbs : YPDKhVAXzZSU (PIDs: 2728) Winlogon (Shell)================================== Shell: explorer.exe Default value: Explorer.exe PIDs: 588 Last write time: 2019-07-31 11:50:01 UTC+0000 Winlogon (Userinit)=============================== Userinit: C:\Windows\system32\userinit.exe, Default value: userinit.exe PIDs: Last write time: 2019-07-31 11:50:01 UTC+0000 Services========================================== Service: clr_optimization_v4.0.30319_32 - Microsoft .NET Framework NGEN v4.0.30319_X86 (Win32_Own_Process - Auto Start) Image path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorsvw.exe (Last modified: 2019-07-31 12:16:55 UTC+0000) PIDs: [...] Service: VMware Physical Disk Helper Service - VMware Physical Disk Helper Service (Win32_Own_Process - Auto Start) Image path: "C:\Program Files\VMware\VMware Tools\vmacthlp.exe" (Last modified: 2019-07-23 19:06:13 UTC+0000) PIDs: 696 Hive: \??\C:\Users\johnoc\ntuser.dat Software\Microsoft\Windows\CurrentVersion\Run (Last modified: 2019-07-31 12:53:57 UTC+0000) C:\Users\johnoc\AppData\Local\Temp\krtYMkVgyjNdd.vbs : YPDKhVAXzZSU (PIDs: 2728) Active Setup====================================== Command line: %SystemRoot%\system32\unregmp2.exe /ShowWMP Last-written: 2010-11-20 21:35:23 UTC+0000 (PIDs: ) Command line: C:\Windows\System32\ie4uinit.exe -UserIconConfig Last-written: 2019-07-24 04:59:42 UTC+0000 (PIDs: ) [...]
Ici, nous pouvons voir qu'une clé autorun a été identifiée et démarre un fichier VBS dans le répertoire : C:\Users\johnoc\AppData\Local\Temp\krtYMkVgyjNdd.vbs.
Il existe de nombreux plugins que vous pourrez utiliser au cas par cas selon vos besoins. Vous pourrez trouver une liste des plugins Volatility sur cette page.
Développer un plugin sur Volatility n'est pas tâche facile, mais vous pourrez trouver des informations et des conseils sur cette page GitHub.
En résumé
Ça y est, vous avez terminé l'analyse du dump mémoire du poste infecté ! ✅
Comme nous avons pu le voir, Volatility est un outil open source extrêmement complet, qui permet une analyse mémoire en profondeur. Pour comprendre plus en détail comment est organisée la mémoire Windows, il sera nécessaire d’approfondir vos connaissances de l’OS. Toutefois, cette introduction vous permettra de réaliser des investigations de base.
Dans ce chapitre, nous avons utilisé quelques options du framework Volatility afin de mener notre analyse du dump mémoire :
pstree
afin de lister l’arborescence des processus ;psxview
pour détecter si un processus est caché ;malfind
révèle les injections de code potentiellement malveillant ;mutantscan
permet de lister les mutex sur le système ;il est possible de dumper un processus avec les commande
memdump
etprocmemdump
;il est possible d’utiliser cmdscan, les YARA rules et les plugins pour une utilisation avancée.
Nous avons identifié plusieurs éléments :
Le processus rad5163B.tmp.exe est fils du processus Winword et exécute des actions sur le système avec ses processus enfants.
Nous avons dumpé ce processus pour l'analyser plus tard.
Une clef autorun a été identifiée et démarre un fichier VBS.
Dans la partie 3, nous allons à présent nous pencher sur l’analyse du disque dur.