hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/README.md
2023-06-03 01:46:23 +00:00

14 KiB

Particiones/Sistemas de archivos/Carving

Particiones

Un disco duro o un SSD puede contener diferentes particiones con el objetivo de separar físicamente los datos.
La unidad mínima de un disco es el sector (normalmente compuesto por 512B). Por lo tanto, el tamaño de cada partición debe ser múltiplo de ese tamaño.

MBR (Registro de arranque principal)

Se encuentra en el primer sector del disco después de los 446B del código de arranque. Este sector es esencial para indicar a la PC qué y desde dónde se debe montar una partición.
Permite hasta 4 particiones (como máximo solo 1 puede estar activa/arrancable). Sin embargo, si necesita más particiones, puede usar particiones extendidas. El último byte de este primer sector es la firma del registro de arranque 0x55AA. Solo se puede marcar una partición como activa.
MBR permite máximo 2.2TB.

Desde los bytes 440 a 443 del MBR, se puede encontrar la Firma de disco de Windows (si se usa Windows). La letra de unidad lógica del disco duro depende de la Firma de disco de Windows. Cambiar esta firma podría evitar que Windows se inicie (herramienta: Active Disk Editor).

Formato

Offset Longitud Elemento
0 (0x00) 446(0x1BE) Código de arranque
446 (0x1BE) 16 (0x10) Primera partición
462 (0x1CE) 16 (0x10) Segunda partición
478 (0x1DE) 16 (0x10) Tercera partición
494 (0x1EE) 16 (0x10) Cuarta partición
510 (0x1FE) 2 (0x2) Firma 0x55 0xAA

Formato de registro de partición

Offset Longitud Elemento
0 (0x00) 1 (0x01) Bandera activa (0x80 = arrancable)
1 (0x01) 1 (0x01) Cabeza de inicio
2 (0x02) 1 (0x01) Sector de inicio (bits 0-5); bits superiores del cilindro (6-7)
3 (0x03) 1 (0x01) Bits más bajos del cilindro de inicio
4 (0x04) 1 (0x01) Código de tipo de partición (0x83 = Linux)
5 (0x05) 1 (0x01) Cabeza final
6 (0x06) 1 (0x01) Sector final (bits 0-5); bits superiores del cilindro (6-7)
7 (0x07) 1 (0x01) Bits más bajos del cilindro final
8 (0x08) 4 (0x04) Sectores anteriores a la partición (poco endian)
12 (0x0C) 4 (0x04) Sectores en la partición

Para montar un MBR en Linux, primero debe obtener el desplazamiento de inicio (puede usar fdisk y el comando p)

Y luego use el siguiente código

#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/

LBA (Dirección lógica de bloques)

La dirección lógica de bloques (LBA) es un esquema común utilizado para especificar la ubicación de bloques de datos almacenados en dispositivos de almacenamiento de computadoras, generalmente sistemas de almacenamiento secundario como discos duros. LBA es un esquema de direccionamiento lineal particularmente simple; los bloques se ubican por un índice entero, siendo el primer bloque LBA 0, el segundo LBA 1, y así sucesivamente.

GPT (Tabla de particiones GUID)

Se llama Tabla de particiones GUID porque cada partición en su disco tiene un identificador único global.

Al igual que MBR, comienza en el sector 0. El MBR ocupa 32 bits mientras que GPT usa 64 bits.
GPT permite hasta 128 particiones en Windows y hasta 9.4ZB.
Además, las particiones pueden tener un nombre Unicode de 36 caracteres.

En un disco MBR, la partición y los datos de arranque se almacenan en un solo lugar. Si estos datos se sobrescriben o se corrompen, estás en problemas. En contraste, GPT almacena múltiples copias de estos datos en todo el disco, por lo que es mucho más robusto y puede recuperarse si los datos están corruptos.

GPT también almacena valores de verificación de redundancia cíclica (CRC) para verificar que sus datos estén intactos. Si los datos están corruptos, GPT puede detectar el problema e intentar recuperar los datos dañados desde otra ubicación en el disco.

MBR protector (LBA0)

Para una compatibilidad limitada hacia atrás, el espacio del MBR heredado todavía se reserva en la especificación GPT, pero ahora se usa de una manera que evita que las utilidades de disco basadas en MBR reconozcan y posiblemente sobrescriban discos GPT. Esto se conoce como un MBR protector.

MBR híbrido (LBA 0 + GPT)

En los sistemas operativos que admiten el arranque basado en GPT a través de servicios BIOS en lugar de EFI, el primer sector también puede seguir utilizándose para almacenar la primera etapa del código del cargador de arranque, pero modificado para reconocer particiones GPT. El cargador de arranque en el MBR no debe asumir un tamaño de sector de 512 bytes.

Encabezado de tabla de particiones (LBA 1)

El encabezado de la tabla de particiones define los bloques utilizables en el disco. También define el número y el tamaño de las entradas de partición que conforman la tabla de particiones (desplazamientos 80 y 84 en la tabla).

Desplazamiento Longitud Contenido
0 (0x00) 8 bytes Firma ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h o 0x5452415020494645ULL en máquinas de ordenamiento pequeñas)
8 (0x08) 4 bytes Revisión 1.0 (00h 00h 01h 00h) para UEFI 2.8
12 (0x0C) 4 bytes Tamaño del encabezado en little endian (en bytes, generalmente 5Ch 00h 00h 00h o 92 bytes)
16 (0x10) 4 bytes CRC32 del encabezado (desplazamiento +0 hasta el tamaño del encabezado) en little endian, con este campo en cero durante el cálculo.
20 (0x14) 4 bytes Reservado; debe ser cero
24 (0x18) 8 bytes LBA actual (ubicación de esta copia de encabezado)
32 (0x20) 8 bytes LBA de respaldo (ubicación de la otra copia de encabezado)
40 (0x28) 8 bytes Primer LBA utilizable para particiones (último LBA de la tabla de particiones primaria + 1)
48 (0x30) 8 bytes Último LBA utilizable (primer LBA de la tabla de particiones secundaria - 1)
56 (0x38) 16 bytes GUID de disco en endian mixto
72 (0x48) 8 bytes LBA de inicio de una matriz de entradas de partición (siempre 2 en la copia primaria)
80 (0x50) 4 bytes Número de entradas de partición en la matriz
84 (0x54) 4 bytes Tamaño de una sola entrada de partición (generalmente 80h o 128)
88 (0x58) 4 bytes CRC32 de la matriz de entradas de partición en little endian
92 (0x5C) * Reservado; debe ser cero para el resto del bloque (420 bytes para un tamaño de sector de 512 bytes; pero puede ser más con tamaños de sector más grandes)

Entradas de partición (LBA 2-33)

Formato de entrada de partición GUID

Tallado de archivos

El tallado de archivos es una técnica que intenta encontrar archivos en un gran volumen de datos. Hay 3 formas principales en las que funcionan las herramientas de este tipo: basadas en encabezados y pies de página de tipos de archivo, basadas en estructuras de tipos de archivo y basadas en el contenido en sí.

Tenga en cuenta que esta técnica no funciona para recuperar archivos fragmentados. Si un archivo no se almacena en sectores contiguos, entonces esta técnica no podrá encontrarlo o al menos parte de él.

Hay varias herramientas que se pueden utilizar para el tallado de archivos indicando los tipos de archivo que se desean buscar.

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

Tallado de flujos de datos

El tallado de flujos de datos es similar al tallado de archivos, pero en lugar de buscar archivos completos, busca fragmentos interesantes de información. Por ejemplo, en lugar de buscar un archivo completo que contenga URL registradas, esta técnica buscará URL.

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

Eliminación segura

Obviamente, hay formas de eliminar "seguramente" archivos y parte de los registros sobre ellos. Por ejemplo, es posible sobrescribir el contenido de un archivo con datos basura varias veces, y luego eliminar los registros del $MFT y $LOGFILE sobre el archivo, y eliminar las copias de seguridad de instantáneas de volumen.
Es posible que note que incluso al realizar esa acción, puede haber otras partes donde todavía se registra la existencia del archivo, y eso es cierto y parte del trabajo profesional de la informática forense es encontrarlos.

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥