Naja das geht mir noch nicht weit genug,
ich würde den USB Stick an sich als "Hardwarekey" nutzen. Da Truecrypt sowas von Hause aus nicht kann muss man einen kleinen Umweg gehen.
Mein Ansatz ist es die Device ID mit der Seriennummer des Sticks als Container Passwort und Key-File zu nutzen, somit kann nur der die TrueCrypt Container entschlüsseln, der das Script auf dem korrekten Stick ausführt. Zusätzlich ist es mir noch wichtig das eigentliche Script unbrauchbar machen zu können wenn der Stick z.B. gestohlen wird. Daher wird der eigentliche Befehlskode nicht auf dem Stick sondern online auf einem Webspace gespeichert. Da der Befehlskode an sich kein Passwort enthält, gibt man keine sensiblen Daten Preis. So kann man jederzeit den Befehlskode, z.B. mit dem Handy löschen und der Hardware-Key ist unbrauchbar. Des weiteren war es mir wichtig, keine wiederherstellbaren Informationen auf dem Stick zu hinterlassen. Daher arbeite ich hier mit dem Programm sdelete welches Dateien sicher löschen kann.
Besser wäre es jedoch alles direkt auf einer RamDisk zu speichern!
1. Vorbereitende Maßnahmen
- SDelete herunterladen und auf dem Server einmal öffnen um die AGBs zu bestätigen
- den USB Stick der als Hardwarekey genutzt werden soll (hier reicht ein 32MB Stick o.ä.) komplett formatieren.
- Sdelete auf den Stick kopieren und in der Kommandozeile auf dem Stick "sdelete -c -p 3" ausführen
- ListUSBDrives herunterladen und die EXE Datei auf den Stick kopieren
- WGet herunterladen und auf den USB Stick entpacken.
2. Clean VBS erstellen.
Erstelle nun mit einem Texteditor die Datei
cleanusbtxt.vbs mit folgendem Inhalt:
Code:
strFilename = "out.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
Set objRegExp = New RegExp
objRegExp.Pattern = Chr(34)
objRegExp.Global = True
objRegExp.IgnoreCase = True 'False für case-sensitive
strFileContent = objRegExp.Replace(strFileContent, "")
objRegExp.Pattern = "Drive DevID = "
strFileContent = objRegExp.Replace(strFileContent, "")
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
3. Mount Script erstellen
Nun kannst du mit einem Editor das eigentliche Mount Script erstellen, nennen wir es "
tcbatch.cmd". Diese Datei lädst du dann auf einen Webspaceanbieter hoch.
Code:
@echo off
goto usbscan
:usbscan
ListUsbDrives -a > usb.txt
findstr /c:"Drive DevID = USBSTOR" usb.txt>out.txt
start /wait cleanusbtxt.vbs
goto settings
:settings
SET /p passwort=<out.txt
SET tc="C:\Program Files\TrueCrypt\TrueCrypt.exe"
SET tco=/k "out.txt" /p "%passwort%" /s /b /cn /w /s /q
SET sd=sdelete
SET sdo=-p 7
goto mount
:mount
%tc% %tco% /v test.tc /l h
goto erase
:erase
%sd% %sdo% usb.txt
%sd% %sdo% out.txt
%sd% %sdo% tcbatch.cmd
4. Start Batch erstellen.
Erstelle jetzt eine weitere Batch Datei, nennen wir sie
mount.cmd.
Code:
wget http://deinewebseite.de/tcbatch.cmd
tcbatch.cmd
5. Erklärung der Abschnitte
:usbscan
In diesem Abschnitt wird nach allen angeschlossenen USB Geräten an dem PC gesucht und das Ergebnis wird im Klartext in der Datei usb.txt gespeichert. Danach wird nur die Zeile herausgefiltert, die die DeviceID sowie die Seriennummer des Sticks enthält.
WICHTIG: Das funktioniert nur dann, wenn der USB Stick das einzige USB Laufwerk ist. Ansonsten muss der
findstr Befehl und die
VBS angepasst werden.
:settings
Dieser Abschnitt enthält einige Vorgaben um die Batch übersichtlicher zu gestalten.
- SET /p passwort=<out.txt: Der Inhalt der Datei out.txt kann nun mit dem Befehl %passwort% gesetzt werden.
- SET tc="C:\Program Files\TrueCrypt\TrueCrypt.exe": Path zur Truecrypt.exe
- SET tco=/k "out.txt" /p "%passwort%" /s /b /cn /w /s /q: Truecrypt Schalter mit Verweis auf das Containerpasswort und die Key-Datei.
- SET sd=sdelete: Das Programm sdelete kann jetzt mittels "sd" ausgeführt werden
- SET sdo=-p 7: sdelete Schalter
:mount
Dieser Abschnitt mountet das TrueCrypt Volume.
:erase
Dieser Abschnitt sorgt dafür, dass die beiden Temp Dateien sicher gelöscht werden. So ist das Passwort und die Keydatei nur in den Sekunden des mountens auf dem USB Stick gespeichert. Danach sorgt das Programm sdelete dafür, dass die beiden Dateien nicht wiederherstellbar gelöscht werden (getestet mit Imagerec).
:wget
Sinn des Ablegens auf einem Webspace ist es, den Hardware-Key Stick auch nach Diebstahl oder Verlust jederzeit aus der Ferne unbrauchbar machen zu können. Sollte jemand also mal in Besitz des Servers und des USB Sticks kommen, kannst du z.B. mit dem Handy die Datei tcbatch.cmd löschen und der Key wird somit unbrauchbar.
Noch ein kleiner Tipp. Damit du dich nicht jedes mal für Kleinigkeiten auf dem Server via Remote einloggen musst, empfehle ich dir den
Application Access Server. Dieser erlaubt es z.B. Batch Dateien über eine URL auszuführen. Somit kann man sich für einfache Aufgaben wie Server aus, Mounten, Dismounten, Links z.B. auf dem Handy ablegen und alles mit einem Tastendruck steuern. Aber dran denken das Programm nur im LAN horchen zu lassen! Sonst trennt dich nur NAT vor der sicheren Kompromitierung des Servers.