Teil 1: Wie man Partitionen neue/alte UUIDs gibt

Wie ändert man eigentlich eine UUID einer Platte oder Partition und wieso macht man das überhaupt?

Wie man Partitionen neue/alte UUIDs gibt

Zur Zeit habe ich ein spannendes Projekt, bei dem soviel schief geht, daß man aus dem Lernen und kreativ sein, gar nicht mehr rauskommt 🙂 Als Hintergrund müßt Ihr nur wissen, daß wir einen Hotstand-by-Server für einen Kunden realisieren, der in einem anderem Rechenzentrum und Netzsegment steht. Er hat also nicht die gleiche IP, nicht die gleiche MAC usw. aber alle Configs sollen gleich sein, damit alles reibungslos klappt, wenn man dahin umschaltet.

„Warum? Damit die Kiste noch bootet“

So ein Server hat nicht nur eine Webseite, sondern tausende davon, dazu Mailkonten, FTP Zugänge, SSH Benutzer usw. usw. Dies bedeutet, daß eine Menge an Konfigurationen zwischen den Servern synchronisiert werden müssen, wo man ganz leicht den Überblick verlieren kann und so Dateien auf dem Hotstand-by-Server nicht auf Stand wären.

Daher haben wir uns zu einem Full-Sync entschieden, soweit das geht. D.h. es werden alle Dateien des Server gesynct, außer denen die absolut nicht geändert werden dürfen z.b. die Netzwerkkonfiguration. Dies minimiert Fehlerquellen, erzwingt aber 1:1 Hardware und, ob man es glaubt oder nicht, auch die gleichen Festplattenreihenfolge.

Jetzt haben wir eine frische VM auf dem externen Server erstellt, was bedeutet der hat seine Platte frisch Partitioniert und formatiert. Die unterscheidet sich aber von der auf dem Originalserver und das würde nach dem Sync von /etc/ dazu führen, daß der Server nicht mehr bootet, weil die /etc/fstab so aussieht:

#
# /etc/fstab
# Created by anaconda on Thu Mar 3 13:22:46 2016
#
# Accessible filesystems, by reference, are maintained under ‚/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=17b8949a-60ad-422f-8b9b-f7b9da7f36fe / ext4 defaults,usrquota 1 1
UUID=614da79b-c6c6-4534-b673-fbec98089270 swap swap defaults 0 0
devtmpfs /opt/root/dev devtmpfs rw,nosuid,mode=755 0 0
proc /opt/root/proc proc rw,nosuid,nodev,noexec,relatime 0 0

Wie man leicht erkennen kann, ist die Systemplatte per UUID eingebunden, und da es eine andere Partition ist, haben wir auch eine andere UUID. Das müssen wir ändern, also schauen wir auf dem normalen Server mal nach, wie denn die UUID ist:

$ lsblk -f
NAME   FSTYPE  FSVER            LABEL                 UUID                                 FSAVAIL FSUSE% MOUNTPOINTS                                                                                                
sdb                                                                                                       
├─sdb1                                                                                                    
├─sdb2 ext4    1.0                                    17b8949a-60ad-422f-8b9b-f7b9da7f36fe  264,1G    59% /
└─sdb3 swap    1                                      614da79b-c6c6-4534-b673-fbec98089270                [SWAP]

Wir haben also zwei Partitionen mit UUIDs, genau wie in der /etc/fstab ( was für ein Zufall 😉 ).

Wenn Ihr das selbst versucht, Ihr werdet andere Partitionen haben und das nicht 1:1 nachmachen können!

Da haben wir eine ext4 und eine swap Partition und damit auch gleich das erste Problem, wie Ihr gleich feststellen werdet, aber eins nach dem anderen. Zuerst setzen wir mal die neue UUID für ext4:

tune2fs -U 17b8949a-60ad-422f-8b9b-f7b9da7f36fe /dev/sdb2

Wenn man jetzt „tune2fs -U 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3“ macht, weil das bei sdb2 so gut geklappt hat, dann wird tune2fs das mit einer Fehlermeldung verweigern :

tune2fs 1.47.0 (5-Feb-2023)
tune2fs: Ungültige magische Zahl im Superblock beim Versuch, /dev/sdb3 zu öffnen
/dev/sdb3 hat ein swap-Dateisystem

Es muß also einen anderen Weg geben, einer Swap Partition eine neue UUID zu verpassen… welcher könnte das sein?

Das SWAPLABEL

Holen wir uns doch erst einmal die UUID, wenn wir schon dabei sind:

$ swaplabel /dev/sdb3
UUID: 614da79b-c6c6-4534-b673-fbec98089270

und genauso leicht kann man die auch ändern:

$ swaplabel –uuid 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3

Jetzt darf man auf keinen Fall vergessen die /etc/fstab anzupassen, sonst stehen da die alten UUIDs drin und das System bootet nicht mehr. Wenn man natürlich jetzt den Sync von /etc/ anwirft, erübrigt sich das natürlich 😉

Für ReiserFS und andere Filesysteme gibt es teilweise Spezialtools, die mit dem Filesystem zusammen ausgeliefert werden. Wer das mit einem grafischen Werkzeug wie GParted oder Gnome-Disks machen möchte, muß nicht mal wissen, was für ein Filesystem er da vor sich hat.

Apropos neue UUIDs geben, das geht so:

tune2fs -U $(uuidgen) /dev/sdxX

Je nach Distro (hier Fedora) die Ihr verwendet, kann der Befehl auch nur „uuid“ heißen.

Double Layer Encryption mit Veracrypt

Wer sagt LUKS und VeraCrypt könne man unter GNU/Linux nicht zusammen als Partitionsverschlüsselung benutzen, der irrt.

Für die Securityneulinge unter Euch klären wir doch erstmal, was LUKS und VeraCrypt überhaupt sind:

LUKS ist das Systemencryptionformat unter Linux. Erstellt man eine frische Linuxinstallation auf einen PC und verschlüsselt die Platte, wird dazu LUKS verwendet. LUKS steht für Linux Unified Key Setup, was die Methode meint, wie der kryptographische Schlüssel hinterlegt ist. Die Verschlüsselung selbst wird mit dem DMCrypt Kernelmodul gemacht, was wiederum für Device-mapper Crypto steht und am Ende dann AES, Twofish oder Serpent als Verschlüsselungsmethoden einsetzt. LUKS reicht aus um einen normalen Angreifer, der das Laptop geklaut hat, davon abzuhalten an die Daten zu kommen.

VeraCrypt wiederum ist das derzeit einzige Multi-Plattform-Verschlüsselungssystem, daß Mac/Windows und Linux einschliesst (wenn man das anklickt). Es nutzt am Ende auch AES, TwoFish und Serpent als Verschlüsselungsmethoden. VeraCrypt basiert auf den Sourcen von Truecrypt, seinem direkten Vorläufer und bedient sich praktischerweise genauso. Daher gibt es auch eine nützliche GUI mit der man die Laufwerke managen und die Verschlüsselungen erstellen kann. VeraCrypt kann durch vermischen von Verschlüsselungsalgorithmen eine stärkere, aber rechenintensivere Verschlüsselung erzeugen. Deswegen sollten sensitive Daten damit verschlüsselt werden.

VeraCrypt und LUKS schliessen sich eigentlich gegenseitig aus, wenn zusätzlich auch VeraCrypt benutzt wird, um die gleiche Partition direkt zu verschlüsseln. Will man das doch, kann das aus logischen Gründen nicht gehen, da nicht beide die gleichen Blöcke der Festplatte benutzen können. Das stimmt leider, deswegen müssen wir den Begriff „gleichen Block“ etwas dehnen. Was wäre, wenn man tatsächlich den gleichen Block mit beiden Programmen nutzen würde, aber es nicht wirklich gleichzeitig ist ?

Double Layer Encryption

Nun habe ich es im Betreff natürlich schon verraten: Double Layer meint, zwei Schichten Verschlüsselung, also zwei Schichten übereinander.

Zunächst wird die Partition ganz normal mit LUKS verschlüsselt. Passwort aussuchen und loslegen.

Dann wird es schwieriger, denn über die Oberfläche von VeraCrypt kann man nur echte Partitionen einer Festplatte aussuchen, da ist aber schon die Luksschicht drauf. Würden wir also diese Auswählen, wäre LUKS weg und wir hätten nur noch eine Schicht. Jetzt kommen die VeraCryptfreaks natürlich sofort auf die Idee, der Typ in dem Artikel meint einen Truecryptcontainer und verkauft es als Double-Layer …  nein, das meine ich nicht 😀 Ich rede wirklich davon, zwei Schichten Verschlüsselung auf Partitionsebene einzusetzen 😀

Damit Ihr den Unterschied versteht, True/VeraCrypt kann eine Datei anlegen, diese verschlüsselt formatieren und als Laufwerk anmelden. Wo die Datei liegt ist dabei egal und das bietet echt coole Optionen an, wo und wie man das im Cloudbetrieb nutzen kann. Es bleibt aber eine Datei, was meint, daß man über OS Filesystemroutinen auf die Datei zugreift, was der Performance etwas abträglich sein kann, weil ja noch mehr Prozesse auf das darunterliegende Filesystem zugreifen könnten, und im allgemeinen, daß Filesystem im Weg ist.  Speichert man die Daten dagegen direkt auf die Festplatte ist es tatsächlich performanter.

Wie wir oben gelernt haben, kann man mit VeraCrypt per Oberfläche nur auf die echten Partitionen zugreifen. Also brauchen wir eine Partition dafür. Zum Glück haben wir eine, die von LUKS beim Formatieren der nativen Partition erzeugte virtuelle Partition NACH der Entschlüsselung.  Nur rankommen ist schwierig. Wer sich das Laufwerkstool ansieht, wird feststellen, daß ein LUKS entschlüsseltes Medium per Device-Mapper verwaltet wird. Ist logisch, denn darauf beruht LUKS ja auch, wie man oben nachlesen kann. Dieses Devicemapping wird vom Kernel als echte Platte verkauft, kann also genauso wie eine angesprochen werden, sonst könnte man ja auch kein Ext4 Filesystem drauf formatieren. Man muß also nur an das DeviceID gelangen und es irgendwie an VeraCrypt weiterreichen.

Am Ende war dieser Vorgang einfacher als gedacht. Zunächst öffnen wir das Laufwerkstool ( Laufwerke / Disks ), das schon benutzt wurde, um die Partition mit LUKS zu verschlüsseln. Klickt man auf die Partition, die nach der Entschlüsselung des Laufwerks angezeigt wird, bekommt man die DeviceID angezeigt, die dann mit kleinen Abweichungen so aussieht : „/dev/mapper/luks-4276c629-c8de-45e4-9b26-56b94e65b6eb

Crypto-4Jetzt die Partition verschlüsseln

Crypto-6

Crypto-7Diese geben wir nun direkt in die Eingabemaske beim Anlegen einer neuen Festplattenverschlüsselung  im VeraCrypt ein, statt ein Device auszusuchen. Erfreulicherweise nimmt VeraCrypt das sofort an:Crypto-8

Crypto-9Die PIM von „600“ habe ich für die Demo verwendet, 900 bis 1800 sollten in Betracht gezogen werden, je nach CPU Stärke. Denn je mehr Durchläufe des Hashalgorithmuses hier stehen, desto langsamer geht es. Das trifft aber auch für den Angreifer zu und der muß diesen Wert erst noch erraten, bevor er hoffen kann, einen Block der Platte korrekt zu dekodieren.

Crypto-11Crypto-12Crypto-14Nun kann man ganz normal weitermachen, als wenn es die normale Partition wäre, denn es ist eine. Ist die neue Partition am Ende formatiert, erhalten wir so eine Double-Layer Protection. Das Spiel könnte man noch weitertreiben, aber danach wird es langsam inperformant. Eine Tripple-Layer Verschlüsselung wäre ausgesprochen hart, bis unmöglich zu entschlüsseln, solange keine technischen Designfehler der Verschlüsselungsprotokolle gemacht wurden.

Jetzt noch mal zur Probe mounten

Crypto-15
Crypto-16
Crypto-17und schon ist die frisch verschlüsselte Platte benutzbar und Fertig ist die doppelte Festplattenverschlüsselung 😀
Crypto-19

Verschlüsselung alleine reicht nicht

Nun kommt bei so einer Verschlüsselung noch einiges an Randbedingungen mit, denen man sich gewahr sein muß. Solange das Betriebssystem unsicher ist, sind es die Daten auch, denn wenn ich selbst darauf zugreifen will, müssen die Lagen ja alle entschlüsselt sein. In dem Augenblick kann ein kompromitiertes System den Inhalt verraten.

Ein Betriebssystem wie Windows 10 speichert den eigenen Verschlüsselungskey auch schonmal ohne zu fragen in der Microsoftcloud.. natürlich nur damit SIE an Ihre Daten rankommen, wenn SIE Ihr Passwort vergessen haben 😉 (glauben wir natürlich sofort 😉 ) Apple ist da auch keinen Deut besser.

Desweiteren sollten Sie auch keine Funktastaturen einsetzen, weil die das auch gern unverschlüsselt im Umkreis von hunderten von Metern verteilen! Selbstverständlich zeigt der Monitor nicht zum Fenster und die Tastatureingabe ist auch nicht einzusehen oder zu hören (Das ist kein Witz). Das Passwort lautet natürlich auch nicht „Linux12345“ sondern „WeißderGeierwievieleZeichenichbenutze,hauptsachemehrals25“ .. Geburtstage sind kein Passwort, Hundenamen sind kein Passwort, Lateinische Zitate sind keine Passwörter, besonders nicht „Quovadis{Ihrname}“… Alles auf das Sie zuerst kommen, kommen alle anderen auch zuerst. Daher fängt man beim fünften Versuch aufwärts an und nicht vorher. Wenn Sie den Raum mit Ihrem Computer verlassen, starten Sie die Bildschirmsperre, damit keine Fremden an den PC können, während die entschlüsselten Inhalte lesbar sind.

Sie müssen sich klar machen, daß die Festplatte hundertmal kopiert werden kann, um alle hundert Kopien gleichzeitig mit Entschlüsselungsversuchen zu brechen. Ihr Passwort muß so einem massiv-paralellen Angriff für Jahre standhalten und daher braucht es eine Mindeststärke.

Die Empfehlung des Tages lautet dann natürlich: Nehmen Sie GNU/Linux und LUKS + VeraCrypt gleichzeitig.

Abschlußanmerkungen

Natürlich kann man das alles in der Konsole machen und es so teilautomatisieren, aber das war heute nicht Thema des Artikels.

Ich habe hier einen USB Stick genommen, weil ich keine freie Festplattenpartition zum Testen hatte. Ein USB Stick ist nicht optimal geeignet um verschlüsselt zu werden, da ein USB Stick einen Backupchip hat, um die Speicherchips gleichmäßig zu beschreiben. Der freie Speicherchip wird rotiert, damit gibt es immer einen Speicherchip, dessen Inhalt sich der Kontrolle des Verschlüsselungsprogramms entzieht. Jetzt kann man Glück haben und es stehen keine unverschlüsselten Daten in dem Speicherchip, es kann aber auch anders kommen. Daher richtige Festplatten als Datenträger nehmen.