Wir bei Curesec haben uns mit Direct Memory Access (DMA) als Angriffsvektor auf Rechner beschäftigt. Dies haben wir vor allem getan, um die Sicherheit unserer eigenen Rechner entsprechend sicherstellen zu können. Dieser Blogartikel stellt die Ergebnisse dieser Untersuchung vor.
Viele moderne Schnittstellen, allen voran Firewire (IEEE1394), stellen DMA zwischen den verbundenen Geräten zur Verfügung. Das heißt, ein über Firewire angeschlossenes Gerät kann auf den Speicher des Gerätes, mit welchem es verbunden ist, zugreifen. Dieser Zugriff kann sowohl lesend als auch schreibend erfolgen. Im Prinzip geht das auch über andere Bus-Systeme wie z.B. Thunderbolt.
Einige Leser werden sich jetzt denken: “Gut, dass ich keine Firewire Schnittstelle an meinem Rechner habe.” Diese Schlussfolgerung ist leider falsch. Wenn der Rechner einen PCMCIA oder PCI-Express-Einschub hat, ist man trotzdem angreifbar. Dazu muss ein Angreifer lediglich eine Firewire-Karte einschieben. Üblicherweise laden die Betriebssysteme die benötigten Treiber automatisch.
Zur Illustration des Problems haben wir während unserer Untersuchungen ein kleines Demo-Video aufgenommen.
In dem Video wird ein DMA-Angriff auf ein MacBookPro mit Mac OS X 10.6.8 gezeigt. Das Verfahren funktioniert aber auch gegen Windows, Linux und andere Systeme, die eine Firewire-Unterstützung vorweisen.
Unter Mac OS X 10.7 (“Lion”) funktioniert das Auslesen des Arbeitsspeichers im gezeigten Szenario (Nutzer angemeldet, Bildschirm gesperrt) nicht mehr auf Anhieb. Allerdings kann ein Angreifer bei Lion vor dem Auslesen des Speichers den Nutzer auf einen anderen als den momentan angemeldeten Nutzer umschalten, und der Angriff funktioniert wieder. Dies ist nur möglich, wenn „Fast User Switching“ aktiviert wurde. Da dieses standardmäßig aktiviert ist, erhöht sich das Risiko eines erfolgreichen Angriffs.
Schutzmaßnahmen
Um den eigenen Rechner vor DMA-Angriffen zu schützen hat man verschiedene Möglichkeiten. Die beste Lösung ist natürlich wenn der eigene Rechner gar nicht erst über entsprechende Schnittstellen verfügt. Das ist allerdings bei modernen Geräten normalerweise nicht gegeben.
Geübte Bastler können natürlich ihren Rechner auseinander schrauben und mit dem Lötkolben anfangen Controller raus zu löten. Diese Methode hat den Nachteil dass damit die Schnittstelle dauerhaft lahmgelegt wird. Ferner kann bei solchen Aktionen mit dem Lötkolben auch viel schief gehen, wodurch man sich seinen Rechner zerstören kann.
Die zweitbeste Lösung ist dafür zu sorgen dass die entsprechende Software wie Kernelmodule nicht geladen sind und auch nicht nachgeladen werden können. Diese Möglichkeit bieten alle gängigen Betriebssysteme.
Mac OS X schützen – 10.7 Lion
In der Systemsteuerung ‘Fast User Switching’ ausschalten. Auf der Konsole die folgenden Einstellungen vornehmen:
Mac OS X schützen – 10.6 Snow Leopard
OpenFirmware Schutz installieren. Entweder per Software von Apple, mehr Informationen dazu unter unter: http://support.apple.com/kb/HT1352
Alternativ kann man das auch einfach über die Koommandozeile erledigen:
Beim Passwort sollte man sich bewusst sein, dass dieses von root-Nutzern ausgelesen werden kann. Hier gilt wie bei allen Passwörtern: Kein Passwort verwenden, das an anderer Stelle schon im Einsatz ist.
Mehr Informationen dazu finden Sie unter:
http://ilostmynotes.blogspot.com/2012/01/os-x-open-firmware-settings-use-nvram.html
Alternativ kann man das entsprechende Kernelmodul auch entladen:
Um dauerhaft geschützt zu sein, muss man das Modul allerdings auch löschen, sonst wird es nach einem reboot möglicherweise wieder geladen:
Linux schützen
Unter Linux ist es am besten, wenn man die entsprechenden Kernel-Module entlädt:
Man kann das ohci1394 modul auch ohne DMA Unterstützung laden, das geht mit:
Andernfalls wird das Modul nach einem Neustart wieder geladen.
Windows schützen
Im Gerätemanager die PCI- und 1394-Host-Controller deaktivieren.
Links
Uwe Hermann hat eine hilfreiche Übersicht über die bisherigen Vorträge und Dokumente zu diesem Thema verfasst.
Die ‘libforensic1394′ python library stammt von Freddie Witherden.
Das ‘ramdump.py’-Skript, welches ich im Demo-Video nutze. [LINK!]
Eine schöne Übersicht über die Änderungen in Lion.