it-swarm.com.de

Angriffe über physischen Zugang zu USB (DMA ...?)

Ich frage mich, ob USB von jemandem mit physischem Zugriff auf einen angemessen gesicherten Computer ausgenutzt werden kann. Zum Beispiel ein Kiosk oder ein Laptop, der an einen Schreibtisch angeschlossen ist.

Offensichtlich sollte die Startsequenz sicher sein (BIOS/UEFI auf "nur interne Festplatte" eingestellt und passwortgeschützt ...). Außerdem sollten Mount-Optionen mit nodev,nosuid,noexec Eingeschränkt werden. Außerdem sollten Dateien mit Antivirus/Antimalware analysiert werden. .. Und so weiter.

Ich bin wirklich besorgt über Exploits wie DMA-Angriffe , bei denen ein Benutzer nur ein USB-Gerät anschließen muss, um Informationen im Speicher zu extrahieren.

Welche Funktionen könnten deaktiviert werden, um Maus und Tastatur weiterhin zuzulassen, aber die Angriffsfläche zu verringern?

11
Franklin Piat

Bevor wir beginnen, ein kurzes Wort darüber, wie USB funktioniert. Ein USB-Gerät wird an eine Hardware im Computer angeschlossen, die als USB-Host-Controller bezeichnet wird. Dadurch wird das komplexe USB-Protokoll dekodiert, das ähnlich wie ein Netzwerkprotokoll wie TCP Pakete, Prüfsummen, die Entsprechungen von SYNs, ACKs usw. enthält. Der USB-Host-Controller decodiert jedes einzelne angeschlossene USB-Gerät und präsentiert es dem Betriebssystem, wo es kann es interpretieren, wie es will (z. B. als Blockgerät, Maus oder sogar als DFÜ-Modem, wie Sie es nennen). Der USB-Controller selbst wird über PCI mit dem PCH (ähnlich einer Relaisstation) verbunden. Es ist kein sperriger PCI-Steckplatz, aber es ist trotzdem PCI. Der USB-Controller ist das, was Sie sehen, wenn Sie sich die Ausgabe von lspci auf Ihrem System ansehen und Erwähnungen von USB sehen. Sie haben wahrscheinlich einige USB-Controller, die jeweils über PCI mit dem PCH verbunden sind. Der PCH verbindet sich wiederum mit der CPU. Siehe this großartiger Stack Exchange-Beitrag, der eine sehr gute grafische Beschreibung der Anatomie des USB-Controllers enthält.

Lassen Sie uns nun die möglichen Arten von Angriffen in drei Teile aufteilen.

Vorsätzliches Verhalten

Die meisten Linux-Distributionen mounten USB-Geräte automatisch mit Dateisystemen, und einige können sogar automatisch ausgeführt werden, obwohl dies standardmäßig nur selten aktiviert ist. Dies war in den alten Tagen von Windows eher ein Problem und unter Linux nie wirklich ein Problem. USB 3.1 unterstützt jedoch DMA, daher sollten Sie dies vermeiden. Ich glaube jedoch, dass es standardmäßig deaktiviert ist, daher ist es kein massives Risiko. Beachten Sie jedoch, dass der USB-Controller dies zulässt.

Software ausnutzen

Es gab mehrere Fälle von Sicherheitslücken im Parsing-Code der Partitionstabelle, bei denen das einfache Anschließen eines USB-Sticks das System über eine speziell entwickelte, aber beschädigte Partitionstabelle ausnutzen kann. Obwohl dies ziemlich selten ist (mir sind nur zwei bekannt, die die Ausführung von willkürlichem Code ermöglichten), sind Sicherheitslücken beim automatischen Mounten von Dateisystemen viel häufiger, wenn man bedenkt, wie unglaublich komplex Dateisysteme sind. Sie analysieren eine große Anzahl von Strukturen und priorisieren die Leistung vor allem anderen. Daher werden Sanitätsprüfungen häufig nur durchgeführt, wenn sie erforderlich sind. Dies führt zu einer erhöhten Anzahl von Sicherheitslücken. Aber selbst wenn Sie von keiner dieser Funktionen betroffen sind, gibt es zahlreiche Sicherheitslücken für Ihre bevorzugte Desktop-Umgebung und für die Verwaltung der Anzeige von Ordnerinhalten, z. B. die Erstellung von Miniaturansichten ... Erst kürzlich gab es eine Sicherheitslücke in ffmpeg, die dies zuließ Telefon nach Hause zu beliebigen Servern und davor eine Sicherheitslücke in libpng, die die Ausführung von beliebigem Code ermöglichte.

Hardware ausnutzen

Dies ist bei weitem die gruseligste und am schwersten zu mildernde. Während (die meisten) USB-Protokolle DMA nicht zulassen und keines standardmäßig zulässt, ist der USB-Controller über PCI mit dem PCH verbunden, der über DMA -Fähigkeiten verfügt. Der USB-Controller verspricht dies niemals Natürlich Böses zu tun und verspricht, dass alle gemeinen USB-Geräte angewiesen werden, sich auszuschalten, wenn sie sich weigern, das Protokoll zu befolgen, aber es ist durchaus möglich, dass der Controller von einem böswilligen USB-Gerät entführt wird, das ihm beschädigte Pakete präsentiert. Sobald es die Kontrolle über das Protokoll erlangt hat, hat es die volle DMA und kann alles tun, was es will. Der einzige Weg, sich davor zu schützen, besteht darin, Ihre IOMMU zum Isolieren des PCI-Geräts zu verwenden. Es gibt verschiedene Möglichkeiten Um dies zu tun, wie zum Beispiel die Verwendung von Qubes OS, das zwar einige Mängel aufweist, aber speziell zum Schutz vor Hardware-Angriffen wie diesem entwickelt wurde. Oder Sie könnten kreativ sein. Ich habe meine eigene kleine bootfähige Linux-Distribution erstellt, die ich erstellt habe Verwendung in Kombination mit QEMU/KVM, einer Technologie namens VFIO, einem Treiber namens usbip und einigen benutzerdefinierten s Skripte und Programme, die das Problem mindern. Wenn Sie sich jedoch auf Ihre IOMMU verlassen, um Sie zu schützen, stellen Sie sicher, dass sie die Interrupt-Neuzuordnung unterstützt. Andernfalls kann es relativ einfach umgangen werden und bietet nur geringe Sicherheitsvorteile.

USB 3.0 kann besonders problematisch sein. Ich spreche nicht von 3.1, das DMA, wenn der Host OK sagt, aber außerhalb des Kernels ausgeführt wird. USB 3.0 wird als binärer Blob im BIOS ausgeführt, ähnlich wie die Intel Management Engine. Siehe - this und this . Es hat eine sehr große Angriffsfläche, die zur bereits großen Oberfläche der USB-Host-Controller-Hardware beiträgt. Sie können es in vielen BIOS deaktivieren, normalerweise unter a Name wie "xHCI-Controller". Dadurch werden alle 3.0-Ports effektiv in 2.0-Ports umgewandelt, was ihre Geschwindigkeit verringert, aber die Sicherheit ein gutes Stück verbessert. In Bezug auf die paranoide Sicherheit ist 1.0 nicht gut, 2.0 ist schlecht und 3.0 ist a Albtraum.

Es gibt einen Kernel-Patch namens grsecurity mit einer Vielzahl von Sicherheitsfunktionen, die die Sicherheit des Linux-Kernels erheblich erhöhen. Eine der Sicherheitsfunktionen ist "Zugriff auf neue USB-Geräte verweigern", was genau so funktioniert, wie es sich anhört. Entweder nach dem Umschalten einer Einwegeinstellung oder nach dem Booten wird allen neuen USB-Geräten kein Zugriff mehr gewährt. Der gesamte komplexe, potenziell anfällige Kernel-Code, der sich mit USB-Geräten befasst, ist deaktiviert. Es wird die ersten beiden Probleme vollständig abmildern, tut aber leider überhaupt nichts, um das dritte Problem abzumildern. Selbst das Kompilieren eines benutzerdefinierten Kernels und das Entfernen der USB-Treiber mindert den dritten nicht.

12
forest