ff1f 0300 0000 0000
Transcription
ff1f 0300 0000 0000
Inhalt ● Allgemeines zu Dateisystemen ● Linux-Dateisysteme am Beispiel von ext2/ext3 ● Microsoft-Dateisysteme FAT NTFS Harald Baier Computerforensik h_da WS 2009/2010 101 Grundlegendes zu NTFS (1/2) ● ● ● NTFS = New Technologies File System Standard-Dateisystem von Microsoft ab Windows NT/2000 Verbreitetstes Dateisystem auf Endanwender-Rechnern Design-Prinzipien für NTFS: Zuverlässigkeit Sicherheit Unterstützung für große Speichermedien Skalierbarkeit Deutlich komplexer als FATx Harald Baier Computerforensik h_da WS 2009/2010 102 Grundlegendes zu NTFS (2/2) ● Keine offizielle Spezifikation für NTFS veröffentlicht: ● Zahlreiche detaillierte inoffizielle Beschreibungen (z.B. Carrier) Immer bessere Unterstützung für UNIX / Linux (z.B. durch Debian-Paket ntfsprogs) Zentrales Paradigma: Everything is a file Jedes Byte eines NTFS-Dateisystems gehört zu einer Datei Auch Dateisystem- und Metadaten stehen in Dateien Organisation der HDD-Blöcke in Cluster Cluster 0 startet am Anfang des Laufwerks Am Anfang von Cluster 0 steht der Bootsektor Harald Baier Computerforensik h_da WS 2009/2010 103 Master File Table (MFT) ● MFT ist das Herzstück von NTFS: Besteht aus MFT-Einträgen: MFT-Record = MFT-Entry Jeder MFT-Record hat gleiche Größe ● ● Typischerweise 1 KByte Größe eines MFT-Records steht in Bootsektor Empfehlung von Microsoft: Am Anfang ist die MFT minimal Dann wächst die MFT dynamisch bei Bedarf Daher kann sie fragmentiert sein Records sind beginnend von 0 durchnummeriert Harald Baier Computerforensik h_da WS 2009/2010 104 Zwei Bereiche eines MFT-Records ● MFT-Entry-Header: ● Größe: 42 Byte Strukturiert: 12 Felder: 'Signature' (FILE oder BAAD), Belegtstatus, Verwendete Bytes in MFT-Record, ... MFT-Entry-Body: Größe: 982 Byte 'unstrukturiert', enthält MFT-Attribute Attribute speichern u.A. Folgendes: Harald Baier Metadaten wie Besitzer, Rechte, MAC-Zeiten, … Inhaltsdaten, Dateinamen Unbenutzter Bereich Computerforensik h_da WS 2009/2010 105 Zwei Bereiche eines MFT-Attributs ● Attribute Header: Größe ist immer 16 Byte Struktur ist allgemein vorgegeben: ● ● Attributtyp (= type identifier) Attribute identifier: Eindeutig innerhalb des MFT-Eintrags Größe des Attributs Länge u. Offset des Attributnamens (beginnt mit '$') Attribute Body: Größe wird in Header festgelegt (Keine allgemein vorgegebene Struktur) Speicherung der Attributinhalte: Harald Baier Residentes Attribut: Inhaltsdaten in MFT-Record Nicht-residentes Attribut: MFT-Record enthält Adressen der Datencluster, in denen Attributinhalt gespeichert ist Computerforensik h_da WS 2009/2010 106 Cluster Runs für nicht-residente Attribute ● Cluster Run = Sequenz aufeinanderfolgender Cluster ● Speicherung nicht-residenter Attribute in Cluster Runs ● Jeder Cluster Run enthält folgende Information: ● Clusteradresse des ersten Clusters des Runs Anzahl der Cluster des Runs Beispiel für Cluster Runs eines Attributs: Start: 12, Length: 4 Start: 80, Length: 3 Start: 56, Length: 5 Harald Baier Computerforensik h_da WS 2009/2010 107 Zeitstempel in NTFS ● ● Vier Zeitstempel werden gespeichert: Creation Time: Datei wurde angelegt Modified Time: Letzter schreibender Zugriff MFT Modified Time: Letzte Änderung des MFT-Records Accessed Time: Letzter lesender Zugriff Zeitstempel werden in 64-Bit Integer-Werten gespeichert Anzahl der 0.1 μs seit 01. Januar 1601, 00:00 Uhr UTC Granularität aller Zeiten: Auf 0.1 μs = 100 ns genau Sinnvolles Referenzdatum? EPOCH = 116.444.736.000.000.000 Harald Baier Computerforensik h_da WS 2009/2010 108 Standardattribute (1/3) ● ● Type identifier 16: $STANDARD_INFORMATION Immer resident Enthält Besitzer, MAC-Zeitstempel, Flags (Hidden, System, ...) Relevante Zeitstempel, da bei Zugriff jeweils aktualisiert Type identifier 48: $FILE_NAME Immer resident Enthält Dateinamen, Elternverzeichnis und MAC-Zeitstempel Weniger relevante Zeitstempel: Zeitpunkt der Dateierstellung Harald Baier Computerforensik h_da WS 2009/2010 109 Standardattribute (2/3) ● Type identifier 128: $DATA Enthält Inhalt der Datei Resident für 'kleine' Dateien (ca. 700 Bytes) Genau ein Standarddatenfeld: Weitere Datenfelder beachten: Harald Baier Hat keinen Namen (Anzeige im TSK: $Data) Dateigröße = Größe von $Data Alternate Data Streams: Mehrere $DATA-Attribute Weitere Datenattribute müssen Namen besitzen Beispiel: D:> echo “Hello world“ > out.file:foo legt weiteres Datenfeld mit Namen $foo an Computerforensik h_da WS 2009/2010 110 Standardattribute (3/3) ● Type identifier 80: ● Legt Zugriffsrechte und weitere Sicherheitseigenschaften der Datei fest Type identifier 256: ● $SECURITY_DESCRIPTOR $LOGGED_UTILITY_STREAM Enthält Daten zur Entschlüsselung (z.B. für EFS): Verschlüsselten File Encryption Key (FEK) Type identifier 176: $BITMAP Belegtstatus der Datenblöcke (z.B. für MFT oder Verzeichnis) Harald Baier Computerforensik h_da WS 2009/2010 111 Weitere Attribute-Konzepte ● MFT-Basiseinträge: Relevant, falls ein MFT-Entry nicht alle Attribute speichert Erster MFT-Eintrag ist MFT-Basiseintrag der Datei ● MFT-Basiseintrag enthält Zuordnung Attributen --> Adressen des zugehörigen MFT-Eintrags in $ATTRIBUTE_LIST Sparse Attributes: Cluster, die nur Nullen speichern, werden nicht auf Datenträger geschrieben Speicherung in Sparse Runs: Kein Startcluster, nur Länge Beispiel: Harald Baier Start: 123, Length: 12 Start: -----, Length: 5 Computerforensik h_da WS 2009/2010 112 File System Metadata Files (1/3) ● File System Metadata Files = Metadateien: Dienen zur Speicherung von Dateisystemdaten Die ersten 16 MFT-Records sind dafür reserviert Oft beginnen die Benutzerdateien erst bei 64 ● Einfache Konsequenz aus Paradigma Everything is a file ● Namen der Metadateien beginnen mit '$' u. Großbuchstaben: ● Records der MFT: Record 0: $MFT (Eintrag für die MFT selbst) Record 1: $MFTMirr (Backup der ersten MFT-Entries) Harald Baier Computerforensik h_da WS 2009/2010 113 File System Metadata Files (2/3) ● Record 2: $LogFile ● Record 3: $Volume ● Journal für Metadaten-Änderungen Enthält Informationen über Label, Identifier und Version des Volumes Record 4: $AttrDef Harald Baier Werte der im Dateisystem verwendeten Type Identifier der Attribute Größe der Attribute Henne-Ei-Problem (z.B. wie soll man Attribut $DATA lesen, wenn man dessen Type identifier nicht kennt?) Computerforensik h_da WS 2009/2010 114 File System Metadata Files (3/3) ● Record 5: '.' ● Record 6: $Bitmap ● Belegtstatus der Cluster im Dateisystem Record 7: $Boot ● Wurzelverzeichnis des Dateisystems Bootsektor (beginnt immer ab Cluster 0) Record 9: $Secure Harald Baier Informationen über Sicherheitsstatus und Zugriffskontrollen der Dateien (Security Descriptors) Computerforensik h_da WS 2009/2010 115 Adressierung von MFT-Records ● Besteht aus zwei Anteilen: File number (Nummer des MFT-Records von oben): Sequence number: ● ● 48-Bit Feld Maximale Anzahl an MFT-Records: 248 (Großteil nicht alloziert) 16-Bit Feld Inkrementiert bei jeder neuen Belegung des Records File reference := Sequence number || File number 64-Bit Wert Eindeutig für jede Generation einer Datei Beispiel 0002 || 0000 0000: 'Dritte' Generation der MFT Harald Baier Computerforensik h_da WS 2009/2010 116 Beispiel: Zugriff auf MFT-Record von $MFT mittels istat baier@watson $ istat /dev/sdb1 ____ [REMOVED] $FILE_NAME Attribute Values: Flags: Hidden, System Name: $MFT [REMOVED] Attributes: Type: $STANDARD_INFORMATION (16-0) Type: $FILE_NAME (48-3) Type: $DATA (128-1) Name: N/A Name: $Data Name: N/A Resident Resident size: 74 Non-Resident size: 72 size: 262144 8533 8534 8535 8536 8537 8538 8539 8540 [REMOVED] Type: $BITMAP (176-5) Name: N/A Non-Resident size: 4104 8532 8018 Harald Baier Computerforensik h_da WS 2009/2010 117 Essentielle Daten des NTFS-Bootsektors ($Boot) Byte-Nr. (dez.) Beschreibung 11 – 12 Größe eines HDD-Blocks in Bytes 13 – 13 Größe eines Clusters in HDD-Blöcken 40 – 47 Größe des Dateisystems in HDD-Blöcken 48 – 55 Clusteradresse des ersten Clusters der MFT 64 – 64 Größe eines MFT-Records Berechnung hängt vom Vorzeichen ab 68 – 68 Größe der Index-Records in Clustern Harald Baier Computerforensik h_da WS 2009/2010 118 Beispiel: Bootsektor einer NTFS-Partition baier@watson $ xxd /dev/sdb1 | less 0000000: eb52 904e 5446 5320 2020 2000 0208 0000 .R.NTFS 0000010: 0000 0000 00f8 0000 3f00 ff00 8000 0000 ........?....... 0000020: 0000 0000 8000 0000 ff1f 0300 0000 0000 ................ 0000030: 5521 0000 0000 0000 0200 0000 0000 0000 U!.............. 0000040: f600 0000 0100 0000 c60a dcee 3fdc ee24 ............?..$ 0000050: 0000 0000 fa33 c08e d0bc 007c fb68 c007 .....3.....|.h.. 0000060: 1f1e 6866 00cb 8816 0e00 6681 3e03 004e ..hf......f.>..N 0000070: 5446 5375 15b4 41bb aa55 cd13 720c 81fb TFSu..A..U..r... 0000080: 55aa 7506 f7c1 0100 7503 e9dd 001e 83ec U.u.....u....... 0000090: 1868 1a00 b448 8a16 0e00 8bf4 161f cd13 .h...H.......... 00000a0: 9f83 c418 9e58 1f72 e13b 060b 0075 dba3 .....X.r.;...u.. Harald Baier Computerforensik h_da WS 2009/2010 ..... 119 Interpretation von Bytemustern im Bootsektor (1/2) ● ● Größe eines HDD-Blocks in Bytes (11-12, essentiell): Hexdump: ____________ Entspricht folgender Hex-Zahl: ____________ Entspricht folgender Dezimalzahl: ____________ Größe eines Clusters in HDD-Blöcken (13, essentiell): Hexdump: ____________ Entspricht folgender Hex-Zahl: ____________ Entspricht folgender Dezimalzahl: ____________ Harald Baier Computerforensik h_da WS 2009/2010 120 Interpretation von Bytemustern im Bootsektor (2/2) ● ● Adresse des ersten Clusters der MFT (48-55, essentiell): Hexdump: ____________ Entspricht folgender Hex-Zahl: ____________ Entspricht folgender Dezimalzahl: ____________ Größe eines MFT-Records (64, essentiell): Interpretation als signed int (mittels Zweierkomplement) Berechnung für positive u. negative Zahlen Hexdump: Entspricht vorzeichenbehafteter Zahl: ____________ Größe eines MFT-Records in Bytes: ____________ Harald Baier Computerforensik ____________ h_da WS 2009/2010 121 Zugriff auf Hexdump der MFT mittels dcat und icat baier@watson $ dcat /dev/sdb1 _______ | xxd | less 0000000: 4649 4c45 3000 0300 f622 1000 0000 0000 FILE0...."...... 0000010: 0100 0100 3800 0100 a001 0000 0004 0000 ....8........... 0000020: 0000 0000 0000 0000 0600 0000 0000 0000 ................ 0000030: 0200 0000 0000 0000 1000 0000 6000 0000 ............`... baier@watson $ icat /dev/sdb1 _______ | xxd | less 0000000: 4649 4c45 3000 0300 f622 1000 0000 0000 FILE0...."...... 0000010: 0100 0100 3800 0100 a001 0000 0004 0000 ....8........... 0000020: 0000 0000 0000 0000 0600 0000 0000 0000 ................ 0000030: 0200 0000 0000 0000 1000 0000 6000 0000 ............`... Harald Baier Computerforensik h_da WS 2009/2010 122 Zugriff auf MFT-Record von $Boot mittels istat baier@watson $ istat /dev/sdb1 ______ [REMOVED] $FILE_NAME Attribute Values: Flags: Hidden, System Name: $Boot [REMOVED] Attributes: Type: $STANDARD_INFORMATION (16-0) Type: $FILE_NAME (48-2) Name: N/A Name: N/A Resident Resident size: 76 Type: $SECURITY_DESCRIPTOR (80-3) Name: N/A Type: $DATA (128-1) Non-Resident Name: $Data Resident size: 48 size: 116 size: 8192 0 1 Harald Baier Computerforensik h_da WS 2009/2010 123 Demo: Sicheres Löschen unter NTFS ● Beispieltool: shred (gängig unter Linux) ● Möglicher Aufruf: shred -uv file.txt ● Szenario: Datei anlegen Nummer des MFT-Records herausfinden Datencluster notieren Sicheres Löschen mit shred Auswirkungen auf MFT-Record und Datencluster beobachten Harald Baier Computerforensik h_da WS 2009/2010 124