lunes, 1 de diciembre de 2014

Identificando y montando en Linux, particiones NTFS que Windows no puede ver

Existen varias ocasiones en que no podemos ver el contenido de un disco, esto me ha pasado varias veces e inclusive a bu5t3r5 y a mi nos paso una vez cuando realizamos una adquisición forense y realizamos la imagen correspondiente.

¿Cuando he notado el problema?


Principalmente lo he notado al usar duplicadores forenses en hardware. (TD2 y Dossier), y herramientas forenses como EnCase o FTK no son capaces de ver la información.

¿Por que sucede?



MI TEORIA ES: Este problema se sucita por que el duplicador forense (Hablando de lo que vi con Tableau TD2) antes de realizar la imagen forense, FORMATEA el disco destino y al hacer esto deja el disco en este modo:
MBR -> GPT -> EFI -> NTFS
Y lo que uno esperaria ver seria MBR -> NTFS (Y AÚN ASI NO DEBERIA SER PROBLEMA). Y a veces no es este el caso...
Bien, sea cual sea el caso si al ingresar un dispositivo de almacenamiento masivo les aparece este mensaje:




Y si en el Administrador de discos ven la partición como RAW (Pero ustedes están seguros que el Dispositivo tiene información en una partición existente).
Entonces es hora de verlo con otros ojos, o en este caso, con otro Sistema Operativo....

Escenario:
  • SO de investigación: DEFT/SIFT/KALI/CAINE
  • Disco: 1 Tb

Cuatro sencillos pasos para montar identificar y montar particiones en linux.


1.- Identificar físicamente los dispositivos conectados


Lo primero es conectar el disco y verificar que sea visible por el sistema. Para esto podemos hacer 3 pruebas:

Con el comando "fdisk -l" podemos listar los discos que nuestro kernel alcanza a ver. y sus particiones.


Vemos que nuestro disco esta físicamente en "/dev/sdc". Los otros dos comandos de los cuales podemos ayudarnos son; "lsblk" que nos lista las particiones y "dmesg" que nos muestra los mensajes del kernel.

2.- Identificar el tamaño del Sector


Un sector es una unidad de medición que contendrá cierto numero de bytes que normalmente ira de 2^9=512 en adelante, siendo lo mas normal que un sector sea de 512, 1024, 2048 o 4096.

Para nosotros es trascendental saber el tamaño del sector puesto que en el primer sector es donde se contendrá la MBR que nos dirá en donde están las particiones y los cálculos que se hagan para localizarlas, dependerán del tamaño del sector.

Una de las formas mas burdas y fáciles de detectar el tamaño del sector es exactamente pidiendo el primer sector y viendo si al final del sector existe la firma con la que termina la MBR (0xAA55). Para esta tarea puedo hacer uso de "dd" o "dcfldd" o cualquier variante y "pipearlo"(Palabreja que me acabo de inventar XD) a un visor hexadecimal.

dd/dcfldd y variantes tienen la flexibilidad de poder especificarle que:
count=1       Nos muestre SOLO UN sector
bs=**          De tal tamaño
if=/dev/***   De nuestro dispositivo físico
Y es el valor de "bs" con el que jugaremos poniendo los diferentes valores (512,1024,2048,4096). Y donde veamos al final en los ultimos dos bytes del sector la firma 0xAA55, es ese el tamaño correcto de nuestro sector.


En este caso vemos que nuestro tamaño de sector es de 512 (que es lo mas común en discos de 1Tb y menores).

3.- Identificar sector inicial de la partición que queremos montar (NTFS en este caso)


Para identificar el sector inicial, no hay herramienta que me guste más que "mmls" de la suite de TSK (The Sleuth Kit). Simplemente hay que pasarle como argumento la locación física del disco.

También "fdisk -l" nos dice donde esta el sector.


Nuestro sector de la partición NTFS está en el sector 64.

3.9999.- Calculando Byte offset correcto (From sector to Byte).


Para montar nuestra partición haremos uso de "mount" con algunas opciones interesantes. Este comando tiene la grandiosa funcionalidad de que podemos montar una partición a dado offset. Osea que podemos decirle en que byte exactamente inicia nuestra partición.

Sin embargo nosotros encontramos el SECTOR donde inicia la partición, no el BYTE. Por ello haremos un simple cálculo para obtener el byte y poder pasarselo a mount. Nuestra fórmula de conversión es:

Byteoffset = Sector * Sector_size

Nuestro Byte donde inicia la partición NTFS es: 32768.

4.- Montando nuestra partición dado el offset correcto.


Ahora si para montar haremos uso de:
mount -t ### -o ro,offset=### /dev/** /mnt/
Donde:
-t ##               Se especifica el tipo de Sistema de archivos (ntfs en este caso)
-o ro               Se monta en solo lectura el Sistema de archivos
-o offset=###   Se especifica el byte donde inicia la partición.
/dev/**            Es nuestro dispositivo físico a montar
/mnt/               Nuestro punto de montaje (La carpeta VACIA donde se montara)

Vemos que le pasamos todos los argumentos y si vemos posteriormente que tenemos montado, ya vemos nuestro sistema de archivos NTFS montado con permisos de solo lectura.

Y ya podemos ver nuestro disco de 1Tb Montado.

EXTRA:

Desmontanto: Con "umount" podemos desmontar, pasando como argumento, el disco físico o la carpeta.

Resumen de comandos:
1.- fdisk -l
2.- dcfldd if=/dev/sd# count=1 bs=# | xxd | tail -3
3.- mmls /dev/sd#
3.9.- echo $((sector*sector_size))
4.- mount -t ## -o ro,offset=## /dev/sd# /mnt/

Como ya habrán imaginado esta tarea se puede automatizar rápidamente, hay mucha teoria que podriamos tratar, desde calcular directamente el offset y tipo de la partición desde la MBR, si una usb tiene MBR o VBR, que es la VBR, por que si hay GPT existe la MBR, etc... Si estan interesados pueden comentarnos y abordaremos con gusto el tema, así mismo cualquier duda nos pueden comentar, mandar correo o por twitter.

Espero les agrade la entrada y les ayude para esos discos difíciles, y no se rindan y le den al botón de "Formatear disco" (seria mas difícil encontrar la partición) nada mas. Y que, herramientas tan sofisticadas y caras como EnCase o FTK no la vean, no significa no se pueda de otras maneras.

¡Saludos!

No hay comentarios.:

Publicar un comentario

Déjanos tu opinion