
Analizador para $LogFile en NTFS
Características Decodificar y volcar registros de $LogFile y entradas de transacción. Decodificar cambios de atributos NTFS. Opcionalmente resolver toda la información de la lista de dataruns disponible en $LogFile. Opción: "Reconstruct data runs". Recuperar transacciones del espacio slack dentro de $LogFile. Elegir reconstruir encabezados faltantes o dañados de transacciones encontradas en slack. Opción: "Rebuild header". Opcionalmente también afinar el resultado con un valor de nivel de error de LSN. Opción: "LSN error level". Registra en csv e importa a base de datos sqlite con varias tablas. Opcionalmente importar la salida csv de mft2csv a la base de datos. Elegir entre 6 formatos de timestamp diferentes. Elegir precisión de timestamp: None, MilliSec y NanoSec. Elegir separador de precisión en milisegundos. Elegir separador de precisión en nanosegundos. Elegir ajuste de región para timestamps. Por defecto se presentan los timestamps en UTC 0.0. Elegir separador de salida. Opción: "Set separator". Salida UNICODE o ANSI configurable. Opción "Unicode". Tamaño de registro MFT configurable (1024 o 4096). Opción "MFT record size". Opcionalmente decodificar transacciones individuales o transacciones parciales (fragmento). Opción de reconstruir RCRD's a partir de una o múltiples transacciones (fragmentos). Opción de configurar $LogFile dañado. Útil con RCRD's carved como entrada. Opción de omitir fixups (para $LogFile dañado, típicamente carved desde memoria). Salida verbose detallada en debug.log. Lista configurable separada por comas de lsn's para activar información ultra verbose sobre transacciones específicas en debug.log. Configuración para SO de 32 bits. Configuración para extracción de datos binarios de actualizaciones de datos residentes. sql autogenerado para importar la salida a base de datos MySql. Opción de omitir todo lo relacionado con sqlite3 para acelerar el parseo total. Modo de línea de comandos opcional. Soporta errorlevel adecuado para scripting por lotes.
Antecedentes NTFS está diseñado como un sistema de archivos recuperable. Esto se logra mediante el registro de todas las transacciones que alteran la estructura del volumen. Así, cualquier cambio a un archivo en el volumen requerirá que algo también se registre en el $LogFile, para que pueda revertirse en caso de fallo del sistema en cualquier momento. Por lo tanto, mucha información se escribe en este archivo, y dado que es circular, significa que las nuevas transacciones sobrescriben registros más antiguos en el archivo. Así, es algo limitado cuánta información histórica puede recuperarse de este archivo. De nuevo, eso dependería del tipo de volumen y del tamaño del $LogFile. En la unidad de sistema de un sistema de uso frecuente, probablemente solo obtendrás unas pocas horas de historial, mientras que un disco externo/secundario con archivos de respaldo probablemente contendría más información histórica. Y un archivo de 2MB contendrá mucho menos historial que uno de 256MB. Entonces, ¿en qué rango de tamaño puede configurarse este archivo? Cualquier cosa desde 256 KB en adelante. Configurar el tamaño a 2 GB puede hacerse así, "chkdsk D: /L:2097152". Cómo un archivo de registro de gran tamaño impacta en el rendimiento está fuera del alcance de este texto. Establecerlo por debajo de 2048 normalmente no es posible. Sin embargo, es posible parcheando untfs.dll: http://code.google.com/p/mft2csv/wiki/Tiny_NTFS
Introducción Este parser decodificará y volcará gran cantidad de información de transacciones del $LogFile en NTFS. Se generan varios csv's así como una base de datos sqlite llamada ntfs.db que contiene toda la información relevante. La salida es extremadamente detallada y de muy bajo nivel, lo que significa que requiere cierto conocimiento decente de NTFS para poder entenderla. Los tipos de transacción Redo actualmente manejados con salida decodificada significativa son:
InitializeFileRecordSegment CreateAttribute DeleteAttribute UpdateResidentValue UpdateNonResidentValue UpdateMappingPairs SetNewAttributeSizes AddindexEntryRoot DeleteindexEntryRoot AddIndexEntryAllocation DeleteIndexEntryAllocation WriteEndOfIndexBuffer SetIndexEntryVcnRoot SetIndexEntryVcnAllocation UpdateFileNameRoot UpdateFileNameAllocation SetBitsInNonresidentBitMap ClearBitsInNonresidentBitMap OpenNonresidentAttribute OpenAttributeTableDump AttributeNamesDump DirtyPageTableDump TransactionTableDump UpdateRecordDataRoot UpdateRecordDataAllocation CompensationlogRecord
La lista de atributos actualmente soportados: $STANDARD_INFORMATION $ATTRIBUTE_LIST $FILE_NAME $OBJECT_ID $SECURITY_DESCRIPTOR $VOLUME_NAME $VOLUME_INFORMATION $DATA $INDEX_ROOT $INDEX_ALLOCATION $REPARSE_POINT $EA_INFORMATION $EA $LOGGED_UTILITY_STREAM
Así que básicamente todos los atributos están soportados.
Explicación de las diferentes salidas generadas:
LogFile.csv: El csv principal generado por el parser.
LogFile_DataRuns.csv La información de entrada necesaria para reconstruir dataruns
LogFile_DataRunsResolved.csv La salida final de dataruns reconstruidos
LogFile_INDX_I30.csv Todos los registros de índice volcados y decodificados (IndexRoot/IndexAllocation)
LogFileJoined.csv Igual que LogFile.csv, pero con información de nombre de archivo unida desde el $UsnJrnl o csv de mft2csv.
MFTRecords.bin $MFT ficticio recreado basado en registros MFT encontrados en transacciones InitializeFileRecordSegment. Se puede usar mft2csv sobre este (recuerda configurar "broken MFT" y "Fixups" correctamente).
LogFile_lfUsnJrnl.csv Registros para el $UsnJrnl que han sido decodificados dentro de $LogFile
LogFile_UndoWipe_INDX_I30.csv Todas las operaciones undo para limpieza de índices de directorio (INDX).
LogFile_AllTransactionHeaders.csv Todos los encabezados de transacciones decodificadas.
LogFile_BitsInNonresidentBitMap.csv Todas las operaciones SetBitsInNonresidentBitMap decodificadas.
LogFile_DirtyPageTable32bit.csv y LogFile_DirtyPageTable64bit.csv Todas las entradas en cada operación DirtyPageTableDump decodificada tanto para SO de 32 bits como de 64 bits.
LogFile_Mft_ObjectId_Entries.csv Atributos $ObjectId decodificados.
LogFile_ObjIdO.csv Todas las decodificaciones del archivo de sistema $ObjId:$O.
LogFile_OpenAttributeTable.csv Todas las entradas en cada operación OpenAttributeTableDump decodificada.
LogFile_QuotaO.csv Todas las decodificaciones del archivo de sistema $Quota:$O.
LogFile_QuotaQ.csv Todas las decodificaciones del archivo de sistema $Quota:$Q.
LogFile_RCRD.csv Todos los encabezados de registros RCRD decodificados.
LogFile_ReparseR.csv Todas las decodificaciones del archivo de sistema $Reparse:$R.
LogFile_SecureSDH.csv Todas las decodificaciones del archivo de sistema $Secure:$SDH.
LogFile_SecureSII.csv Todas las decodificaciones del archivo de sistema $Secure:$SII.
LogFile_SecurityDescriptors.csv Descriptores de seguridad decodificados. La fuente puede ser de $SECURITY_DESCRIPTOR o $Secure:$SDS.
LogFile_SlackAttributeNamesDump.csv Todas las entradas de transacciones AttributeNamesDump decodificadas encontradas en espacio slack.
LogFile_SlackOpenAttributeTable.csv Todas las entradas de transacciones OpenAttributeTableDump decodificadas encontradas en espacio slack.
LogFile_TransactionTable.csv Transacciones TransactionTableDump decodificadas.
LogFile_Filenames.csv Todos los nombres de archivo resueltos con MftRef, MftRefSeqNo y Lsn.
LogFile_TxfData.csv Datos decodificados de $DATA:$TXF_DATA en $LOGGED_UTILITY_STREAM.
LogFile_UpdateFileName_I30.csv Todas las decodificaciones de UpdateFileNameRoot y UpdateFileNameAllocation tanto para operaciones redo como undo.
LogFile_CompensationlogRecord.csv Todas las decodificaciones de CompensationlogRecord. No relevante para nt5.x.
Ntfs.db Un archivo de base de datos sqlite con tablas casi equivalentes a los csv's anteriores. La base de datos contiene 5 tablas: DataRuns IndexEntries LogFile LogFileTmp (tabla temporal usada al recrear dataruns). UsnJrnl