Forensique analyse mémoire : Volatility

 

Chose promise, chose due ! Voici un petit tour d’horizon de l’outil Volatility.

Pour ceux qui ne le connaisse pas encore, Volatility est un Framework contenant de multiples outils visant à vous aider dans la manipulation de données contenues dans un dump mémoire (RAM). A ce jour, l’outil permet d’extraire les données suivantes :
– Processus en cours d’exécution ;
– Connexion ouvertes ;
– DLLs chargées par les processus ;
– Fichier ouverts par les processus ;
– exécutables ;
– données de la base de registre ;
– etc.

L’outil permet d’extraire les données sur les systèmes d’exploitation Windows. Cependant, une version permettant d’analyser des dump Linux  a été développée par Emilien Girault. L’outil est disponible à l’adresse suivante : http://code.google.com/p/volatilitux/.

Lors du précédent article lié au Wargame de la NDH 2012, une épreuve contenant un dump mémoire Windows a été analysé. Nous allons utiliser ce dernier afin d’aborder les commandes de base de l’outil Volatility.

Here we go !

Commençons par identifier le système d’exploitation d’où provient le dump :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw imageinfo
Volatile Systems Volatility Framework 2.0
          Suggested Profile(s) : WinXPSP3x86, WinXPSP2x86 (Instantiated with WinXPSP2x86)
                     AS Layer1 : JKIA32PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/root/Desktop/memdump.raw)
                      PAE type : No PAE
                           DTB : 0x39000
                          KDBG : 0x8054cde0L
                          KPCR : 0xffdff000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2012-05-09 11:06:48
     Image local date and time : 2012-05-09 11:06:48
          Number of Processors : 1
                    Image Type : Service Pack 3

L’image semble provenir d’un Windows XP SP3 et a été créée le 09 Mai 2012 à 11 heures 06 et 48 secondes.

Maintenant listons les processus y figurant :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 pslist
Volatile Systems Volatility Framework 2.0
 Offset(V)  Name                 PID    PPID   Thds   Hnds   Time
———- ——————– —— —— —— —— ——————-
0x812ed020 System                    4      0     55    231 1970-01-01 00:00:00       
0x811cc5a0 smss.exe                368      4      3     19 2012-05-09 20:06:10       
0xffbcada0 csrss.exe               584    368     10    368 2012-05-09 20:06:10       
0xffb03310 winlogon.exe            608    368     25    539 2012-05-09 20:06:10       
0xffb9d668 services.exe            652    608     21    270 2012-05-09 20:06:11       
0xffaf5488 lsass.exe               664    608     25    359 2012-05-09 20:06:11       
0xffb506e8 VBoxService.exe         820    652      8    106 2012-05-09 20:06:11       
0xffb94368 svchost.exe             864    652     19    195 2012-05-09 11:06:12       
0xffb02da0 svchost.exe             952    652     14    225 2012-05-09 11:06:12       
0xffb175a0 svchost.exe            1044    652     65   1151 2012-05-09 11:06:12       
0xffb3b7a0 svchost.exe            1092    652      5     60 2012-05-09 11:06:12       
0xffaf17e0 svchost.exe            1124    652     11    170 2012-05-09 11:06:12       
0xffb7b608 explorer.exe           1508   1484     21    556 2012-05-09 11:06:13       
0x81121638 spoolsv.exe            1596    652     13    115 2012-05-09 11:06:13       
0xffb4c978 VBoxTray.exe           1708   1508      6     57 2012-05-09 11:06:13       
0xffbcf360 ctfmon.exe             1720   1508      1     93 2012-05-09 11:06:13       
0x81129a48 PassKeep.exe           1864   1508      2     39 2012-05-09 11:06:17       
0xffb22da0 PassKeep.exe           1872   1864      2    104 2012-05-09 11:06:17       
0x8120cc08 svchost.exe            1972    652      5    106 2012-05-09 11:06:21       
0xffb7a440 wscntfy.exe            1040   1044      1     39 2012-05-09 11:06:24       
0x8113f910 alg.exe                1228    652      7    104 2012-05-09 11:06:24       
0xffb43c08 DumpIt.exe              124   1508      1     25 2012-05-09 11:06:46

Yes, nous avons maintenant la liste des processus, le PID, PPID, nombre de threads, nombres d’handles, etc.

Pour dumper tous les binaires, on procédera ainsi :

root@bt:/pentest/forensics/volatility# mkdir yopla
root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw memdump –profile=WinXPSP3x86 –dump-dir yopla
Volatile Systems Volatility Framework 2.0
************************************************************************
Writing System [     4] to 4.dmp
************************************************************************
Writing smss.exe [   368] to 368.dmp
************************************************************************
Writing csrss.exe [   584] to 584.dmp
************************************************************************
Writing winlogon.exe [   608] to 608.dmp

L’article n’étant pas orienté vers une analyse détaillée des processus, je ne vais pas m’attaquer à l’analyse de ces différents dump. Vous pouvez cependant regardé dans le précédent post, l’analyse du binaire « PassKeep.exe« .

Analysons maintenant les DLLs chargées par le processus DumpIt.exe (PID : 124) :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 dlllist –pid=124
Volatile Systems Volatility Framework 2.0
************************************************************************
DumpIt.exe pid:    124
Command line : « C:\Documents and Settings\rootbsd\Desktop\DumpIt\DumpIt.exe »
Service Pack 3

Base         Size         Path
0x00400000   0x035000     C:\Documents and Settings\rootbsd\Desktop\DumpIt\DumpIt.exe
0x7c900000   0x0b2000     C:\WINXP\system32\ntdll.dll
0x7c800000   0x0f6000     C:\WINXP\system32\kernel32.dll
0x77dd0000   0x09b000     C:\WINXP\system32\ADVAPI32.dll
0x77e70000   0x093000     C:\WINXP\system32\RPCRT4.dll
0x77fe0000   0x011000     C:\WINXP\system32\Secur32.dll
0x77f60000   0x076000     C:\WINXP\system32\SHLWAPI.dll
0x77f10000   0x049000     C:\WINXP\system32\GDI32.dll
0x7e410000   0x091000     C:\WINXP\system32\USER32.dll
0x77c10000   0x058000     C:\WINXP\system32\msvcrt.dll
0x76390000   0x01d000     C:\WINXP\system32\IMM32.DLL

Comme vous pouvez vous en douter, pour analyser les DLLs chargées par un processus X, il suffit de remplacer le PID par celui de votre choix. Par ailleurs, si vous avez remarqué, la ligne command line nous donne une information concernant l’emplacement de l’outil sur le système. Elle permet également de nous donner une information sur l’un des noms d’utilisateur du système : rootbsd.

Pour extraire les informations d’une des DLL chargée, on procédera de la manière suivante :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 dlldump -r ntdll -D pony
Volatile Systems Volatility Framework 2.0
Dumping ntdll.dll, Process: smss.exe, Base: 7c900000 output: module.368.10d45a0.7c900000.dll
Dumping ntdll.dll, Process: csrss.exe, Base: 7c900000 output: module.584.3f69da0.7c900000.dll
Dumping ntdll.dll, Process: winlogon.exe, Base: 7c900000 output: module.608.45fa310.7c900000.dll
Dumping ntdll.dll, Process: services.exe, Base: 7c900000 output: module.652.40d8668.7c900000.dll
Dumping ntdll.dll, Process: lsass.exe, Base: 7c900000 output: module.664.470a488.7c900000.dll
Dumping ntdll.dll, Process: VBoxService.exe, Base: 7c900000 output: module.820.43296e8.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.864.4123368.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.952.45fbda0.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.1044.45a65a0.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.1092.46807a0.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.1124.498e7e0.7c900000.dll
Dumping ntdll.dll, Process: explorer.exe, Base: 7c900000 output: module.1508.417c608.7c900000.dll
Dumping ntdll.dll, Process: spoolsv.exe, Base: 7c900000 output: module.1596.1029638.7c900000.dll
Dumping ntdll.dll, Process: VBoxTray.exe, Base: 7c900000 output: module.1708.436d978.7c900000.dll
Dumping ntdll.dll, Process: ctfmon.exe, Base: 7c900000 output: module.1720.3f24360.7c900000.dll
Dumping ntdll.dll, Process: PassKeep.exe, Base: 7c900000 output: module.1864.1031a48.7c900000.dll
Dumping ntdll.dll, Process: PassKeep.exe, Base: 7c900000 output: module.1872.455bda0.7c900000.dll
Dumping ntdll.dll, Process: svchost.exe, Base: 7c900000 output: module.1972.1114c08.7c900000.dll
Dumping ntdll.dll, Process: wscntfy.exe, Base: 7c900000 output: module.1040.417d440.7c900000.dll
Dumping ntdll.dll, Process: alg.exe, Base: 7c900000 output: module.1228.1047910.7c900000.dll
Dumping ntdll.dll, Process: DumpIt.exe, Base: 7c900000 output: module.124.4378c08.7c900000.dll

root@bt:/pentest/forensics/volatility# cd pony

root@bt:/pentest/forensics/volatility/pony# ls

module.1040.417d440.7c900000.dll  module.1872.455bda0.7c900000.dll
module.1044.45a65a0.7c900000.dll  module.1972.1114c08.7c900000.dll
module.1092.46807a0.7c900000.dll  module.368.10d45a0.7c900000.dll
module.1124.498e7e0.7c900000.dll  module.584.3f69da0.7c900000.dll
module.1228.1047910.7c900000.dll  module.608.45fa310.7c900000.dll
module.124.4378c08.7c900000.dll   module.652.40d8668.7c900000.dll
module.1508.417c608.7c900000.dll  module.664.470a488.7c900000.dll
module.1596.1029638.7c900000.dll  module.820.43296e8.7c900000.dll
module.1708.436d978.7c900000.dll  module.864.4123368.7c900000.dll
module.1720.3f24360.7c900000.dll  module.952.45fbda0.7c900000.dll
module.1864.1031a48.7c900000.dll

Passons à la partie réseau en listant les connexions actives du système :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw connections
Volatile Systems Volatility Framework 2.0
 Offset(V)  Local Address             Remote Address            Pid   
———- ————————- ————————- ——

Pas de chance, aucune information n’a pu être retrouvée. Tanpis, nous allons nous rabattre sur le listing des ports en écoute sur le système :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 sockets
Volatile Systems Volatility Framework 2.0
 Offset(V)  PID    Port   Proto               Address        Create Time               
———- —— —— ——————- ————– ————————–
0xffb44af0   1044    123     17 UDP            10.0.2.15          2012-05-09 11:06:21       
0x81134960    664    500     17 UDP            0.0.0.0            2012-05-09 11:06:21       
0xff9942e0   1228   1028      6 TCP            127.0.0.1          2012-05-09 11:06:24       
0xffb4d390      4    445      6 TCP            0.0.0.0            2012-05-09 20:06:10       
0xffbdc9d0    952    135      6 TCP            0.0.0.0            2012-05-09 11:06:12       
0xff9cee98   1124   1900     17 UDP            10.0.2.15          2012-05-09 11:06:24       
0x81132c08      4    139      6 TCP            10.0.2.15          2012-05-09 11:06:15       
0x81132c08    664      0    255 Reserved       0.0.0.0            2012-05-09 11:06:21       
0xffb0b5f8   1044    123     17 UDP            127.0.0.1          2012-05-09 11:06:21       
0xffb80a90      4    137     17 UDP            10.0.2.15          2012-05-09 11:06:15       
0xff9cfd98   1124   1900     17 UDP            127.0.0.1          2012-05-09 11:06:24       
0xffaef008    664   4500     17 UDP            0.0.0.0            2012-05-09 11:06:21       
0xffb4d008      4    445     17 UDP            0.0.0.0            2012-05-09 20:06:10       
0xffb4d008      4    138     17 UDP            10.0.2.15          2012-05-09 11:06:15

Ici, on peut remarquer que les ports 123, 137, 138, 139, 445, 500, etc. sont ouverts.

Passons maintenant à l’analyse de la base de registre en localisant les adresses virtuelles des ruches :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 hivelist
Volatile Systems Volatility Framework 2.0
Virtual     Physical    Name
0xe1ad3348  0x0a7e2348  \Device\HarddiskVolume1\Documents and Settings\rootbsd\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe1a7db60  0x0a7c8b60  \Device\HarddiskVolume1\Documents and Settings\rootbsd\NTUSER.DAT
0xe17ef738  0x09205738  \Device\HarddiskVolume1\Documents and Settings\LocalService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe17e7a28  0x09233a28  \Device\HarddiskVolume1\Documents and Settings\LocalService\NTUSER.DAT
0xe17c5a60  0x08e04a60  \Device\HarddiskVolume1\Documents and Settings\NetworkService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe17beb60  0x08d76b60  \Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT
0xe14e4b60  0x02b36b60  \Device\HarddiskVolume1\WINXP\system32\config\software
0xe145d008  0x070f1008  \Device\HarddiskVolume1\WINXP\system32\config\default
0xe1455980  0x06f8f980  \Device\HarddiskVolume1\WINXP\system32\config\SECURITY
0xe145d820  0x070f1820  \Device\HarddiskVolume1\WINXP\system32\config\SAM
0xe135db60  0x01abdb60  [no name]
0xe1019600  0x017b1600  \Device\HarddiskVolume1\WINXP\system32\config\system
0xe1006030  0x016f4030  [no name]
0x8068fdd8  0x0068fdd8  [no name]

On va maintenant lister les sous-clés de la ruche « \Device\HarddiskVolume1\WINXP\system32\config\SAM » :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 hivedump -o 0xe145d820
Volatile Systems Volatility Framework 2.0
Last Written         Key
2012-05-09 11:41:30  \SAM
2012-05-09 11:41:30  \SAM\SAM
2012-05-09 11:41:30  \SAM\SAM\Domains
2012-05-09 18:50:39  \SAM\SAM\Domains\Account
2012-05-09 18:47:12  \SAM\SAM\Domains\Account\Aliases
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Aliases\000003E9
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Aliases\Members
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298\000003EA
2012-05-09 18:47:12  \SAM\SAM\Domains\Account\Aliases\Names
2012-05-09 18:47:12  \SAM\SAM\Domains\Account\Aliases\Names\HelpServicesGroup
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Groups
2012-05-09 18:50:39  \SAM\SAM\Domains\Account\Groups\00000201
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Groups\Names
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Groups\Names\None
2012-05-09 18:50:39  \SAM\SAM\Domains\Account\Users
2012-05-09 11:45:09  \SAM\SAM\Domains\Account\Users\000001F4
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Users\000001F5
2012-05-09 18:46:41  \SAM\SAM\Domains\Account\Users\000003E8
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Users\000003EA
2012-05-09 11:06:13  \SAM\SAM\Domains\Account\Users\000003EB
2012-05-09 18:50:39  \SAM\SAM\Domains\Account\Users\Names
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Users\Names\Administrator
2012-05-09 11:41:30  \SAM\SAM\Domains\Account\Users\Names\Guest
2012-05-09 18:46:41  \SAM\SAM\Domains\Account\Users\Names\HelpAssistant
2012-05-09 18:50:39  \SAM\SAM\Domains\Account\Users\Names\rootbsd
2012-05-09 18:47:21  \SAM\SAM\Domains\Account\Users\Names\SUPPORT_388945a0
2012-05-09 18:50:39  \SAM\SAM\Domains\Builtin
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases
2012-05-09 18:50:39  \SAM\SAM\Domains\Builtin\Aliases\00000220
2012-05-09 11:42:17  \SAM\SAM\Domains\Builtin\Aliases\00000221
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\00000222
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\00000223
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\00000227
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\00000228
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\0000022B
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\0000022C
2012-05-09 11:42:17  \SAM\SAM\Domains\Builtin\Aliases\Members
2012-05-09 11:42:17  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5
2012-05-09 11:42:17  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5\00000004
2012-05-09 11:42:17  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5\0000000B
2012-05-09 18:50:39  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298\000001F4
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298\000001F5
2012-05-09 18:50:39  \SAM\SAM\Domains\Builtin\Aliases\Members\S-1-5-21-1078081533-1383384898-1060284298\000003EB
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Administrators
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Backup Operators
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Guests
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Network Configuration Operators
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Power Users
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Remote Desktop Users
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Replicator
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Aliases\Names\Users
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Groups
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Groups\Names
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Users
2012-05-09 11:41:30  \SAM\SAM\Domains\Builtin\Users\Names
2012-05-09 11:41:30  \SAM\SAM\RXACT

On peut également aller chercher des clés/sous-clés précises :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey -K « Software\Microsoft\Windows\CurrentVersion\Internet Settings »
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: \Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT
Key name: Internet Settings (S)
Last updated: 2012-05-09 18:49:25

Subkeys:
  (S) 5.0
  (S) Lockdown_Zones
  (S) ZoneMap
  (S) Zones

Values:
REG_SZ        User Agent      : (S) Mozilla/4.0 (compatible; MSIE 8.0; Win32)
REG_SZ        IE5_UA_Backup_Flag : (S) 5.0
REG_BINARY    ZonesSecurityUpgrade : (S)
0000   10 BC 89 23 14 2E CD 01                            …#….

REG_DWORD     EnableNegotiate : (S) 1
—————————-
Registry: \Device\HarddiskVolume1\Documents and Settings\rootbsd\NTUSER.DAT
Key name: Internet Settings (S)
Last updated: 2012-05-09 18:51:23

Subkeys:
  (S) 5.0
  (S) CACHE
  (S) Connections
  (S) Lockdown_Zones
  (S) P3P
  (S) ZoneMap
  (S) Zones

Values:
REG_SZ        User Agent      : (S) Mozilla/4.0 (compatible; MSIE 8.0; Win32)
REG_SZ        IE5_UA_Backup_Flag : (S) 5.0
REG_BINARY    ZonesSecurityUpgrade : (S)
0000   10 BC 89 23 14 2E CD 01                            …#….

REG_DWORD     EnableNegotiate : (S) 1
REG_SZ        EmailName       : (S) IEUser@
REG_SZ        AutoConfigProxy : (S) wininet.dll
REG_SZ        MimeExclusionListForCache : (S) multipart/mixed multipart/x-mixed-replace multipart/x-byteranges
REG_BINARY    WarnOnPost      : (S)
0000   01 00 00 00                                        ….

REG_BINARY    UseSchannelDirectly : (S)
0000   01 00 00 00                                        ….

REG_DWORD     EnableHttp1_1   : (S) 1
REG_DWORD     UrlEncoding     : (S) 0
REG_DWORD     SecureProtocols : (S) 160
REG_DWORD     PrivDiscUiShown : (S) 1
REG_DWORD     PrivacyAdvanced : (S) 0
REG_DWORD     DisableCachingOfSSLPages : (S) 0
REG_DWORD     WarnonZoneCrossing : (S) 0
REG_DWORD     MigrateProxy    : (S) 1
REG_DWORD     ProxyEnable     : (S) 0
—————————-
Registry: \Device\HarddiskVolume1\WINXP\system32\config\default

A ce stade, on essaye bien souvent d’aller récupérer les crédences stockés en cache. Pour cela il est nécessaire de connaitre l’adresse virtuelle de la ruche SYSTEM (-y) et de la ruche SAM (-s) (parfait, on a déjà récupéré l’information) :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw hashdump -y 0xe1019600 -s 0xe145d820
Volatile Systems Volatility Framework 2.0
ERROR   : psyco.support       : Unable to read hashes from registry

Pas de chance de ce côté, aucune information n’est disponible. On va essayer via un dump du secret LSA. Pour cela, il faut remplacer l’adresse de la ruche SAM par celle de SECURITY :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw lsadump -y 0xe1019600 -s 0xe1455980
Volatile Systems Volatility Framework 2.0
ERROR   : psyco.support       : Unable to read LSA secrets from registry

Encore loupé, c’est pas notre jour ! ^_^

Aller, on ne se démotive pas et on va aller regarder les clés présentes dans la ruche « \Device\HarddiskVolume1\WINXP\system32\config\software » (pour rappel, l’adresse virtuelle est 0xe14e4b60) :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe14e4b60
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: $$$PROTO.HIV (S)
Last updated: 2012-05-09 19:55:49

Subkeys:
  (S) C07ft5Y
  (S) Classes
  (S) Clients
  (S) Gemplus
  (S) Licenses
  (S) Macromedia
  (S) Microsoft
  (S) ODBC
  (S) Oracle
  (S) Policies
  (S) Program Groups
  (S) Schlumberger
  (S) Secure
  (S) Software by Design
  (S) Windows 3.1 Migration Status

Si l’on souhaite aller voir ce qui se trame dans la sous-clé « GemPlus« , il suffit de procéder ainsi :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe14e4b60 –key « GemPlus »
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: Gemplus (S)
Last updated: 2012-05-09 18:47:28

Subkeys:
  (S) Cryptography

Et now, on veut aller regarder à l’intérieur de « Cryptography » :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe14e4b60 –key « GemPlus\Cryptography »
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: Cryptography (S)
Last updated: 2012-05-09 18:47:28

Subkeys:
  (S) SmartCards

On continue ainsi jusqu’à avoir :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe14e4b60 –key « GemPlus\Cryptography\SmartCards\GemSAFE »
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: GemSAFE (S)
Last updated: 2012-05-09 18:47:28

Subkeys:

Values:
REG_BINARY    Card List       : (S)
0000   47 65 6D 53 41 46 45 20 53 6D 61 72 74 20 43 61    GemSAFE Smart Ca
0010   72 64 20 28 34 4B 29 00 47 65 6D 53 41 46 45 20    rd (4K).GemSAFE
0020   53 6D 61 72 74 20 43 61 72 64 20 28 38 4B 29 00    Smart Card (8K).
0030   00

Bon, rien de bien pertinant mais ca nous fait travailler les commandes :p.

Allons voir ce qu’il y a dans la ruche SYSTEM :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe1019600
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: $$$PROTO.HIV (S)
Last updated: 2012-05-09 20:06:06

Subkeys:
  (S) ControlSet001
  (S) ControlSet002
  (S) LastKnownGoodRecovery
  (S) MountedDevices
  (S) Select
  (S) Setup
  (S) WPA
  (V) CurrentControlSet

On va regarder à l’intérieur de « ControlSet001\Services » :

root@bt:/pentest/forensics/volatility# python vol.py -f /root/Desktop/memdump.raw –profile=WinXPSP3x86 printkey –hive-offset 0xe1019600 –key « ControlSet001\Services »
Volatile Systems Volatility Framework 2.0
Legend: (S) = Stable   (V) = Volatile

—————————-
Registry: User Specified
Key name: Services (S)
Last updated: 2012-05-09 11:06:48

Subkeys:
  (S) Abiosdsk
  (S) abp480n5
  (S) ac97intc
  (S) ACPI
  (S) ACPIEC
  (S) adpu160m
  (S) aec
  (S) AFD
  (S) Aha154x
  (S) aic78u2
  (S) aic78xx
  (S) Alerter
  …
  …

On pourrait continuer à chercher un peu partout mais je pense que vous avez compris le principe.

Voilà donc que se termine le tour d’horizon de la première prise en main de Volatility. On a pas récupéré grand chose au final 🙂 mais l’épreuve était principalement basé sur le binaire KeePass et je ne pense pas qu’il y a des choses intéressantes à en tirer (peut-être que je me trompe, n’hésitez pas à me dire si vous avez trouvé des choses sympa ^_^).

Dans un dump plus complet, de multiples informations sont souvent disponibles. On peut par exemple citer des mots de passe (stockés dans la base de registre), des processus intéressant à analyser (firefox.exe), etc.

N’hésitez pas à commenter l’article si vous souhaitez que j’ajoute certaines commandes qui vous paraissent utiles et qui ont été omises.

Pour finir, si vous souhaitez vous amuser, le Wargame est disponible à l’adresse suivante : http://wargame2k12.nuitduhack.com/

Bonne analyse à tous.

PS : je lis actuellement le livre « Practical Malware Analysis » et je le trouve vraiment très sympa. Je le recommande à tous.

5 Responses to "Forensique analyse mémoire : Volatility"

Laissez un commentaire