
Parser per $LogFile su NTFS
Funzionalità Decodifica e dump dei record $LogFile e delle voci di transazione. Decodifica delle modifiche agli attributi NTFS. Risoluzione opzionale di tutte le informazioni della lista datarun disponibili in $LogFile. Opzione: "Reconstruct data runs". Recupero delle transazioni dallo slack space all'interno di $LogFile. Scelta di ricostruire header mancanti o danneggiati delle transazioni trovate nello slack. Opzione: "Rebuild header". Ottimizzazione opzionale del risultato con un valore di livello di errore LSN. Opzione: "LSN error level". Log su csv e importazione in database sqlite con diverse tabelle. Importazione opzionale dell'output csv di mft2csv nel db. Scelta tra 6 diversi formati di timestamp. Scelta della precisione del timestamp: None, MilliSec e NanoSec. Scelta del separatore di precisione a millisec. Scelta del separatore di precisione a nanosec. Scelta della regolazione del fuso orario per i timestamp. Il default è presentare i timestamp in UTC 0.0. Scelta del separatore di output. Opzione: "Set separator". Output configurabile UNICODE o ANSI. Opzione "Unicode". Dimensione del record MFT configurabile (1024 o 4096). Opzione "MFT record size". Decodifica opzionale di singole transazioni o transazioni parziali (frammenti). Opzione per ricostruire RCRD da singole o multiple transazioni (frammenti). Opzione per configurare $LogFile danneggiato. Utile con RCRD carved come input. Opzione per saltare i fixup (per $LogFile danneggiato, tipicamente carved dalla memoria). Output dettagliato verboso in debug.log. Lista configurabile separata da virgole di lsn per attivare informazioni ultra verbose su transazioni specifiche in debug.log. Configurazione per OS a 32-bit. Configurazione per l'estrazione di dati binari degli aggiornamenti di dati residenti. Sql autogenerato per importare l'output in un database MySql. Opzione per saltare tutto il codice sqlite3 per velocizzare il parsing totale. Modalità opzionale da riga di comando. Supporta errorlevel adatto per scripting batch.
Background NTFS è progettato come filesystem recuperabile. Questo avviene tramite il logging di tutte le transazioni che alterano la struttura del volume. Quindi qualsiasi modifica a un file sul volume richiederà che qualcosa venga registrato anche nel $LogFile, in modo che possa essere annullato in caso di guasto del sistema in qualsiasi momento. Pertanto molte informazioni vengono scritte in questo file, e poiché è circolare, significa che le nuove transazioni sovrascrivono i record più vecchi nel file. Quindi è alquanto limitato quanto dato storico può essere recuperato da questo file. Anche in questo caso, dipenderebbe dal tipo di volume e dalla dimensione del $LogFile. Sul systemdrive di un sistema usato frequentemente, probabilmente otterrai solo poche ore di storico, mentre un disco esterno/secondario con file di backup probabilmente conterrà più informazioni storiche. E un file da 2MB conterrà molto meno storico di uno da 256MB. Quindi in quale intervallo di dimensioni può essere configurato questo file? Da 256 KB in su. Configurare la dimensione a 2 GB può essere fatto così, "chkdsk D: /L:2097152". Come un logfile di grandi dimensioni impatti sulle prestazioni è al di fuori dello scopo di questo testo. Impostarlo a meno di 2048 normalmente non è possibile. Tuttavia è possibile patchando untfs.dll: http://code.google.com/p/mft2csv/wiki/Tiny_NTFS
Intro Questo parser decodificherà ed eseguirà il dump di molte informazioni sulle transazioni dal $LogFile su NTFS. Vengono generati diversi csv oltre a un database sqlite chiamato ntfs.db contenente tutte le informazioni rilevanti. L'output è estremamente dettagliato e di basso livello, il che significa che richiede una discreta conoscenza di NTFS per essere compreso. I tipi di transazione Redo attualmente gestiti con output decodificato significativo sono:
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 degli attributi attualmente supportati: $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
Quindi in pratica tutti gli attributi sono supportati.
Spiegazione dei diversi output generati:
LogFile.csv: Il csv principale generato dal parser.
LogFile_DataRuns.csv Le informazioni di input necessarie per ricostruire i datarun
LogFile_DataRunsResolved.csv L'output finale dei datarun ricostruiti
LogFile_INDX_I30.csv Tutti i record di indice (IndexRoot/IndexAllocation) di cui è stato eseguito il dump e la decodifica
LogFileJoined.csv Come LogFile.csv, ma con le informazioni sul nome file unite dal $UsnJrnl o dal csv di mft2csv.
MFTRecords.bin $MFT fittizio ricreato in base ai record MFT trovati nelle transazioni InitializeFileRecordSegment. È possibile usare mft2csv su questo (ricordarsi di configurare correttamente "broken MFT" e "Fixups").
LogFile_lfUsnJrnl.csv Record per il $UsnJrnl che è stato decodificato all'interno di $LogFile
LogFile_UndoWipe_INDX_I30.csv Tutte le operazioni di undo per la cancellazione degli indici di directory (INDX).
LogFile_AllTransactionHeaders.csv Tutti gli header delle transazioni decodificate.
LogFile_BitsInNonresidentBitMap.csv Tutte le operazioni SetBitsInNonresidentBitMap decodificate.
LogFile_DirtyPageTable32bit.csv e LogFile_DirtyPageTable64bit.csv Tutte le voci in ogni operazione DirtyPageTableDump decodificata sia per OS a 32bit che a 64bit.
LogFile_Mft_ObjectId_Entries.csv Attributi $ObjectId decodificati.
LogFile_ObjIdO.csv Tutte le decodifiche dal file di sistema $ObjId:$O.
LogFile_OpenAttributeTable.csv Tutte le voci in ogni operazione OpenAttributeTableDump decodificata.
LogFile_QuotaO.csv Tutte le decodifiche dal file di sistema $Quota:$O.
LogFile_QuotaQ.csv Tutte le decodifiche dal file di sistema $Quota:$Q.
LogFile_RCRD.csv Tutti gli header dei record RCRD decodificati.
LogFile_ReparseR.csv Tutte le decodifiche dal file di sistema $Reparse:$R.
LogFile_SecureSDH.csv Tutte le decodifiche dal file di sistema $Secure:$SDH.
LogFile_SecureSII.csv Tutte le decodifiche dal file di sistema $Secure:$SII.
LogFile_SecurityDescriptors.csv Security descriptor decodificati. La fonte può essere da $SECURITY_DESCRIPTOR o $Secure:$SDS.
LogFile_SlackAttributeNamesDump.csv Tutte le voci dalle transazioni AttributeNamesDump decodificate trovate nello slack space.
LogFile_SlackOpenAttributeTable.csv Tutte le voci dalle transazioni OpenAttributeTableDump decodificate trovate nello slack space.
LogFile_TransactionTable.csv Transazioni TransactionTableDump decodificate.
LogFile_Filenames.csv Tutti i nomi file risolti con MftRef, MftRefSeqNo e Lsn.
LogFile_TxfData.csv Dati decodificati da $DATA:$TXF_DATA in $LOGGED_UTILITY_STREAM.
LogFile_UpdateFileName_I30.csv Tutte le decodifiche di UpdateFileNameRoot e UpdateFileNameAllocation sia per operazioni redo che undo.
LogFile_CompensationlogRecord.csv Tutte le decodifiche di CompensationlogRecord. Non rilevante per nt5.x.
Ntfs.db Un file di database sqlite con tabelle quasi equivalenti ai csv sopra. Il database contiene 5 tabelle: DataRuns IndexEntries LogFile LogFileTmp (tabella temporanea usata durante la ricreazione dei datarun). UsnJrnl