Aushebeln der Festplattenverschlüsselung durch Zugriff auf den Hauptspeicher - und Gegenmittel

Dass sich der Schlüssel für den Zugriff auf eine verschlüsselte Festplatte nach dessen Eingabe im Hauptspeicher des Computers befindet, ist einleuchtend und braucht eigentlich keine weitere Erklärung. Dass dieser dann aber problemlos z. B. via Firewire ausgelesen werden kann, verdient eine genauere Betrachtung.

Zuerst aber noch dies: Festplattenverschlüsselung wird eingesetzt, damit eine Drittperson nicht auf die gespeicherten Daten zugreifen kann, wenn diese physischen Zugang zum Computer hat; wenn also z. B. der Notebook geklaut oder der Server beschlagnahmt wird. Wenn es nun gelänge, aus dem Hauptspeicher des bei der Beschlagnahme noch laufenden Server oder dem im Suspend-Modus gestohlenen Notebook den Schlüssel auszulesen, wäre der Schutz ausgehebelt. Und genau dafür sind mittlerweile mehrere Techniken (und auch Abhilfe) bekannt.


Direct Memory Access (DMA)

Mit Hilfe spezieller Leitungen können Daten zwischen dem Hauptspeicher und einer Erweiterungskarte (PCI, PC-Card, Firewire) direkt und ohne Prozessoreinwirkung ausgetauscht werden. Da es dadurch zu keinerlei Berechtigungsprüfung kommt, ist es also problemlos möglich, z. B. über eine Hotplug-PCI-Karte auf das Servermemory oder via Firewire, einer speziellen PC-Card oder einer Firewire-PC-Card auf den Hauptspeicher eines Notebooks zuzugreifen.

Eine einfache und portable Lösung unter Linux ist, das Kernel-Modul für PC-Cards zu entladen (mindestens zu den Zeiten, wo es nicht verwendet wird). Das Firewire-Modul kann ebenfalls entweder komplett ent- oder ohne DMA geladen werden. Dafür bietet sich das Script /etc/rc.local an, welches jeweils beim Systemstart ausgeführt wird und mit folgenden Befehlen ergänzt werden kann:

# Kernelmodul fuer Firewire ent- und neu ohne DMA laden
rmmod ohci1394
modprobe ohci1394 phys_dma=0

# Kernelmodul fuer PC-Cards entladen
rmmod pcmcia

Achtung: In neueren Linux-Versionen haben sich die Kernel-Module geändert. Auch kennt firewire_ohci den Parameter zum Ausschalten des DMA nicht mehr und wird zudem nach einem Suspend/Resume automatisch wieder gestartet. Wer also auf Nummer sicher gehen möchte (und darauf verzichten kann), sollte im BIOS die Unterstützung für Firewire und ExpressCard komplett ausschalten.

Es gibt bestimmt auch andere Lösungsansätze. Und auch für PCI ist das so wohl eher nicht praktikabel. Um entsprechende Hinweise bin ich dankbar.


Residentes Memory

Selbst ganz ohne Strom verbleiben Informationen noch für eine gewisse Zeit im Hauptspeicher. Auf einem IBM Thinkpad T30 Notebook konnten z. B. noch nach 30 Sekunden welche ausgelesen werden. Zudem werden die nicht mehr benötigten Daten auch nicht einfach überschrieben. Dadurch ist es denkbar, einen Computer mit einem speziellen Programm neu zu starten, das den Zugriff auf den "inaktiven" Hauptspeicher ermöglicht.

Dies kann auf zwei Möglichkeiten verhindert werden. Einerseits durch setzen eines Passwortes im BIOS, das auch nach einem einfachen Reboot abgefragt wird und zu dem es kein Master-Passwort gibt. Andererseits wird oft der Hauptspeicher während dem Bootvorgang geprüft und damit die vorhandenen Informationen überschrieben. Ein Hinweis dafür ist, wenn es im BIOS möglich ist, auch einen Quick Power-On Self-Test auszuwählen (was mensch dann natürlich unterlässt).

Eine weitere Möglichkeit, gegen die meines Erachtens noch kein Kraut gewachsen ist, haben eben (04.2008) Forscher der Princeton Universität vorgestellt. Mit einem herkömmlichen Luftdruckspray kühlten sie den Hautpseicher, so dass er minutenlang den Inhalt behielt. Dann konnte der RAM-Baustein gemütlich in einen zweiten Rechner eingebaut - und ausgelesen werden.


Quellen:

Vortrag von Torbjörn Pettersson am Chaos Communication Camp 2007:
Cryptographic key recovery from Linux memory dumps

Princeton Universität - Center for Information Technology Policy:
Lest We Remember: Cold Boot Attacks on Encryption Keys

Linux Magazin Nr. 6/2008:
Einbruch? Spuren und Daten nach Crackversuchen oder Beschlagnahme richtig sichern