Extrayendo la clave de BitLocker (FVEK) en memoria para acceder a un volumen NTFS cifrado

Recientemente se ha publicado un plugin para Volatility que facilita la identificación y extracción de FVEKs (Full Volume Encryption Keys) que pueden ser usadas para descifrar volúmenes BitLocker. Actualmente sólo se soportan imágenes de Windows Vista/7.


En el siguiente ejemplo, el que se muestra en la página del proyecto de Github, se descifrará el binario de una imagen de un disco duro (John_HDD.dd) obteniendo la clave mediante un volcado de memoria del equipo (John_Win7SP1x64.raw).

1) Primero determinamos el offset del volumen cifrado BitLocker. En este caso está en la segunda partición NTFS a partir del sector 718848. Fíjate en la firma "-FVE-FS-".

$ mmls John_HDD.dd
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Primary Table (#0)
01:  -----   0000000000   0000002047   0000002048   Unallocated
02:  00:00   0000002048   0000718847   0000716800   NTFS (0x07)
03:  00:01   0000718848   0031455231   0030736384   NTFS (0x07)
04:  -----   0031455232   0031457279   0000002048   Unallocated
$
$ hexdump -C -s $((718848*512)) -n 16 John_HDD.dd
15f00000  eb 58 90 2d 46 56 45 2d  46 53 2d 00 02 08 00 00  |.X.-FVE-FS-.....|
15f00010

2) Luego usamos el plugin bitlocker para extraer la FVEK. Es conveniente usar el argumento opcional --dump-dir para especificar el directorio en el cual se guardarán el cipher ID (primeros 2 bytes) y la FVEK (64 bytes).

$ export VOLATILITY_LOCATION=file://./John_Win7SP1x64.raw
$ export VOLATILITY_PROFILE=Win7SP1x64
$
$ python vol.py bitlocker --dump-dir ./keys
Volatility Foundation Volatility Framework 2.5

Cipher: AES-128 + Elephant diffuser (0x8000)
FVEK: 2140c8afcbb835127b3b5b97fdcc8b846b7d97fba0c5a2e9dbfef97e263272fa4543af87702c4cee4252eaaa0b7fdc2a96c54aace6e90642a4bbece8afc430c2
FVEK dumped to: ./keys/0xfa80018fe8c0.fvek

3) Finalmente usamos la FVEK extraída para descifrar el volumen usando fuse-dislocker, una utilidad para montar volúmenes BitLocker en Linux.

$ sudo dislocker-fuse -V John_HDD.dd -k ./keys/0xfa80018fe8c0.fvek -o $((718848*512)) -- /mnt/ntfs
$
$ sudo mount -o loop,ro /mnt/ntfs/dislocker-file /mnt/clear
$
$ ls -lh /mnt/clear
total 730M
lrwxrwxrwx 2 root root   60 Jul 14  2009 Documents and Settings -> /mnt/clear/Users
-rwxrwxrwx 1 root root 730M Nov  4 09:39 pagefile.sys
drwxrwxrwx 1 root root    0 Jul 13  2009 PerfLogs
drwxrwxrwx 1 root root 4.0K Nov  4 09:58 ProgramData
drwxrwxrwx 1 root root 4.0K Apr 12  2011 Program Files
drwxrwxrwx 1 root root 4.0K Nov  4 07:01 Program Files (x86)
drwxrwxrwx 1 root root    0 Nov  4 07:04 Recovery
drwxrwxrwx 1 root root    0 Nov  4 09:57 $Recycle.Bin
drwxrwxrwx 1 root root 4.0K Nov  4 07:05 System Volume Information
drwxrwxrwx 1 root root 4.0K Nov  4 09:56 Users
drwxrwxrwx 1 root root  24K Nov  4 09:58 Windows

Fuente: https://github.com/elceef/bitlocker

Comentarios