Billige Verschlüsselung knacken

Seite 2: Testdaten aufstöbern

Inhaltsverzeichnis

Der Befehl fdisk -l gibt erneut Auskunft über die aktuelle Partitionierung:

   Gerät  boot.     Anfang       Ende        Blöcke   Id     System
/dev/sda1 1 30400 244187968+ c W95 FAT32 (LBA)
...
/dev/sdb1 1 30400 244187968+ c W95 FAT32 (LBA)

Wir haben also zwei identische virtuelle Laufwerke mit einem jeweils 244187968 Blöcken großen Windows-Dateisystem erhalten. Der erste Block der Festplatte ist der Master-Boot-Record (MBR). Der Hexdump zeigt:

# dd if=/dev/sdb bs=1K count=1 | hexdump -C 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 |................|
000001c0 01 00 0c fe ff ff 3f 00 00 00 81 06 1c 1d 00 00 |......?.........|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400

Typisch für einen MBR ohne Boot-Code: Die vielen Nullen, die Partitionstabelle an Offset 0x1be (in diesem Fall mit einer einzelnen primären Partition) sowie die beiden Magic-Bytes 55 aa bei 0x1fe.

Um schon einmal einige Testdaten zu haben, schreiben wir ein paar Blöcke ab Nummer 1001 voller "cttestcttestcttest...":

# dd if=cttest.txt of=/dev/sdb bs=1K seek=1000

Nun gilt es, die verschlüsselte Partition auf dem physikalischen Medium zu finden. Wir bauen daher die Festplatte aus dem Raidon-Gehäuse aus und schließen sie per SATA an. Vermutlich liegen die gesuchten Daten hinter dem unverschlüsselten Teil. Es liegt daher nahe, direkt nach der ersten Partition mit dem Auslesen zu beginnen. Die komprimierte Darstellung von hexdump sorgt dafür, dass alle unbeschriebenen Sektoren zusammenschnurren und die belegten sofort hervorstechen:

# dd if=/dev/sda bs=1K skip=244187968 count=1M | hexdump -C 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
004adbb0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 |................|
004adbc0 00 80 7e 0b b5 37 bf 7a 00 00 05 93 8e 0e 00 00 |..~..7.z........|
004adbd0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
004adbf0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 49 |..............vI|
004adc00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*

Holla! Die Struktur der ersten aufgespürten Daten entspricht genau der des gesuchten MBR. Auch die Fundstelle 0x4adbbe passt, da sie 4790,5 leeren Blöcken plus Offset 0x1be entspricht, und ebenso die Position der beiden Magic-Bytes. Doch das würde ja bedeuten, dass der Controller Nullbytes zu Nullbytes verschlüsselt! Aber vielleicht ist die strukturelle Ähnlichkeit ja auch nur ein Zufall. Wenn es sich tatsächlich um den MBR handelt, müsste in Block 244193758 (244187968 + 4790 + 1000) das Chiffrat unseres cttest-Blocks liegen. Und siehe da:

# dd if=/dev/sda bs=1K skip=244193757 count=1K | hexdump -C
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400 5c f0 d8 5c 5c f4 4c b3 d8 5c 5c f4 5c f0 de 12 |\..\\.L..\\.\...|
00000410 5c f4 5c f0 d8 5c 5c b3 5c f0 d8 5c 5c f4 4c b3 |\.\..\\.\..\\.L.|
00000420 d8 5c 5c f4 5c f0 de 12 5c f4 5c f0 d8 5c 5c b3 |.\\.\...\.\..\\.|
00000430 5c f0 d8 5c 5c f4 4c b3 d8 5c 5c f4 5c f0 de 12 |\..\\.L..\\.\...|
00000440 5c f4 5c f0 d8 5c 5c b3 5c f0 d8 5c 5c f4 4c b3 |\.\..\\.\..\\.L.|
00000450 d8 5c 5c f4 5c f0 de 12 5c f4 5c f0 d8 5c 5c b3 |.\\.\...\.\..\\.|
...

Nach dem Nullblock 1000 folgt in Block 1001 relativ zum potenziellen MBR-Kandidaten ein Haufen höchst strukturierter Daten mit offensichtlich geringem Zufallsgehalt. Dies ist ein weiteres sicheres Zeichen lausiger Verschlüsselung. Die Sequenz 5c f0 d8 5c … wiederholt sich alle 24 Bytes. Zum Vergleich der ursprüngliche Klartext:

00000000  63 74 74 65 73 74 63 74  74 65 73 74 63 74 74 65  |cttestcttestctte|
00000010 73 74 63 74 74 65 73 74 63 74 74 65 73 74 63 74 |stcttestcttestct|
00000020 74 65 73 74 63 74 74 65 73 74 63 74 74 65 73 74 |testcttestcttest|
...

Also handelt es sich bei Block 244187968 tatsächlich um den verschlüsselten MBR des geschützten Laufwerks und die Verschlüsselung hat einen Fixpunkt bei der Null. Wenn allerdings eine Verschlüsselung aus Nullen Nullen macht, ist sie keinen Pfifferling wert und dürfte sich im Handumdrehen knacken lassen.