• 20 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 28/11/2019

Analysez un dump mémoire en profondeur

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

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 pslistpsscan 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  et  procmemdump ;

  • il est possible d’utiliser cmdscan, les YARA rules et les plugins pour une utilisation avancée.

Nous avons identifié plusieurs éléments :

  1. Le processus rad5163B.tmp.exe est fils du processus Winword et exécute des actions sur le système avec ses processus enfants. 

  2. Nous avons dumpé ce processus pour l'analyser plus tard. 

  3. 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.

Exemple de certificat de réussite
Exemple de certificat de réussite