Análisis Forense de Volúmenes NTFS Roberto Arbeláez, M.Sc, CISSP, CISA, PMP Security Program Manager for Latin America CSS Security Microsoft Corp. roberto.arbelaez@microsoft.com
Terminología Bit Bt Byte Sector Cluster Volúmen Partición Página Bloque Bloque lógico Cluster Lógico
Bloques estructurales de NTFS Bits Bytes Sector: El contenedor más básico para referenciar datos en un disco (variable en tamaño depende del violúmen, pero usualmente es de 512 bytes) Cluster: La cantidad más pequeña de espacio en Disco que puede asignarse para almacenar un archivo (usualmente 4 u 8 KB, se puede configurar durante el formato).
Clusters Físicos y Lógicos Los clusters virtuales representan clusters contíguos para archivos, aunque físicamente puedan estar fragmentados (existen en el contexto de la memoria)
Componentes esenciales de un Drive MBR (Master Boot Record) Tabla de Partición GPT (Partición GUID) Sector de Arranque (Bloque de parámetros del BIOS) MFT (Master File Table)
Versiones de NTFS v1.0, 10 con NT 31 3.1 v1.1, con NT 3.5 v1.2, com NT 3.51 v3.0, con Windows 2000 v3.1 31de Windows XP a Windows 7
Un sistema de archivos con muchas características Data Streams alternos Sparsep Files Reparse Points Hard Links Volume Shadow Copy Compresión de archivos Encripción de Archivos Sistema de Archivos Transaccional (Vista y posteriores) Journaling
Qué existe en el bloque Cero? Depende Disco Físico MBR, incluyendo Master Boot Code y la Tabla de Partición Disco Lógico Debe existir un Sector de Arranque para poder «montar» el volúmen El sector de arranque contiene el BPB (BIOS Parameter Block) que ayuda a la máquina a arrancar del volúmen si este está configurado para arrancar
Arquitectura de NTFS
Organización ió de un Di Drive NTFS
MBR
MBR (2)
Tabla de Particiones 16 bytes para cada una de las 4 posibles particiones
MBR Tabla de Particiones
Organización de los Volúmenes
El Sector de Arranque del Volúmen Conocido como «boot sector»
Registro de Arranque del Volúmen
Registro de Arranque del Volúmen en WinHex
Bloque de Parámetros del BIOS (BPB) Define metadatos sobre el volúmen Bytes opor sector Sectores por clúster Typo de disco Sectores Totales Donde encontrar el MFT Clusters por registro del MFT Número serial del volúmen
BPB
BPB(2)
Introducción a $MFT Master File Table Un arreglo plano de registros MFT de longitud fija (típicamente t 1KB). Todo es un archivo en el MFT NTFS.sys crea la abstracción bt folders/tree para el usuario final Offset Size Description 0x00B 2 BPS=Bytes per sector 0x00D 1 SPC=Sectors per Cluster 0x030 8 MFT Offset (in Clusters)
Ubicando el MFT durante el arranque Master Boot Record (MBR) Partition 1 (Active, System) Partition TableTable Boot Sector \Boot\BCD \Windows\System32\ Winload.exe Boot Code (15 sectors) $MFT \bootmgr
Archivos especiales de NTFS (1) Indice Nombre Descripción 0x00 $MFT Master File Table Un índice de cada archivo 0x01 $MFTMirr Una copia de respaldo de los 4 primeros registros del MFT 0x02 $LogFile Archivo de registro transaccional 0x03 $Volume Numero de serie, tiempo de creación, bandera sucia (dirty flag) 0x04 $AttrDef Definiciones de Atributos 0x05 \ Directorio raíz del disco 0x06 $Bitmap El mapa de clusters del volúmen (en uso vs. libre) 0x07 $Boot Arranque (boot record) del volúmen
Archivos especiales de NTFS (2) Indice Nombre Descripción 0x08 $BadClus Lista clusters dañados en el volúmen 0x09 $Secure Descriptores de seguridad usados por el volúmen 0x0A $UpCase Tabla de caracteres en mayúsculas usados para cotejar 0x0B $Extend Directorio: $ObjId, $Quota, $Reparse, $UsnJrnl 0x0C-0x0F <Unused> Marcado como en uso pero vacío Any $ObjId Identificador d úi único dd dado a cada archivo Any $Quota Información de cuota Nota: Detalles específicos de NT4/2000 omitidos por claridad
Archivos especiales de NTFS (3) Indice Nombre Descripción Any $Reparse Información de Punto de Reparse Any $UsnJrnl Journalling Legible >16 A_File Un archivo ordinario (pero, típicamente >24) >16 A_ Dir Un directorio ordinario (pero, típicamente >24) Nota: Detalles específicos de NT4/2000 omitidos por claridad
Registros de MFT Offset Size Description MFT Record FILE Header Attributes $STANDARD_INFORMATION $FILE _ NAME $DATA 0x04 2 Offset to the Update Sequence 0x06 2 Size of the Update Sequence&Array 0x08 8 $LogFile Seq. Number 0x10 2 Sequence Number 0x12 2 Hard link Count 0x14 2 Offset to First Attribute 0x16 2 Flags (InUse, Directory) 0x18 4 Size of record 0x1C 4 Allocated Size (i.e. MFT record size) 0x20 8 Base Record reference 0x28 2 Reserved 0x2A 0x2C 4 2 This record s reference number
$STANDARD_INFORMATION Offset Size Description 0x00 8 C Time - File Creation 0x08 8 A Time - File Altered 0x10 8 M Time - MFT Changed 0x18 8 R Time - File Read 0x20 4 DOS File Permissions 0x24 4 Maximum Number of Versions 0x28 4 Version Number 0x2C 4 Class Id 0x30 4 Owner Id 0x34 4 Security Id 0x38 8 Quota Charged 0x40 8 Update Sequence Number (USN)
$FILE_NAME Offset Size Description 0x00 8 File reference to the parent directory. 0x08 8 C Time File Creation 0x10 8 A Time File Altered 0x18 8 M Time MFT Changed 0x20 8 R Time File Read 0x28 8 Allocated size of the file 0x30 8 Real size of the file 0x38 4 Flags, e.g. Posix, Dos, Win32 0x3C 4 reserved 0x40 1 Filename length in characters (L) 0x41 1 Filename starts here
Atributos residentes/no residentes MFT Record 0 Resident Attributes: Data is inside the record Record 1 Attributes Data Non Resident Attributes: Dt Data ison disk outsideof tid MFT Record N DataRunsof Attrs AttributesData
Encabezado de Atributos Residentes MFT Attribute Offset Size Description 0x00 4 Attribute Type Code Header 0x04 4 Length (incl. Header) 0x08 1 Form Code (Resident/NonResident) 0x09 1 Name Length (can be 0) Attribute s specifics 0x0A 2 Offset to the Name 0x0C 2 Flags (Compressed, Encryted,Sparse) 0x0E 2 AttributeID 0x10 4 Attribute s length 0x14 2 Offset to attribute 0x16 1 Indexed flag
Encabezado de Atributos no Residentes Offset Size Description MFT Attribute Header 0x00 4 Attribute Type Code 0x04 4 Length (incl. Header) 0x08 1 Form Code (Resident/NonResident) 0x09 1 Name Length (can be 0) 0x0A 2 Offset to the Name Attribute s t dt data runs 0x0C 2 Flags (Compressed, Encryted,Sparse) 0x0E 2 AttributeID 0x10 8 Starting VCN 0x18 8 Last VCN 0x20 2 Offset to DataRuns.
$DATA (Residente) Los datos son el atributo El tamaño de los datos son el tamaño del atributo
$DATA (No Residente) Las formas no residentes de $Data son típicas de atributos no residentes. Los datos son la suma de los data runs Los Data Runs son almacenados de manera comprimida Offset (in nibble) Size (in nibble) Description 0 1 F=Sizeof the Offset field 1 1 L=Size of the Length field 2 2*L Length 2+2*L 2*F Offset to the beginning of previous Run (signed)
Data Runs MFT Record FILE Header Attributes $STANDARD_INFORMATION $FILE_NAME $DATA Data Run #1 Data Run #2 Data Run #3 Data stored in disk clusters Hello World 1!!! Hello World 2!!! Hello World 3!!!.. Hello World 7!!! Hello World 8!!! Hello World 9!!!.. Hello World 4!!! Hello World 5!!! Hello World 6!!!..
Data Runs 21 20 ED 05 22 48 07 48 22 21 28 C8 DB Sizeof Length Sizeof Length Sizeof Length Sizeof Offset Sizeof Offset Sizeof Offset Run # Sizeof Run Offset to Previous 1st Cluster of Cluster 1 0x0020 +0x05ED 0x0000+0x05ED = 0x05ED 2 0x0748 +0x2248 0x05ED+0x2248 = 0x2835 3 0x0028 +0xDBC8 0x2835+0xDBC8 = 0x03FD
USN Journal Metadatos (relacionados con el MFT) actualizados en orden Con estampillas de tiempo (timestamps)! Tracks: k Creación Borrado Truncado Cierre de Handles Otros
USN Journal #2 Habilitados por defecto desde Windows Vista (desabilitados por defecto en 2000/XP/2003) / Pueden ser habilitados desde Windows 2000 usando: fsutil usn createjournal tj m=1000 a=100 C:
MFT Record FILE Header Attributes $STANDARD_INFORMATION Shape Stock $DATA $INDEX_ALLOCATION $OBJECT_ID MFT Attribute Header Attribute s specifics $FILE_NAME $ATTRIBUTE_LIST $ATTRIBUTE_LIST
Preguntas?