
Hardware-Backdoors in x86-CPUs
: Hardware-Hintertüren in x86-CPUs
github.com/xoreaxeaxeax/rosenbridge // domas // @xoreaxeaxeax
Projekt: rosenbridge enthüllt eine Hardware-Hintertür in einigen Desktop-, Laptop- und Embedded-x86-Prozessoren.
Die Hintertür ermöglicht es Code auf Ring 3 (Userland), Prozessorschutzmaßnahmen zu umgehen, um frei auf Ring 0 (Kernel)-Daten zuzugreifen und diese zu schreiben. Während die Hintertür normalerweise deaktiviert ist (Ring-0-Ausführung erfordert, um sie zu aktivieren), haben wir festgestellt, dass sie auf einigen Systemen standardmäßig aktiviert ist.
Dieses Repository enthält Dienstprogramme, um zu überprüfen, ob Ihr Prozessor betroffen ist, die Hintertür zu schließen, falls vorhanden, sowie die Forschung und Werkzeuge, die zur Entdeckung und Analyse der Hintertür verwendet wurden.
Die Rosenbridge-Hintertür ist ein kleiner, nicht-x86-Kern, der neben dem Haupt-x86-Kern in der CPU eingebettet ist. Sie wird durch ein modellspezifisches Register-Steuerbit aktiviert und dann mit einer Launch-Instruktion umgeschaltet. Der eingebettete Kern erhält dann Befehle, die in eine speziell formatierte x86-Instruktion verpackt sind. Der Kern führt diese Befehle aus (die wir als „tief eingebetteten Befehlssatz“ bezeichnen) und umgeht dabei alle Speicherschutz- und Privilegienprüfungen.
Während die Hintertür Kernel-Zugriff zur Aktivierung erfordern sollte, wurde beobachtet, dass sie auf einigen Systemen standardmäßig aktiviert ist, sodass jeder nicht privilegierte Code den Kernel modifizieren kann.
Die Rosenbridge-Hintertür unterscheidet sich völlig von anderen öffentlich bekannten Koprozessoren auf x86-CPUs wie der Management Engine oder dem Platform Security Processor; sie ist tiefer eingebettet als jeder bekannte Koprozessor und hat nicht nur Zugriff auf den gesamten Speicher der CPU, sondern auch auf ihre Registerdatei und Ausführungspipeline.
Es wird angenommen, dass nur VIA C3-CPUs von diesem Problem betroffen sind. Die C-Serie Prozessoren werden für industrielle Automatisierung, Point-of-Sale, Geldautomaten und medizinische Hardware sowie für eine Vielzahl von Desktop- und Laptop-Computern für Verbraucher vermarktet.
Der Umfang dieser Schwachstelle ist begrenzt; Generationen von CPUs nach dem C3 enthalten diese Funktion nicht mehr.
Diese Arbeit wird als Fallstudie und Gedankenexperiment veröffentlicht, das veranschaulicht, wie Hintertüren in zunehmend komplexen Prozessoren entstehen könnten und wie Forscher und Endbenutzer solche Funktionen identifizieren könnten. Die hier angebotenen Werkzeuge und Forschungen bieten den Ausgangspunkt für immer tiefere Prozessor-Schwachstellenforschung.
Um zu überprüfen, ob Ihre CPU betroffen ist:
git clone https://github.com/xoreaxeaxeax/rosenbridge
cd rosenbridge/util
make
sudo modprobe msr
sudo ./bin/check
Das bereitgestellte Dienstprogramm muss auf Bare-Metal (nicht in einer virtuellen Maschine) ausgeführt werden und befindet sich im Alpha-Stadium. Es kann Systeme, die die Hintertür nicht enthalten, zum Absturz bringen, einen Kernel-Panic auslösen oder einfrieren.
Die hier bereitgestellten Dienstprogramme sind für eine bestimmte Prozessorfamilie und einen bestimmten Kern ausgelegt; leider werden die Werkzeuge die Hintertür übersehen, wenn sie auch nur geringfügig von der erforschten Form abweicht.
Einige Systeme haben die Hintertür standardmäßig aktiviert, sodass nicht privilegierter Code ohne Berechtigung Kernel-Zugriff erhalten kann. Wenn die Schritte unter „Überprüfung Ihrer CPU“ ergeben, dass Ihre CPU anfällig ist, können Sie ein Skript installieren, um die Hintertür früh im Bootvorgang zu schließen:
cd fix
make
sudo make install
reboot
Beachten Sie, dass selbst damit ein Angreifer mit Kernel-Zugriff die Hintertür wieder aktivieren kann. Dieses Skript dient als Grundlage zur Behebung des Problems während des Bootvorgangs, erfordert jedoch eine Anpassung für verschiedene Systeme.
Das Dienstprogramm sandsifter wird in dieser Forschung umfassend zur Aufdeckung unbekannter Instruktionen eingesetzt.
asm
Ein Assembler für den Deeply Embedded Instruction Set (DEIS). Er wandelt Programme, die in der benutzerdefinierten Rosenbridge-Assemblersprache geschrieben sind, in x86-Instruktionen um, die, wenn sie nach der Launch-Instruktion ausgeführt werden, die Befehle an den versteckten CPU-Kern senden.
esc
Ein Proof-of-Concept zur Verwendung der Rosenbridge-Hintertür für Privilegieneskalation.
fix
Eine grobe Anleitung zum Schließen der Schwachstelle auf betroffenen Systemen, soweit dies durch modellspezifische Register-Updates möglich ist.
fuzz
Eine Sammlung von Dienstprogrammen, die zum Fuzzing sowohl des x86- als auch des Rosenbridge-Kerns verwendet werden, um die unbekannte Launch-Instruktion und Bridge-Instruktion zu isolieren und das Instruktionsformat des Rosenbridge-Kerns aufzuklären.
deis
Der Fuzzer, der zur Erkundung der Effekte und Fähigkeiten des versteckten CPU-Kerns verwendet wurde.
exit
Es wird angenommen, dass bei einigen Prozessoren eine Ausstiegssequenz erforderlich ist, um am Ende einer DEIS-Sequenz zum x86-Kern zurückzukehren. Dieses Verzeichnis enthält die Dienstprogramme, die in frühen Phasen der Forschung zur Suche nach der Ausstiegssequenz verwendet wurden, wurde jedoch aufgegeben, als ein Prozessor gefunden wurde, der keine solche Sequenz benötigt.
manager
Eine Sammlung von Python-Dienstprogrammen zur Überwachung und Verwaltung von Fuzzing-Aufgaben, die über ein Netzwerk von Workern verteilt sind.
wrap
Eine abgespeckte Version des Sandsifter-Fuzzers, die zur Identifizierung der Bridge-Instruktion verwendet wird, die Befehle vom x86-Kern an den versteckten Rosenbridge-Kern sendet.
kern
Eine Sammlung von Hilfsdienstprogrammen zur Überwachung von Kernel-Speicher und Registern auf Änderungen durch gefuzze DEIS-Instruktionen.
lock
Dienstprogramme zum Sperren oder Entsperren der Rosenbridge-Hintertür.
proc
Ein Werkzeug zur Identifizierung von Mustern aus den Fuzzing-Protokollen, um Klassen von DEIS-Instruktionsverhalten zu identifizieren.
test
Ein Werkzeug, das in der frühen Forschung verwendet wurde, um zu versuchen, die Architektur des versteckten Kerns durch Ausführung bekannter RISC-Instruktionen zu identifizieren.
util
Ein Werkzeug im Alpha-Stadium, um zu erkennen, ob ein Prozessor von Rosenbridge betroffen ist oder nicht.
(TODO: Link zum Whitepaper)
(TODO: Link zu den Folien)
Die in dieser Arbeit dargestellten Details und Implikationen sind die Schlussfolgerungen und Meinungen der Autoren, abgeleitet aus der beschriebenen Forschung. Die Forschung wird mit dem Ziel durchgeführt und bereitgestellt, eine wahrgenommene Sicherheitslücke auf den beschriebenen CPUs zu identifizieren und zu beheben. VIA-Prozessoren sind bekannt für ihren geringen Stromverbrauch und ihre hervorragende Eignung für eingebettete Systeme; wir glauben, dass die beschriebene Funktionalität in gutem Glauben als nützliche Funktion für den Embedded-Markt geschaffen wurde und unbeabsichtigt auf einigen frühen Generationen des Prozessors aktiviert gelassen wurde. Es wird keine böswillige Absicht impliziert.
Projekt: rosenbridge ist ein Forschungsprojekt von Christopher Domas (@xoreaxeaxeax).