MemLabs Lab 5 - Black Tuesday

Memlabs es un conjunto de seis retos forenses que nos permitirán practicar el análisis de memoria al estilo CTF. Fueron publicados en enero de 2020 por @_abhiramkumar y Team bi0s: https://github.com/stuxnet999/MemLabs

Hoy vamos a ver el writeup del quinto reto llamado Black Tuesday, de nivel medio-difícil. 

Descripción 

Recibimos este volcado de memoria de nuestro cliente recientemente. Alguien accedió a su sistema cuando él no estaba y ha encontrado algunos archivos bastante extraños a los que se estaba accediendo. Encuentra esos archivos y podrían serte útiles. Cito su declaración textualmente: 

Los nombres no eran legibles. Estaban compuestos de alfabetos y números, pero no pude distinguir qué era exactamente. 

Además, notó que su aplicación favorita que siempre usaba fallaba cada vez que la ejecutaba. ¿Fue un virus? 

Nota-1: Este reto se compone de 3 flags. Si crees que la segunda flag es el final, ¡no lo es! :P

Nota-2: Hubo un pequeño error al realizar este reto. Si encuentras alguna string que tenga "L4B_3_D0n3!!" en él, cámbialo a "L4B_5_D0n3!!" y luego procede.

 Nota-3: Obtendrás la flag de la fase 2 solo cuando tengas la flag de la fase 1. 

 Fichero del reto: MemLabs_Lab5

$ md5sum MemoryDump_Lab5.raw 
9dd6cb1134c9b018020bad44f27394db  MemoryDump_Lab5.raw
Writeup
$ vol.py -f MemoryDump_Lab5.raw imageinfo
Volatility Foundation Volatility Framework 2.6.1
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_24000, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_24000, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/tools/forensic/MemLabs/MemoryDump_Lab5.raw)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf800028460a0L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0xfffff80002847d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2019-12-20 03:47:57 UTC+0000
     Image local date and time : 2019-12-20 09:17:57 +0530
Empezamos lanzando el plugin imageinfo que nos facilitará algunos profiles que podemos usar; vayamos con Win7SP1x64 por ahora, y verifiquemos los procesos en ejecución con pstree.
$ vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 pstree
Volatility Foundation Volatility Framework 2.6.1
Name                                                  Pid   PPid   Thds   Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
 0xfffffa8001c7c060:wininit.exe                       428    312      3     75 2019-12-20 03:41:48 UTC+0000
. 0xfffffa8001c7bb30:services.exe                     484    428      8    213 2019-12-20 03:41:50 UTC+0000
.. 0xfffffa8001f93b30:TCPSVCS.EXE                    1416    484      4     97 2019-12-20 03:42:13 UTC+0000
.. 0xfffffa8001d4cb30:VBoxService.ex                  656    484     13    135 2019-12-20 03:41:55 UTC+0000
.. 0xfffffa8001e6c700:svchost.exe                    1044    484     16    381 2019-12-20 03:42:04 UTC+0000
.. 0xfffffa800109f060:svchost.exe                    2632    484      7     82 2019-12-20 03:47:54 UTC+0000
... 0xfffffa8000efbb30:WerFault.exe                   780   2632      7    160 2019-12-20 03:48:01 UTC+0000
... 0xfffffa8000ee8060:WerFault.exe                  2716   2632      8    161 2019-12-20 03:47:54 UTC+0000
... 0xfffffa8000f05b30:WerFault.exe                  2168   2632      7 15...4 2019-12-20 03:48:15 UTC+0000
.. 0xfffffa8001dc2b30:svchost.exe                     880    484     33    983 2019-12-20 03:41:58 UTC+0000
... 0xfffffa8002117b30:taskeng.exe                   1140    880      4     79 2019-12-20 03:43:19 UTC+0000
.. 0xfffffa8001dbf350:taskhost.exe                   2012    484      8    189 2019-12-20 03:43:19 UTC+0000
.. 0xfffffa800222d7a0:SearchIndexer.                 1800    484     13    710 2019-12-20 03:43:36 UTC+0000
... 0xfffffa8000f63060:SearchFilterHo                2608   1800      5     78 2019-12-20 03:46:41 UTC+0000
... 0xfffffa8000ea7b30:SearchProtocol                 628   1800      6    270 2019-12-20 03:46:41 UTC+0000
.. 0xfffffa80022a9b30:wmpnetwk.exe                   1928    484     16    510 2019-12-20 03:43:40 UTC+0000
.. 0xfffffa8001da1240:svchost.exe                     820    484     23    590 2019-12-20 03:41:57 UTC+0000
... 0xfffffa8000cf5b30:audiodg.exe                    968    820      6    131 2019-12-20 03:42:00 UTC+0000
.. 0xfffffa8001efbb30:svchost.exe                    1272    484     19    307 2019-12-20 03:42:10 UTC+0000
.. 0xfffffa8001ce6b30:svchost.exe                     588    484     10    357 2019-12-20 03:41:54 UTC+0000
... 0xfffffa8001c3e910:WmiPrvSE.exe                  2572    588      6    109 2019-12-20 03:43:56 UTC+0000
... 0xfffffa8000f27b30:dllhost.exe                    668    588      8    149 2019-12-20 03:46:37 UTC+0000
.. 0xfffffa8001ee1060:spoolsv.exe                    1232    484     13    283 2019-12-20 03:42:09 UTC+0000
.. 0xfffffa8001d63b30:svchost.exe                     724    484      8    282 2019-12-20 03:41:56 UTC+0000
.. 0xfffffa8001dba060:svchost.exe                     856    484     28    535 2019-12-20 03:41:58 UTC+0000
... 0xfffffa8002170b30:dwm.exe                       1172    856      5     71 2019-12-20 03:43:19 UTC+0000
... 0xfffffa8000fb34d0:dwm.exe                       2360    856      5     71 2019-12-20 03:46:49 UTC+0000
.. 0xfffffa8001f775f0:svchost.exe                    1372    484     22    303 2019-12-20 03:42:12 UTC+0000
.. 0xfffffa8001ec57c0:svchost.exe                    2296    484      9    355 2019-12-20 03:43:45 UTC+0000
.. 0xfffffa8000fcd8e0:taskhost.exe                   1968    484      9    150 2019-12-20 03:46:49 UTC+0000
.. 0xfffffa80014a6390:svchost.exe                    1128    484     13    315 2019-12-20 03:44:31 UTC+0000
.. 0xfffffa8001e1cb30:svchost.exe                     340    484     22    504 2019-12-20 03:42:03 UTC+0000
.. 0xfffffa800209b760:sppsvc.exe                     2940    484      4    141 2019-12-20 03:44:24 UTC+0000
. 0xfffffa8001cb9880:lsass.exe                        492    428      9    761 2019-12-20 03:41:50 UTC+0000
. 0xfffffa8001cbc4a0:lsm.exe                          500    428     10    171 2019-12-20 03:41:50 UTC+0000
 0xfffffa8000d96b30:csrss.exe                         320    312     10    471 2019-12-20 03:41:45 UTC+0000
 0xfffffa8000ca0040:System                              4      0     80    562 2019-12-20 03:41:40 UTC+0000
. 0xfffffa80014b9040:smss.exe                         248      4      3     37 2019-12-20 03:41:40 UTC+0000
.. 0xfffffa8001c6b060:psxss.exe                       376    248     18    786 2019-12-20 03:41:47 UTC+0000
 0xfffffa80010213d0:explorer.exe                     1580   2256     40   1007 2019-12-20 03:46:49 UTC+0000
. 0xfffffa800108cb30:NOTEPAD.EXE                     2724   1580      1     39 2019-12-20 03:47:53 UTC+0000
. 0xfffffa8000f02b30:NOTEPAD.EXE                     2056   1580      1    226 2019-12-20 03:48:15 UTC+0000
. 0xfffffa8000eeb060:DumpIt.exe                      2208   1580      2     45 2019-12-20 03:47:39 UTC+0000
. 0xfffffa800221ab30:NOTEPAD.EXE                     1388   1580      1     39 2019-12-20 03:48:00 UTC+0000
. 0xfffffa800105ab30:VBoxTray.exe                    2144   1580     13    138 2019-12-20 03:46:50 UTC+0000
. 0xfffffa80010b8060:notepad.exe                     2744   1580      1     57 2019-12-20 03:47:21 UTC+0000
. 0xfffffa8000f97a20:WinRAR.exe                      2924   1580      6    210 2019-12-20 03:47:13 UTC+0000
 0xfffffa8001c775a0:winlogon.exe                      416    360      3    108 2019-12-20 03:41:48 UTC+0000
 0xfffffa8001c5d060:csrss.exe                         368    360      8    173 2019-12-20 03:41:47 UTC+0000
 0xfffffa8000f82060:winlogon.exe                     2120    364      4    113 2019-12-20 03:46:42 UTC+0000
 0xfffffa8000f7a630:csrss.exe                        1988    364      7    219 2019-12-20 03:46:42 UTC+0000
. 0xfffffa8000eab790:conhost.exe                     2612   1988      2     51 2019-12-20 03:47:40 UTC+0000
 0xfffffa8002198b30:explorer.exe                     1396   1180     30    758 2019-12-20 03:43:19 UTC+0000
. 0xfffffa8002206890:VBoxTray.exe                     528   1396     12    139 2019-12-20 03:43:25 UTC+0000
Del listado de procesos llama la atención el uso de WinRAR. Mediante el plugin cmdline podremos ver los argumentos de la línea de comandos que se pasaron y por lo tanto el fichero que intentó descomprimirse en su momento:
$ vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 cmdline -p 2924
Volatility Foundation Volatility Framework 2.6.1
************************************************************************
WinRAR.exe pid:   2924
Command line : "C:\Program Files\WinRAR\WinRAR.exe" "C:\Users\SmartNet\Documents\SW1wb3J0YW50.rar"
¿Será el fichero comprimido malware? Usando los complementos filescan y dumpfiles podemos extraer este archivo de la imagen de la memoria.
$ vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 filescan > filescan.txt
$ grep -E 'SW1wb3J0YW50.rar$' filescan.txt
0x000000003eed56f0      1      0 R--r-- \Device\HarddiskVolume2\Users\SmartNet\Documents\SW1wb3J0YW50.rar

$ vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003eed56f0 -D . -n
Volatility Foundation Volatility Framework 2.6.1
DataSectionObject 0x3eed56f0   None   \Device\HarddiskVolume2\Users\SmartNet\Documents\SW1wb3J0YW50.rar
Ahora tenemos el rar:
$ file file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat 
file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat: RAR archive data, v5
$ unrar e file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat

UNRAR 5.50 freeware      Copyright (c) 1993-2017 Alexander Roshal


Extracting from file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat

Enter password (will not be echoed) for Stage2.png: 

The specified password is incorrect.
Pero no la contraseña, así que tendremos que encontrarla de alguna otra forma. Brujuleando con el plugin iehistory vemos que se intentaron abrir varias veces un fichero bmp con un nombre en base64:
$ volatility -f MemoryDump_Lab5.raw --profile Win7SP1x64 iehistory | more
..........
**************************************************
Process: 1396 explorer.exe
Cache type "URL " at 0x28c5900
Record length: 0x100
Location: Visited: Alissa Simpson@file:///C:/Users/Alissa%20Simpson/Pictures/ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfM19EMG4zXyEhfQ.bmp
Last modified: 2019-12-19 08:35:18 UTC+0000
Last accessed: 2019-12-19 08:35:18 UTC+0000
File Offset: 0x100, Data Offset: 0x0, Data Length: 0xec
**************************************************
Process: 1396 explorer.exe
Cache type "URL " at 0x28c5a00
Record length: 0x100
Location: Visited: Alissa Simpson@file:///C:/Users/Alissa%20Simpson/Pictures/ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfNV9EMG4zXyEhfQ.bmp
Last modified: 2019-12-20 03:46:09 UTC+0000
Last accessed: 2019-12-20 03:46:09 UTC+0000
File Offset: 0x100, Data Offset: 0x0, Data Length: 0xec
**************************************************
Process: 1396 explorer.exe
Cache type "URL " at 0x28c5b00
Record length: 0x100
Location: Visited: Alissa Simpson@file:///C:/Users/SmartNet/SW1wb3J0YW50.rar
Last modified: 2019-12-19 08:36:16 UTC+0000
Last accessed: 2019-12-19 08:36:16 UTC+0000
File Offset: 0x100, Data Offset: 0x0, Data Length: 0xac
**************************************************
Process: 1396 explorer.exe
Cache type "URL " at 0x28c5c00
Record length: 0x100
Location: Visited: Alissa Simpson@file:///C:/Windows/AppPatch/ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfNV9EMG4zXyEhfQ.bmp
Last modified: 2019-12-20 03:46:37 UTC+0000
Last accessed: 2019-12-20 03:46:37 UTC+0000
File Offset: 0x100, Data Offset: 0x0, Data Length: 0xdc
**************************************************
............

Como veis, ese base64 nos llevará a la primera flag:

$ echo ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfM19EMG4zXyEhfQ | base64 -d
flag{!!_w3LL_d0n3_St4g3-1_0f_L4B_3_D0n3_!!}base64: invalid input
Que a la postre, resultará ser la password también del .rar (recordar cambiar el L4B_3 por L4B_5 tal y como se indicaba en la descripción):
$ unrar e file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat

UNRAR 5.50 freeware      Copyright (c) 1993-2017 Alexander Roshal


Extracting from file.None.0xfffffa80010b44f0.SW1wb3J0YW50.rar.dat

Enter password (will not be echoed) for Stage2.png: 

Extracting  Stage2.png                                                OK 
All OK

Y ya tenemos la segunda flag.

Bonus

Otra forma de obtener el base64 era a través del plugin screenshot que, como su nombre indica, nos permite ver lo que se mostraba en el escritorio en el momento en que se realizó el volcado de memoria. Bueno, realmente las capturas de pantalla muestran las posiciones y los títulos de las ventanas sólo. Pero veréis que es suficiente:

$ vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 screenshot -D output/
Volatility Foundation Volatility Framework 2.6.1
Wrote output/session_0.WinSta0.Default.png
Wrote output/session_0.WinSta0.Disconnect.png
Wrote output/session_0.WinSta0.Winlogon.png
Wrote output/session_0.Service-0x0-3e7$.Default.png
Wrote output/session_0.Service-0x0-3e4$.Default.png
Wrote output/session_0.Service-0x0-3e5$.Default.png
Wrote output/session_0.msswindowstation.mssrestricteddesk.png
Wrote output/session_1.WinSta0.Default.png
Wrote output/session_1.WinSta0.Disconnect.png
Wrote output/session_1.WinSta0.Winlogon.png
Wrote output/session_2.WinSta0.Default.png
Wrote output/session_2.WinSta0.Disconnect.png
Wrote output/session_2.WinSta0.Winlogon.png

la mayoría de las imágenees están vacías, pero una (session_1.WinSta0.Default.png) nos muestra que Windows Photo Viewer estaba mostrando el archivo con el nombre de archivo base64: 


Y la tercera flag?

Pues la imagen obtenida del rar decía que esa era la flag final mientras que la descripción del reto nos decía que había una tercera... Al momento de escribir este post todavía ando buscando por si acaso... ;)


Comentarios