Mittwoch, 13. Juli 2011

Truecrypt beim Systemstart - aber ohne C:\

Im heutigen Artikel will ich eine einfache Möglichkeit aufzeigen, alle wichtigen und sensiblen Daten mit Truecrypt unter Windows 7 zu verschlüsseln, ohne die Bootpartition verschlüsseln zu müssen. (Sei es aus Performance- oder anderen Gründen)

Die Anforderungen für mich waren relativ simpel:
  • C:/ sollte aus diversen Gründen nicht verschlüsselt werden
  • Mehrere andere Partitionen sollten mit TrueCrypt verschlüsselt werden
  • Beim Systemstart sollten bestimmte Partitionen entschlüsselt werden nach Passworteingabe
  • Sensible Arbeitsdaten von Programmen (z.B. mit Chatlogs oder Passwörtern) sollten auf den verschlüsselten Partitionen sicher aufbewahrt werden.
  • Es sollte Autostartprogramme geben, welche erst nach Freigabe der Partitionen starten, da sie Daten von dort benötigen.



Schritt 1: Anlegen und verschlüsseln der Partitionen
Auf das Anlegen und Verschlüsseln von nicht-System-Partitionen möchte ich hier nicht näher eingehen, dafür gibt es gute Tutorials im Netz, und die GUI von TrueCrypt ist bereits ziemlich selbsterklärend, wie ich finde.
Ich gehe also ab sofort davon aus, dass mindestens eine verschlüsselte Partition, mit ausreichend langem und sicheren Passwort angelegt wurde, und wahlweise bereits mit Daten befüllt wurde.

Ich werde an einem Beispiel mit 2, mit Truecrypt verschlüsselten Partitionen arbeiten, welche automatisch "geöffnet" werden sollen. Beide haben das gleiche Passwort bekommen, um nicht mehrere Passwörter eingeben zu müssen.

Schritt 2: Das Autostart Script
Damit gleich nach dem Start nach dem Passwort zur Entschlüsselung gefragt wird, und wir bei mehreren Partitionen nicht mehrfach das selbe Passwort eingeben müssen, schreiben wir uns ein kleines Batch-Script, welches wir im Autostart verlinken.

Hierbei stellt sich jedoch ein kleines Problem quer: Wenn man Usereingaben auf der Konsole entgegen nimmt, sind diese im Klartext lesbar. Falls einem jemand über die Schulter schaut beim Eingeben des Passwortes, kann er es folglich mitlesen. Um diese Problematik zu umgehen, werden wir einen kleinen Trick verwenden.

Zuerst erstellen wir einen Ordner - ich habe ihn "BootMount" gennant - irgendwo auf C. In meinem Fall habe ich einfach C:\BootMount\ verwendet.

Um das Passwort zu maskieren verwenden wir ein kostenloses Tool, welches unter dem Name winput hier heruntergeladen werden kann. Wir benötigen nur die winput.exe aus dem Paket, diese Datei kopieren wir in den eben erstellen Ordner.

Anschließend öffnen wir ein Textprogramm der Wahl (ich rate hier vom Standard-Editor ab, besser sollte WordPad funktionieren, welches ebenfalls in Windows enthalten ist) und erstellen eine Datei mit der Endung .cmd in dem Ordner. Ich habe sie MountDevicesOnBoot.cmd genannt.

Angefangen wird die Datei mit folgenden Zeilen, diese können 1:1 übernommen werden (Der Text "Passwort für Partitionen" kann natürlich angepasst werden wenn gewünscht):
@echo off
:: http://www.horstmuc.de/w32diald.htm#winput
FOR /F "tokens=*" %%i IN ('winput.exe "$input" "Passwort fuer Partitionen" /pass') do (SET pw=%%i)
Durch diese Zeilen wird das Passwort in einem Dialog vom Benutzer abgefragt, in welchem die Zeichen maskiert wurden. Nähere Informationen bietet die Dokumentation des Tools.
Hinweis: Ich weiche hier bewusst von der in der Dokumentation beschriebenen Vorgehensweise ab, da nach der ursprünglichen Variante zumindest kurzfristig eine Datei auf dem System erzeugt wurde, welche das Passwort im Klartext enthielt. Da ich das für problematisch halte habe ich obige Anpassungen vorgenommen, die den Output des Programmes direkt in eine Variable einlesen, ohne Umweg über eine Zwischenspeicherung.

Wir haben nun in der Variable %pw% das Passwort zur Verfügung, und können beliebig viele Partitionen damit öffnen.
Dazu müsst ihr wissen auf welchen Laufwerksbuchstaben ihr diesen öffnen wollt (damit Programme später ihre Dateien wieder finden sollte dieser nicht geändert werden nachträglich) und wie die Volume-Bezeichnung ist. Letztere findet ihr im TrueCrypt Hauptfenster.

Für jede Partition legt ihr nun eine Zeile nach folgendem Schema an:
"C:\Program Files\TrueCrypt\truecrypt" /ly /v \Device\Harddisk1\Partition1 /p %pw% /q
Am Anfang wird der Pfad zu TrueCrypt angegeben. Hier solltet ihr vergleichen ob es bei euch an der selben Stelle liegt.
Das /ly bestimmt den Laufwerksbuchstaben, auf welchem ihr nachher auf die Daten zugreifen könnt. Hier wird die Partition auf Y:\ gemappt. Nach /l also einfach den gewünschten Buchstabe angeben.
Danach kommt die Volumebezeichnung: /v \Device\Harddisk1\Partition1
/v muss stehen bleiben, die Bezeichnung danach muss durch eure Eigene ersetzt werden.
Der Rest übergibt das Passwort, hier ist keine Änderung nötig.

Diese Zeile könnt ihr für jede Partition wiederholen.

Um nach dem erfolgreichen Einbinden noch Programme zu starten, die eventuell bereits beim Start Zugriff auf die verschlüsselten Daten brauchen, könnt ihr eine Zeile wie Folgende verwenden:
start "" "C:\Program Files (x86)\Trillian\trillian.exe"
In diesem Fall lade ich Trillian an dieser Stelle, da ich sämtliche Trillian-Dateien auf die verschlüsselte Partition ausgelagert habe, da diese Passwörter und Chatlogs beinhalten. Durch die Verwendung von start "" "{Programm}" schließt sich Konsole sofort nachdem das Programm aufgerufen wurde wieder, wir wollen ja kein hässliches Konsolenfenster im Hintergrund behalten.

Meine vollständige MountDevicesOnBoot.cmd sieht nun wie folgt aus:

@echo off
:: http://www.horstmuc.de/w32diald.htm#winput
FOR /F "tokens=*" %%i IN ('winput.exe "$input" "Passwort fuer Partitionen" /pass') do (SET pw=%%i)

"C:\Program Files\TrueCrypt\truecrypt" /ly /v \Device\Harddisk1\Partition1 /p %pw% /q

"C:\Program Files\TrueCrypt\truecrypt" /lm /v \Device\Harddisk1\Partition3 /p %pw% /q

start "" "C:\Program Files (x86)\Trillian\trillian.exe"
 Diese Datei könnt ihr nun bereits testen, indem ihr die ausführt. Damit ihr das jedoch nicht bei jedem Systemstart machen müsst, erstellt ihr im einfachsten Fall eine Verknüpfung im Startmenü im Ordner Autostart:
(Start -> Alle Programme -> Rechtsklick auf Autostart-Ordner -> Öffnen; Im anschließend erscheinenden Explorerfenster -> Rechtsklick -> Neu -> Verknüpfung; Dort den Pfad zu eurer Datei angeben.)
Nun solltet ihr bei jedem Systemstart nach dem Passwort gefragt werden, und anschließend sollten eure Partitionen gemounted werden.


Schritt 3: Verschieben sensibler Programmdaten
Manche Programme bieten es von Haus aus an, andere sehen es überhaupt nicht vor: Die Angabe eines eigenen Ordners zum Speichern vom Benutzerdaten.

Firefox und Thunderbird sind 2 Kandidaten, die es sehr einfach machen:
Einfach den Profilordner an den neuen Platz verschieben, und das entsprechende Programm mit einem Zusatzparameter starten um den Profilmanager zu öffnen, dort ein neues Profil anlegen, den bereits vorhandenen, aber verschobenen Profilordner als Speicherort auswählen, und schon wird dieser wieder verwendet - er wird nicht überschrieben.
Genauere Infos hierzu gibt es unter http://support.mozilla.com/de/kb/Profile%20verwalten.

Leider sind, wie gesagt, nicht alle Programme so Nutzerfreundlich, weshalb man diesen etwas Nachhilfe erteilen muss.
Der Trick: Symbolic Links (Symlinks)
Linux Nutzern sind diese eventuell eher bekannt, da sie dort von Haus aus unterstützt werden, Windows kann damit zwar auch umgehen, bietet aber keine Möglichkeit diese anzulegen. Immerhin bietet Microsoft jedoch unter http://technet.microsoft.com/de-de/sysinternals/bb896768 ein Tool namens junctions.exe zum Download an, welches eben diese Links erstellen kann. Nachdem die junctions.exe in einen beliebigen Ordner entpackt/kopiert wurde, benötigt man eine Kommandozeile.
Einfach im Startmenü ins Suchfeld cmd eingeben, und Enter drücken.
Der Link wird durch Eingabe eines Befehl nach folgendem Schema angelegt:
C:\Pfad\zur\junctions.exe Pfad\zum\symbolischen\Link Pfad\zum\neuen\Zielordner
Abhängig davon, wo ihr die junctions.exe hingelegt habt, müsst ihr den Pfad dazu angeben, gefolgt vom Dateiname.
Danach der Link zum Ordner, unter welchem das "böse" Programm seine Dateien sucht.
Zuletzt der Link zum Ordner, in den ihr diese Dateien verschoben habt.

Um rauszufinden wo ein Programm seine Dateien sucht, hilft oft Google. Meist befinden sich die Daten in C:\Users\BENUTZERNAME\AppData\Roaming\ o.ä. (versteckte Dateien einblenden lassen um den Ordner AppData zu sehen)

Ich zeige die Vorgehensweise am FTP-Client FileZilla:
Es sucht seine Daten unter C:\Users\{NUTZERNAME}\AppData\Roaming\FileZilla.
Diese habe ich in mein verschlüsseltes Laufwerk unter Y:\Programmdaten\FileZilla kopiert, und den ursprünglichen FileZilla Ordner gelöscht.
Meine junctions.exe liegt unter Y:\Programmdaten\junctions.exe
Mein Befehl sieht folglich folgendermaßen aus:
Y:\Programmdaten\junctions.exe C:\Users\NUTZERNAME\AppData\Roaming\FileZilla Y:\Programmdaten\FileZilla
 Wichtig ist, dass ihr den alten FileZilla Ordner vorher löscht, sonst könnte es eine Fehlermeldung geben.
Wenn alles glatt gegangen ist, bekommt ihr eine Ausgabe mit "Created: .... Targeted at: ...."
FileZilla greift ab sofort auf das verschlüsselte Laufwerk zu um seine Passwörter zu laden.


(Optional) Schritt 4: Verstecken der unnützen Laufwerke
Prinzipiell seid ihr bereits fertig.  Wer jedoch noch die nutzlosen Laufwerke im Explorer verstecken möchte, welche sowieso nur eine Meldung bringen, dass man sie formatieren müsste bevor man sie verwenden kann, dem rate ich der Einfachheit halber zu nodrvman, ein Tool welches ohne Installation verwendet werden kann, um Laufwerke vom Explorer zu verstecken.


Ich hoffe ich konnte dem ein oder anderen helfen sein System etwas sicherer zu machen.
Fragen könnt ihr gerne in den Kommentaren hinterlassen.

Keine Kommentare:

Kommentar veröffentlichen