Im zweiten Praktikum beschäftigen wir uns mit der Analyse von Datenträgern, Partitionstabellen und Partitionen selbst. Weiterhin üben wir das Wiederherstellen von Dateien aus nicht-allozierten Speicherbereichen.
| Skript-Anfang | Praktikum 2 – Seite 1 |
|---|---|
| Skript-Ende | Praktikum 2 – Seite 1 |
Datenträgeranalyse
Analyse des Datenträgers
Bestimmen Sie die Blockgröße des Datenträgers.
Mit Hilfe der Werkzeuge mmls und fdisk können relevante Informationen zu der Festplattenpartitionierung und folglich auch der Block- bzw. Sektorgröße ermittelt werden. Zunächst wird eine Analyse mit fdisk durchgeführt.
# fdisk arbeitskopie.dd
Command (m for help): p
Disk arbeitskopie.dd: 6476 MB, 6476090368 bytes\n255 heads, 63 sectors/track, 787 cylinders, total 12648614 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdbe43afc
Device Boot Start End Blocks Id System
arbeitskopie.dd1 * 2048 10231807 5114880 7 HPFS/NTFS/exFAT
arbeitskopie.dd2 10231808 10272767 20480 6 FAT16
arbeitskopie.dd3 10293248 12646399 1176576 f W95 Ext'd (LBA)
arbeitskopie.dd5 10295296 12138495 921600 7 HPFS/NTFS/exFAT
Die Analyse zeigt uns, ob eine Partition bootfähig ist, an welcher Stelle eine Partition beginnt und endet sowie welches Dateisystem darauf zu finden ist. Die Analyse mit mmls liefert deutlich mehr Informationen dazu. Hier werden nicht-allokierte Bereiche und erweiterte Partitionen angezeigt. Anhand des Slot-Feldes kann man erkennen, in welcher Partitionstabelle eine Partition aufgeführt ist.
# mmls arbeitskopie.dd
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description\n00: Meta 0000000000 0000000000 0000000001 Primary Table (#0)\n01: ----- 0000000000 0000002047 0000002048 Unallocated\n02: 00:00 0000002048 0010231807 0010229760 NTFS (0x07)\n03: 00:01 0010231808 0010272767 0000040960 DOS FAT16 (0x06)\n04: ----- 0010272768 0010295295 0000022528 Unallocated\n05: Meta 0010293248 0012646399 0002353152 Win95 Extended (0x0f)\n06: Meta 0010293248 0010293248 0000000001 Extended Table (#1)\n07: 01:00 0010295296 0012138495 0001843200 NTFS (0x07)\n08: ----- 0012138496 0012648613 0000510118 Unallocated
Anhand dieser Informationen lässt sich mit hoher Wahrscheinlichkeit sagen, dass vier Partitionen auf dem Festplattenabbild vorhanden sind.
Analyse der Partitionstabelle
Schreiben Sie mittels dd den MBR in die Datei mbr.dd und vermerken Sie dessen Hashwert.
Der Master Boot Record (MBR) einer Festplatte befindet stets an der Stelle des ersten Sektors und enthält eine Partitionstabelle, welche die Aufteilung des Datenträgers beschreibt. Indem wir mit dem Offset 0 beginnen und nur einen einzigen Block kopieren, fertigen wir eine exakte bit-genaue Kopie des MBR an, die wir für eine genauere Untersuchung verwenden können. Der Hashwert dient als Nachweis, dass wir die Daten nicht verändert haben bei diesem Prozess.
# dd if=arbeitskopie.dd of=mbr.dd count=1 bs=512\n1+0 records in\n1+0 records out\n512 bytes (512 B) copied, 3.2746e-05 s, 15.6 MB/s
# sha256sum mbr.dd
b08385aaaf8db1bdc571d7190a728b02ec99990b571c614c8f3920dfedc39e74 mbr.dd
Beschreiben Sie die Aufteilung des Datenträgers in Partitionen.
Mit der zuvor extrahierten Kopie des MBR arbeiten wir nun weiter. Wir lassen uns zunächst die Inhalte der Kopie xxd in hexadezimaler Darstellung anzeigen.
# xxd mbr.dd \n0000000: 33c0 8ed0 bc00 7cfb 5007 501f fcbe 1b7c 3.....|.P.P....|\n0000010: bf1b 0650 57b9 e501 f3a4 cbbd be07 b104 ...PW...........\n0000020: 386e 007c 0975 1383 c510 e2f4 cd18 8bf5 8n.|.u..........\n0000030: 83c6 1049 7419 382c 74f6 a0b5 07b4 078b ...It.8,t.......\n0000040: f0ac 3c00 74fc bb07 00b4 0ecd 10eb f288 ..<.t...........\n0000050: 4e10 e846 0073 2afe 4610 807e 040b 740b N..F.s*.F..~..t.\n0000060: 807e 040c 7405 a0b6 0775 d280 4602 0683 .~..t....u..F...\n0000070: 4608 0683 560a 00e8 2100 7305 a0b6 07eb F...V...!.s.....\n0000080: bc81 3efe 7d55 aa74 0b80 7e10 0074 c8a0 ..>.}U.t..~..t..\n0000090: b707 eba9 8bfc 1e57 8bf5 cbbf 0500 8a56 .......W.......V\n00000a0: 00b4 08cd 1372 238a c124 3f98 8ade 8afc .....r#..$?.....\n00000b0: 43f7 e38b d186 d6b1 06d2 ee42 f7e2 3956 C..........B..9V\n00000c0: 0a77 2372 0539 4608 731c b801 02bb 007c .w#r.9F.s......|\n00000d0: 8b4e 028b 5600 cd13 7351 4f74 4e32 e48a .N..V...sQOtN2..\n00000e0: 5600 cd13 ebe4 8a56 0060 bbaa 55b4 41cd V......V.`..U.A.\n00000f0: 1372 3681 fb55 aa75 30f6 c101 742b 6160 .r6..U.u0...t+a`\n0000100: 6a00 6a00 ff76 0aff 7608 6a00 6800 7c6a j.j..v..v.j.h.|j\n0000110: 016a 10b4 428b f4cd 1361 6173 0e4f 740b .j..B....aas.Ot.\n0000120: 32e4 8a56 00cd 13eb d661 f9c3 496e 7661 2..V.....a..Inva\n0000130: 6c69 6420 7061 7274 6974 696f 6e20 7461 lid partition ta\n0000140: 626c 6500 4572 726f 7220 6c6f 6164 696e ble.Error loadin\n0000150: 6720 6f70 6572 6174 696e 6720 7379 7374 g operating syst\n0000160: 656d 004d 6973 7369 6e67 206f 7065 7261 em.Missing opera\n0000170: 7469 6e67 2073 7973 7465 6d00 0000 0000 ting system.....\n0000180: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000190: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001b0: 0000 0000 002c 4463 fc3a e4db 0000 8020 .....,Dc.:..... \n00001c0: 2100 07e5 a97c 0008 0000 0018 9c00 00e5 !....|..........\n00001d0: aa7c 0672 b37f 0020 9c00 00a0 0000 00b8 .|.r... ........\n00001e0: b980 0ffe ff12 0010 9d00 00e8 2300 0000 ............#...\n00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.
Mit dieser Darstellung lässt sich jedoch noch nicht viel anfangen. Per Konvention liegt in dem Bereich zwischen 0x01BE und 0x1FD die 64 Byte große Partitionstabelle. Extrahiert man diese Informationen und ordnet sie in Gruppen an, so ergibt sich folgende Partitionierung der Festplatte.
| # | Hex-Informationen |
|---|---|
| 1 | 8020 2100 07e5 a97c 0008 0000 0018 9c00 |
| 2 | 00e5 aa7c 0672 b37f 0020 9c00 00a0 0000 |
| 3 | 00b8 b980 0ffe ff12 0010 9d00 00e8 2300 |
| 4 | 0000 0000 0000 0000 0000 0000 0000 0000 |
In der Partitionstabelle des MBR sind drei Partitionen vermerkt. Vergleicht man dies mit der Auswertung durch das Tool mmls, so lässt sich spätestens an dieser Stelle folgern, dass die Partition am Startblock 0010295296 durch eine erweiterte Partition mit eigener Partitionstabelle realisiert wurde. Da es sich bei erweiterten Partitionen um verkettete Listen handelt, muss die Partitionstabelle am Anfang der dritten Partition liegen. Dies wird in mmls anschaulich gezeigt. Dort wird eine erweiterte Tabelle an Block 0010293248 angezeigt.
Bestimmen Sie anhand der mbr.dd unter anderem für alle Partitionen den CHS Eintrag, den Typ der Partition, den Startsektor, die Anzahl der Sektoren in der Partition und ob diese bootfähig ist.
Als Voraussetzung für diesen Schritt muss die Übersetzung der hexadezimalen Darstellung der CHS-Adressierung in die reguläre Form erklärt werden.

Die folgende Tabelle bildet die zweite Wissensgrundlage und beschreibt, wie die Partitionstypen anhand ihrer Kennnummern identifiziert werden können.
| Typbyte (hex) | Bezeichnung |
|---|---|
| 0x00 | Leer/unbenutzt |
| 0x01 | FAT12 |
| 0x04 | FAT16 ≤ 32 |
| 0x05 | erweiterte Partition |
| 0x06 | FAT16 > 32 |
| 0x07 | NTFS, HPFS oder exFAT |
| 0x0B | FAT32 |
| 0x0C | FAT32 mit BIOS-Extensions |
| 0x0E | FAT16 > 32 |
| 0x0F | Erweiterte Partition mit BIOS-Extensions |
| 0x12 | OEM-Partition |
| 0x27 | Windows RE versteckte Partition |
| 0x42 | Dynamischer Datenträger |
| 0x82 | Linux Swap / Solaris 2.6 X86 bis Solaris 9 X86 |
| 0x83 | Linux Native |
| 0x8E | Linux LVM |
| 0xA5 | FreeBSD |
| 0xA6 | OpenBSD |
| 0xA9 | NetBSD |
| 0xEE | Legacy MBR mit folgendem EFI-Header |
| 0xEF | EFI-Dateisystem |
Nun übertragen wir die hexadezimalen Daten aus der Partitionstabelle nach den genannten Schemata ein und analyisieren diese.
| # | Bootbarkeit (0x00) | CHS-Start (0x01) | Dateisystem (0x04) | CHS-Ende (0x05) | LBA-Adressierung (0x08) | Sektoren (0x0C) |
|---|---|---|---|---|---|---|
| 0 | 80 | 20 21 00 | 07 | e5 a9 7c | 00 08 00 00 | 00 18 9c 00 |
| 0 | Bootfähig | 0,32,33 | NTFS | 636,229,41 | 2048 | 10229760 |
| 1 | 00 | e5 aa 7c | 06 | 72 b3 7f | 00 20 9c 00 | 00 a0 00 00 |
| 1 | Nicht bootfähig | 636,229,42 | FAT16 > 32 MiB | 639,114,51 | 10231808 | 40960 |
| 2 | 00 | b8 b9 80 | 0f | fe ff 12 | 00 10 9d 00 | 00 e8 23 00 |
| 2 | Nicht bootfähig | 640,184,57 | Erweiterte Partition mit BIOS-Extensions | 895,254,63 | 10293248 | 2353152 |
Bestimmen Sie diese Informationen zusätzlich fur die sekundären Partitionen.
Wir gehen wie gehabt vor und extrahieren den 512 Byte großen Block, der die Partitionsinformationen enthalten soll. Für diesen wird der Hashwert erzeugt.
# sha256sum mbr2.dd \n02e3892dca9ee74f4a2b9491696a1b4a2a0651a2408a636ad35bc70f77d97362 mbr2.dd
# dd if=arbeitskopie.dd of=mbr2.dd skip=0010293248 count=1 bs=512\n1+0 records in\n1+0 records out\n512 bytes (512 B) copied, 0.000205835 s, 2.5 MB/s
Wie bei der vorherigen Aufgabe betrachten wir die hexadezimale Darstellung, um Informationen zu sammeln.
# xxd mbr2.dd \n0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000100: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000110: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000120: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000130: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000150: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000160: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000170: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000180: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n0000190: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001b0: 0000 0000 0000 0000 0000 0000 0000 00d9 ................\n00001c0: 9a80 0795 a2f3 0008 0000 0020 1c00 0000 ........... ....\n00001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.
In diesem Bereich sind die Boot Record Signature (0x55aa) und eine Partition (00d9 9a80 0795 a2f3 0008 0000 0020 1c00) zu finden. Wie zuvor werden die Informationen analysiert und notiert.
| Bootbarkeit (0x00) | CHS-Start (0x01) | Dateisystem (0x04) | CHS-Ende (0x05) | LBA-Adressierung (0x08) | Sektoren (0x0C) |
|---|---|---|---|---|---|
| 00 | d9 9a 80 | 07 | 95 a2 f3 | 00 08 00 00 | 00 20 1c 00 |
| Nicht bootfähig | 640,217,25 | NTFS | 755,14,33 | 2048 | 1843200 |
Geben Sie die LBA der nicht-allozierten Speicherbereiche an. Wie viele nicht-allozierte Speicherbereiche finden Sie?
Es gibt drei nicht-allozierte Speicherbereiche mit den LBA 0000000000, 0010293248 und 0012138496.
Slot Start End Length Description\n01: ----- 0000000000 0000002047 0000002048 Unallocated\n04: ----- 0010272768 0010295295 0000022528 Unallocated\n08: ----- 0012138496 0012648613 0000510118 Unallocated
Analyse der Partitionen
Schreiben Sie mittels dd die erste und die zweite Primäre Partition nach partition_1.dd bzw. partition_2.dd.
# dd if=arbeitskopie.dd of=partition_1.dd skip=2048 count=0010229760 bs=512\n10229760+0 records in\n10229760+0 records out\n5237637120 bytes (5.2 GB) copied, 207.949 s, 25.2 MB/s
# dd if=arbeitskopie.dd of=partition_2.dd skip=10231808 count=40960 bs=512\n40960+0 records in\n40960+0 records out\n20971520 bytes (21 MB) copied, 0.256054 s, 81.9 MB/s
Vermerken Sie deren Hashwerte.
# sha256sum partition_1.dd partition_2.dd
cc224419f690065a653efa9cb58dbf546b72e7db752fe71229bfb4d11dd8e685 partition_1.dd
af1b66fdf5ae27c07da0fb9915c4d7f6f6be2941484136698e73fa75cc6aab86 partition_2.dd
Welche Dateisysteme sollten Sie laut Partitionstabelle dort vorfinden?
Laut Partitionstabelle sollte die erste Partition NTFS und die zweite Partition FAT16 verwenden.
Stimmen die Angaben?
Mit dem Werkzeug fsstat können konkrete Informationen über ein Dateisystem ausgelesen und angezeigt werden. Es eignet sich also bestens, um diese Frage zu beantworten.
# fsstat partition_1.dd
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: NTFS
Volume Serial Number: 5C0E509B0E50704E
OEM Name: NTFS
Volume Name: Volume1
Version: Windows XP
# fsstat partition_2.dd
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: FAT16
OEM Name: mkdosfs
Volume ID: 0x3ccb36b8
Volume Label (Boot Sector):
Volume Label (Root Directory):
File System Type Label: FAT16
Vergleicht man diese Informationen nun, so scheinen die Angaben im MBR bzw. der Partitionstabelle korrekt zu sein.
Analyse des nicht-allozierten Bereichs
Suchen Sie im dritten nicht-allozierten Speicherbereich nach versteckten Informationen. Geben Sie gefundene Informationen an.
Zunächst extrahieren wir den nicht-allozierten Speicherbereich und generieren eine Prüfsumme, um die Nachvollziehbarkeit und Integrität zu gewährleisten.
# dd if=arbeitskopie.dd of=u.dd skip=0012138496 count=0000510118 bs=512\n510118+0 records in\n510118+0 records out\n261180416 bytes (261 MB) copied, 3.80292 s, 68.7 MB/s
# sha256sum u.dd \n5ceace853194138924c6fffad721d051d4f7735de261a60666af75d60702418f u.dd
Mit dem Werkzeug scalpel lassen sich gelöschte Dateien auf einem Laufwerk wiederherstellen. Es ist somit ebenfalls geeignet die Daten im nicht-allozierten Bereich zu rekonstruieren. Diese Klasse von Programmen wird auch file carver genannt.
# scalpel -o out u.dd
Scalpel version 1.60 audit file
Started at Thu Apr 30 09:03:15 2015
Command line:
scalpel -o out u.dd
Output directory: /root/Downloads/P1/u/out
Configuration file: /etc/scalpel/scalpel.conf
Opening target "H="
The following files were carved:
File Start Chop Length Extracted From\n00000004.png 120455 NO 1111330 u.dd\n00000001.jpg 212540 NO 44428 u.dd\n00000000.jpg 100354 NO 13484 u.dd\n00000002.jpg 51381248 NO 13484 u.dd\n00000005.png 61672449 NO 1111330 u.dd\n00000003.jpg 108820480 NO 44428 u.dd\n00000016.pdf 204800000 NO 1115386 u.dd
...
An dieser Stelle werden alle Einträge, die nicht erfolgreich extrahiert werden können, nicht aufgeführt. Es verbleiben somit 7 Dateien, die sich regulär von den Anwendungen öffnen lassen. Laut Praktikumsbetreuer gibt es einen Fehler in scalpel bezüglich des png-Headers, wodurch einige Dateien nicht korrekt identifiziert oder extrahiert werden.