Datensicherheit 1 – Verschlüsseltes System

ein Gastbeitrag von Heiko Finzel.

Über mich

Hallo,

Vorweg möchte ich kurz etwas zu meiner Person sagen.
Mein Name ist Heiko. Ich bin 26 Jahre alt und komme aus einem kleinen, verträumten Nest in Bamberger Umgebung. Da ich schon früh meine Leidenschaft für Computer und Programmierung entdeckt habe, habe ich mein Hobby quasi zum Beruf gemacht und bin derzeit sowohl Anwendungsentwickler als auch Systemadministrator in einem namhaften Rechenzentrum.
Von diesem Blog habe ich direkt durch Evelyn erfahren, die ich in unserer gemeinsamen Schulzeit sehr zu schätzen gelernt habe. Und so möchte ich nun auch ihren Blog bereichern.

Vorwort

Gerade im Zeitalter des mobile computing ist das Thema Datensicherheit so relevant wie nie. Beinahe jeder ist heute mit einem Note- oder Netbook unterwegs und natürlich möchte man seine wichtigsten Daten da immer dabei wissen. Nicht selten wird man dabei von einem mulmigen Gefühl begleitet, was ist wenn einem das Notebook gestohlen wird oder man es einfach verliert? Möglicherweise befinden sich sogar sicherheitsrelevante Firmendaten auf dem Gerät, die unter keinen Umständen in die falschen Hände geraten dürfen…

Nun finden sich im Internet Unmengen Verschlüsselungstools und auch Howtos, die beschreiben wie man seine Daten auf einfache Weise schützen kann. Betreibt man aber ein Windows und ein Linux System auf demselben Rechner und möchte beide Systemplatten verschlüsseln stößt man schnell auf einige Komplikationen. Stichwort Bootloader. Aus diesem Grund habe ich mich entschlossen, meine Erfahrungen in diesem Artikel für alle zugänglich zu machen.

Das Szenario

Ein Windows 7 und ein Ubuntu 10.10 sollen auf derselben Festplatte auf verschlüsselten Systempartitionen liegen. Beide sollen sich noch eine weitere, ebenfalls verschlüsselte Datenpartition teilen.

Natürlich können auch andere Windows oder Linux Versionen verwendet werden. Das Vorgehen dürfte in jedem Fall nur minimal abweichen.

Was wird benötigt ?

Als Verschlüsselungssoftware werden wir folgende Freeware Tools benutzen:

  • Windows: True Crypt
  • Linux: cryptsetup, True Crypt

(Da die Linux Version des True Crypt keine Systemverschlüsselung unterstützt und Windows wiederum mit cryptsetup nichts anzufangen weiß.)

Schritt 1 – Partitionierung

Als erstes werden wir die Festplatte für die beiden Systeme aufteilen. Dies ist der richtige Moment um gegebenenfalls die Platte mehrmals mit Zufallsdaten zu überschreiben um ein Rekonstruieren alter Daten unmöglich zu machen. Wege hierzu gibt es viele, im Internet wird man auch recht schnell fündig und mit der Linux Live-CD haben wir schon mal ein System hierfür zur Hand. Eine Möglichkeit dazu wäre z.B. auf der Linux Konsole:

  • dd if=/dev/urandom of=/dev/sda bs=10M

Unter der Voraussetzung, dass die zu verschlüsselnde Platte vom System unter /dev/sda registriert wurde. (Die Platten-/Partitionsbezeichnungen sind im gesamten Tutorial der aktuellen Situation anzupassen.)

Handelt es sich um eine neue Festplatte oder sind die alten Daten sicherheitstechnisch nicht von Belang, kann man sich das Überschreiben zur Not auch sparen. Obwohl anzumerken bleibt, dass dies in jedem Fall einen Sicherheitsgewinn bedeutet, denn durch das Beschreiben mit Zufallsdaten wird es am Ende nicht einmal mehr möglich sein von außen zu beurteilen wo potentiell verwertbare Datenblöcke überhaupt liegen.

Zur Partitionierung kann ein beliebiges Tool herangezogen werden, ich habe diese mit der bereits erwähnten G-Parted CD durchgeführt.

Als erstes legen wir eine primäre Partition für das Windows System an. Ich habe mich hierbei auf meine Erfahrungen mit Windows XP verlassen und diese 30GB groß gewählt, im Nachhinein muss ich sagen… Hätte ich mal 50 genommen. :grml: Die Windowspartition sollte mit NTFS formatiert werden.

Als zweite primäre Partition legen wir nun einen 200MB großen Block an, der später unsere Bootpartition für das Linux System wird. Als Dateisystem eignet sich hier Ext3 oder reiserfs. Dies wird am Ende der einzige Bereich der Festplatte sein der nicht verschlüsselt ist.

Den restlichen Plattenplatz weisen wir nun einer erweiterten Partition zu und erstellen darin zwei weitere volumes. Das eine sollte mindestens die Größe des Rams aufweisen, damit später auch der suspend to disk mode ordnungsgemäß funktioniert. Das andere wird die Systempartition für unser Ubuntu, hier genügen die veranschlagten 30GB vollkommen.

Den restlichen Platz kann man vorerst einmal unpartitioniert lassen. Später wird allerdings noch ein wenig Platz für ein temporäres Systembackup benötigt, hierfür könnte man jetzt noch eine weitere kleine Partition erzeugen.

Bei mir ergab sich nun folgende Partitionierung. Die Bezeichnungen unter Linux gebe ich mit an, damit in den nachfolgenden Schritten nachvollzogen werden kann um welche Partition es sich handelt:

  • Windows C: (30G ntfs) /dev/sda1
  • Linux /boot (200M ext3) /dev/sda2
  • Erweiterte Partition (Rest) /dev/sda3
    • Linux swap (2G swap) /dev/sda5
    • Linux root (30G reiserfs) /dev/sda6
    • Partition für Systembackup (10G reiserfs) /dev/sda7
    • Rest frei für spätere Daten

Schritt 2 – Linux installieren

Wir booten nun von der Ubuntu Live-CD und installieren das System. Hierbei muss bei der Partitionierung manuell gewählt werden, da wir /boot ja als separaten Einhängepunkt einbinden wollen. Will man später eine automatische Anmeldung einrichten, kann man aus Gründen der Einfachheit hier bereits den entsprechenden Haken setzen.

Im Anschluss starten wir das frisch installierte System und ersetzen sogleich den von Haus aus mitgelieferten Bootloader grub2 durch die Vorgängerversion grub legacy. Dies ist notwendig, da wir den Bootloader nicht im Master Boot Record der Festplatte installieren werden, sondern mit auf der Partition /boot, da sich sonst grub und der True Crypt Bootloader in die Quere kommen. (Zumindest in meinem Fall hat sich grub2 hartnäckig geweigert dies über sich ergehen zu lassen. :hate: )

Auf der Linux Konsole:

  • apt-get purge grub2 grub-pc
  • mkdir /boot/grub
  • apt-get install grub
  • grub
  • root (hd0,1)
  • setup (hd0,1)
  • quit
  • update-grub

(hd0,1) entspricht hierbei der zweiten Partition auf der ersten Festplatte, in unserem Fall also /dev/sda2 oder eben /boot. 🙂

Nun starten wir das System wieder mit der Live-CD und erstellen ein Backup des eben installierten Systems. Dieses werden wir später für die Verschlüsselung benötigen. Hierfür mounten wir zunächst sowohl die root Partition, als auch das Zielvolume und erzeugen dann einen Tarball des Systems (ohne die boot-Partition). Auf Komprimierung habe ich aus Gründen der höheren Geschwindigkeit verzichtet, schließlich wird das Backup am Ende sowieso wieder gelöscht.

Auf der Konsole:

  • mkdir /mnt/{root,bkp}
  • mount /dev/sda6 /mnt/root
  • mount /dev/sda7 /mnt/bkp
  • tar -cvf /mnt/bkp/system.tar -C /mnt/root/ ./

Schritt 3 – Windows installieren und verschlüsseln

Wir installieren nun zunächst unser Windows wie gewohnt auf der ersten Partition. Die Überreste des grub Bootloaders im MBR werden hierdurch vom Windows Bootloader überschrieben.

Im Anschluss daran starten wir das frisch installierte System.

Als erstes installieren wir eine Version von True Crypt und ein virtuelles CD-Laufwerk wie etwa Daemontools. Letzteres werden wir verwenden um True Crypt vorzugaukeln wir hätten ein Systembackup gebrannt. Wer dies wirklich tun möchte benötigt natürlich keine Daemontools. True Crypt weigert sich allerdings ohne ein Backup das System zu verschlüsseln.

In True Crypt starten wir nun mit einem Klick auf Create Volume den Verschlüsselungsdialog. Hier geben wir an, dass wir die Systempartition verschlüsseln möchten und machen im weiteren Verlauf des Dialogs folgende Angaben:

  • Standard volume (keine hidden partition)
  • Wir möchten ein multiboot System
  • Ja wir haben 2 or more operating systems
  • Bei der Frage ob wir einen nicht-Windows Bootloader verwenden muss auf jeden Fall no ausgewählt werden !
  • Kommt man zum Punkt rescue disk, lässt man True Crypt sein image erstellen, bricht das Brennen ab, lädt das image in Daemon Tools und lässt True Crypt das brav gebrannte Backup verifizieren 😉
  • Die Verschlüsselungsdaten können auf den Standardeinstellungen bleiben, wir generieren einige Zufallsdaten, wählen ein sicheres Passwort und verschlüsseln nun das System.

Startet man nun das System neu, so wird man aufgefordert sein Passwort einzugeben. Hier haben wir nun 2 Optionen. Entweder wir geben das Passwort ein und entschlüsseln und starten Windows oder wir drücken ESC und werden zum grub Bootloader weitergeleitet, wo dann unser noch unverschlüsseltes Linux auf uns wartet. 🙂

Schritt 4 – Linux System verschlüsseln

An dieser Stelle möchte ich erwähnen, dass man im ubuntuusers Wiki einige sehr gute Beiträge findet, die einem auch bei der Arbeit mit anderen Linux Systemen helfen. Wer genauere Einblicke in die Systemverschlüsselung unter Linux erhalten möchte, sollte dort auf jeden Fall mal vorbei schauen. Ich werde mich hier auf das wesentliche beschränken.

Zunächst starten wir das System jetzt wieder von der Live-CD. Hier wartet nun etwas mehr Arbeit mit der Konsole auf uns.

Wir werden zunächst unsere root Partition verschlüsseln und im Anschluss daran das Backup des Systems auf den entschlüsselt gemounteten Container zurückspielen.

Hierfür benötigen wir das Programm cryptsetup, auf der aktuellen Ubuntu Live-CD sollte dieses bereits installiert sein, sonst einfach per apt-get install cryptsetup nachinstallieren.

  • cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda6
  • cryptsetup luksOpen /dev/sda6 root
  • mkfs.reiserfs /dev/mapper/root
  • mkdir /mnt/{root,bkp}
  • mount /dev/mapper/root /mnt/root/
  • mount /dev/sda7 /mnt/bkp
  • tar -xvf /mnt/bkp/system.tar -C /mnt/root/ ./

Nach aktueller Konfiguration würde das System so nicht starten können. Es warten also noch einige Nacharbeiten auf uns, die ich im Folgenden beschreiben werde. Wir werden diese in einer chroot Umgebung im installierten System durchführen. Das erreicht man folgendermaßen:

  • cp /etc/resolv.conf /mnt/root/etc/
  • mount -o bind /dev /mnt/root/dev
  • mount -t proc none /mnt/root/proc
  • mount -t sysfs none /mnt/root/sys
  • chroot /mnt/root/
  • mount /boot

Das Programm cryptsetup benötigen wir natürlich auch auf dem installierten System, also nachinstallieren.

  • apt-get update
  • apt-get install cryptsetup

Nun müssen einige config files angepasst werden. Beginnen wir mit der Datei /etc/initramfs-tools/modules, wo wir am Ende folgende Einträge hinzufügen um dem System die Anweisung zu geben die entsprechenden Module beim Start mitzuladen. Zum Editieren kann je nach Belieben ein Konsoleneditor wie nano oder vim genutzt werden.

  • aes
  • dm-crypt
  • sha256

Wir müssen dem System außerdem mitteilen, dass es sich jetzt nicht mehr direkt auf /dev/sda6 befindet. Wir öffnen die Datei /etc/fstab und suchen den Eintrag für die Partition root (/). Die hier eingetragene UUID der Partition kopieren wir uns und ersetzen sie anschließend durch /dev/mapper/root.

Um cryptsetup mitzuteilen welche Partition es als /dev/mapper/root entschlüsseln soll, öffnen wir nun /etc/crypttab. Hier wird ein Eintrag nach dem Schema root UUID=PARTITIONSID none luks,retry=1 erstellt. PARTITIONSID ist hier durch die eben kopierte UUID zu ersetzen.

Auch dem Bootloader muss nun noch erzählt werden wo er root in Zukunft findet. Damit dies auch beim Updaten des Systems automatisch geschieht editieren wir die Starteinträge jedoch nicht manuell.
Wir öffnen die Datei /boot/grub/menu.lst und suchen den auskommentierten Eintrag # kopt=root=UUID=PARTITIONSID ro. Diesen ersetzen wir durch # kopt=root=/dev/mapper/root ro. Nach dem Verlassen des Editors updaten wir nun die Systemdateien.

update-grub
update-initramfs -u -k all

Nun ist die Verschlüsselung des Linux Systems fast abgeschlossen. Das System sollte jetzt in der Lage sein wieder aus eigener Kraft zu starten, was wir auch gleich tun.

Nach drücken der ESC Taste im True Crypt Bootloader sollte grub erscheinen und unser Ubuntu sollte nach der Eingabe des Passworts starten. Wir werden jetzt noch den swap verschlüsseln, schließlich können hier ausgelagerte Daten jederzeit eingesehen werden.

Schritt 5 – Linux swap verschlüsseln

Zunächst werden wir den swap deaktivieren, ihn dann verschlüsseln und wieder aktivieren. Dann werden wieder einige config files angepasst. Wir werden den swap so verschlüsseln, dass er kein eigenes Passwort benötigt und mit dem System automatisch entschlüsselt und aktiviert wird.

  • swapoff -a
  • /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksFormat /dev/sda5 --key-file -
  • /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksOpen /dev/sda5 swap --key-file -
  • mkswap /dev/mapper/swap
  • swapon /dev/mapper/swap

Damit ist der swap erst mal verschlüsselt und läuft wieder. Nun sorgen wir dafür, dass das System auch beim nächsten Start automatisch mit diesen Änderungen klar kommt. Wir öffnen also wieder die Datei /etc/fstab und suchen diesmal den Eintrag für den swap. Wir kopieren wieder die UUID und ersetzen sie dann durch /dev/mapper/swap.

Mit Hilfe der kopierten ID fügen wir der /etc/crypttab die Zeile swap UUID=PARTITIONSID root luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived hinzu.

Damit auch der suspend to disk mode weiterhin funktioniert editieren wir noch die Datei /etc/initramfs-tools/conf.d/resume. Hier ersetzen wir im Eintrag RESUME die UUID ebenfalls durch /dev/mapper/swap.

Nun noch eben ein update-initramfs -u -k all auf der Konsole ausführen é voila wir sind fertig. 🙂

Naja… fast. Ich hatte ja noch eine gemeinsame Datendisk versprochen und diese will ich euch natürlich nicht vorenthalten.

Schritt 6 – Daten Partition

Das Anlegen dieser Partition werden wir unter Windows durchführen, da Windows sonst Probleme hat diese zu erkennen und man erst umständlich eine ID auf der DOS-Konsole manuell hinzufügen müsste.

Wir starten also Windows und begeben uns in die Systemverwaltung (Rechtsklick auf Computer -> Verwalten). Dort wählen wir Datenträgerverwaltung woraufhin uns nun die Festplatte mit all ihren Partitionen angezeigt wird.

Die vorhin angelegte Partition für das Linux System Backup (In der Übersicht /dev/sda7) kann an dieser Stelle wieder entfernt werden.

Wir legen nun eine Partition über den restlichen freien Platz an. Zu beachten ist hier, dass man der Partition weder einen Laufwerksbuchstaben noch ein Dateisystem zuweist.

Nun wählen wir die Partition in True Crypt aus und verschlüsseln diese. Wir wählen hier Create encrypted Volume and format it. Wenn True Crypt nach einem Passwort fragt belassen wir das Feld leer, setzen aber den Haken bei use keyfile. Mit Hilfe des Wizards erstellen wir uns einen Schlüssel, fügen diesen der Partition hinzu und verschlüsseln die Partition.

Nun wäre es natürlich praktisch, wenn die Partition beim Systemstart automatisch entschlüsselt und eingebunden wird. Hierfür findet man im Internet jede Menge Lösungen die auf irgendwelche Scripts zurückgreifen.

Hier die elegantere Lösung:

Wir platzieren den Schlüssel für die Partition irgendwo auf der Systempartition, dort ist er im abgeschalteten Zustand sicher und nach dem Start verfügbar.

Nun mounten wir die Partition mit True Crypt manuell auf den Laufwerksbuchstaben, auf dem diese zukünftig liegen soll. Ein Rechtsklick auf die Partition in True Crypt offenbart einige Optionen. Hier wählen wir zunächst Add to Favorites. Es öffnet sich ein Fenster mit zusätzlichen Optionen, hier setzen wir den Haken bei Mount selected volume upon logon. Jetzt wird True Crypt bereits versuchen die Partition beim Systemstart einzubinden. Allerdings wird ihm das nicht gelingen und er fragt beim Benutzer nach, welches Passwort er benutzen soll. Unsere Partition benötigt aber nur ein Schlüsselfile und da können wir ihm auf die Sprünge helfen. Unter Settings findet sich der Eintrag Default Keyfiles, wo wir nun einfach unseren Schlüssel angeben.

Wir kopieren den Schlüssel und speichern ihn auf einem externen Medium um ihn auf das Linux System zu bringen. Anschließend starten wir den Rechner neu und starten Linux.

Zunächst muss auch hier truecrypt installiert werden.

  • apt-get install truecrypt

Wir platzieren den Schlüssel wieder im System und erstellen einen Autostarteintrag der in etwa so lautet:

  • truecrypt /dev/sda7 /data --keyfiles=/PATH/TO/KEY

/dev/sda7 ist hier die Datenpartition. /data ist das Verzeichnis an welches die Partition angemountet werden soll und mit der Option keyfiles geben wir an wo sich unser Schlüssel befindet.

Tipps

Die Datenpartition wird man vermutlich mit einem NTFS Dateisystem formatiert haben. Ubuntu bringt das hierfür nötige Modul von Haus aus mit, bei anderen Linux Systemen könnte es notwendig sein dieses erst zu installieren.

Da man ja nun direkt bei Systemstart sein Passwort eingibt ist es relativ nervig sich für die Anmeldung nochmals zu authentifizieren.

Es liegt also nahe einen automatischen Login einzurichten. Unter Windows 7 führt man hierzu auf der Kommandozeile control userpasswords2 aus um an die alte Version der Benutzerverwaltung heranzukommen. Hier kann man dann den entsprechenden Haken setzen. Ein Passwort sollte der Nutzer auf jeden Fall dennoch besitzen! Zum einen um unautorisierte Netzwerkzugriffe zu vermeiden, zum anderen damit man auch mal eben mit WIN-L seinen Desktop sperren kann.

Befinden sich Programme auf der Datenpartition die bei Systemstart ausgeführt werden sollen, kann dies durch das verzögerte Mounten der Partition zu Problemen führen. Man sollte in so einem Fall das Programm nicht über den Autostart starten, sondern über die Aufgabenplanung.

Computer -> Verwalten -> Aufgabenplanung

Hier klickt man auf Aufgabe erstellen. Der Name ist beliebig, im Reiter Trigger fügt man einen neuen hinzu. Unter Aufgabe starten wählt man bei Anmeldung (Hier kann man das Ganze wenn man möchte auch noch auf einzelne Benutzer beschränken), außerdem stellt man eine Verzögerung ein. Die kleinste Einheit von 30 Sekunden sollte in der Regel genügen. Im Reiter Aktionen fügt man ebenfalls eine neue hinzu und wählt Programm starten und das zu startende Programm aus.
Unter Bedingungen sollte man bei einem Laptop dann noch den Haken aus Nur im Netzbetrieb herausnehmen, sonst startet das Programm nicht wenn die Anmeldung im Akkubetrieb erfolgt.
Unter Einstellungen kann man noch Falls Aufgabe scheitert neustarten auswählen für den Fall dass die 30 Sekunden einmal doch nicht reichen.

3 Comments

  1. Pascal says:

    Danke für den Beitrag.. hat sehr weitergeholfen 🙂

    Grüße aus der Haßfurter Gegend

  2. […] ihrer Seite habe ich auch meinen ersten Blogbeitrag überhaupt zum Thema Systemverschlüsselung unter Linux und Windows als Gastbeitrag veröffentlicht. Auch für diese Gelegenheit noch einmal ein herzliches […]

  3. […] In Teil 1 sind wir darauf eingegangen, wie man Windows und Linux parallel verschlüsseln kann, das ist nach der hier vorgestellten Methode natürlich genauso möglich, jedoch werde ich hier nur auf eine reine Linux Installation eingehen. Ich möchte allerdings versuchen, dies möglichst auch einem Linuxeinsteiger verständlich zu ermöglichen. Im Zweifelsfall kann man hier nochmal Teil 1 finden: Datensicherheit 1 – Verschlüsseltes System. […]

Leave a Reply

Your email address will not be published. Required fields are marked *