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