
Werkzeuge zur Steuerung der Webcam-LED am ThinkPad X230
Dieses Repository enthält Werkzeuge, die es ermöglichen, die Softwarekontrolle über die Webcam-LED des ThinkPad X230 ohne physischen Zugriff auf das Laptop zu erlangen. Diese wurden als praktische Demonstration erstellt, dass Malware über die Webcam Video aufzeichnen kann, ohne dass die LED-Anzeige aufleuchtet.
Dies funktioniert, indem die Webcam-Firmware über USB neu geflasht wird (die X230-Webcam ist intern über USB angeschlossen), um eine Fähigkeit zur beliebigen Steuerung der LED hinzuzufügen. Dieser Ansatz betrifft wahrscheinlich viele andere Laptops, da das Anschließen der Webcam über USB und das Zulassen eines Neuflashens der Firmware ein häufiges Designmuster bei Laptop-Herstellern ist.
Details finden Sie im Vortrag "Lights Out: Covertly turning off the ThinkPad webcam LED indicator" (pdf), den ich auf der POC 2024 gehalten habe: Entdecken einer Möglichkeit, die X230-Webcam-Firmware neu zu flashen, Reverse Engineering der Firmware, Hinzufügen eines Implantats für die LED-Steuerung sowie Anmerkungen zur Übertragbarkeit des Ansatzes auf andere Laptops.
Hinweis: Das Neuflashen der Webcam-Firmware kann die Webcam unbrauchbar machen; verwenden Sie diese Werkzeuge mit Vorsicht.
Die im ThinkPad X230 (und einigen anderen Laptops derselben Ära) verwendete Webcam basiert auf dem Ricoh-R5U8710-USB-Kamera-Controller. Dieser Controller speichert einen Teil seiner Firmware, den SROM-Teil, auf dem SPI-Flash-Chip, der sich auf der Webcam-Platine befindet. Der Controller erlaubt außerdem, die Inhalte des SPI-Chips über USB neu zu flashen.
Die LED auf der X230-Webcam-Platine ist mit dem GPIO-B1-Pin des R5U8710-Controllers verbunden.
Der GPIO-B-Port ist im XDATA-Speicherraum der auf 8051 basierenden CPU im R5U8710 auf die Adresse 0x80 abgebildet.
Daher ändert das Ändern des Werts an dieser Adresse den Zustand der LED.
Dies funktioniert unabhängig davon, ob die Webcam gerade Video streamt oder nicht.
Die in diesem Repository bereitgestellten Werkzeuge ermöglichen das Flashen benutzerdefinierter Firmware mit einem über USB gesteuerten sogenannten "universal implant" auf den SPI-Chip der Webcam-Platine.
Dieses Implantat ermöglicht das Schreiben kontrollierter Daten an beliebige Adressen (innerhalb des XDATA-Speicherraums) und das Aufrufen beliebiger Adressen (innerhalb des CODE-Speicherraums; ab dem Offset 0xb000 mit XDATA überlagert).
Das universelle Implantat kann verwendet werden für:
Dynamisches Hochladen eines Implantats der zweiten Stufe in den Speicher des Kamera-Controllers und dessen Ausführung (ursprünglich für Reverse-Engineering-Zwecke verwendet);
Direktes Steuern der Webcam-LED.
Weitere Details finden Sie in den Vortragsfolien.
srom.py — liest und schreibt den SROM-Teil der Firmware einer Ricoh-R5U8710-basierten Webcam über USB.
Hinweis: Die Webcam lädt die SROM-Firmware nur während ihres Bootvorgangs. Daher müssen Sie das Laptop vom Stromnetz trennen und wieder einschalten (vollständiges Herunterfahren, nicht nur Neustart), damit die aktualisierte Firmware geladen wird;
patch_srom.py — patcht das SROM-Image der FRU-63Y0248-Webcam (nicht der ursprünglichen X230-Webcam), um das universelle Implantat hinzuzufügen.
Hinweis: Dieses Werkzeug erfordert eine Anpassung, um mit dem SROM-Image der ursprünglichen X230-Webcam zu funktionieren. Das FRU-63Y0248-SROM-Image (optional mit hinzugefügtem Implantat) kann jedoch auch auf die ursprüngliche X230-Webcam geflasht werden;
fetch.py — ruft die Inhalte des IRAM-, XDATA- oder CODE-Speicherraums über USB ab, und zwar über ein Implantat der zweiten Stufe, das dynamisch über das universelle Implantat hochgeladen wird;
led.py — schaltet die Webcam-LED ein oder aus, indem es den Wert an Adresse 0x80 im XDATA-Speicherraum über das universelle Implantat überschreibt.
srom/x230.bin — SROM-Inhalte des ursprünglichen X230-Webcam-Moduls (FRU unbekannt; Markierung 19N1L1NVRA0H auf der Platine);
srom/63Y0248.bin — SROM-Inhalte des FRU-63Y0248-Webcam-Moduls;
code/63Y0248.bin — Inhalte des CODE-Speicherraums, die aus dem FRU-63Y0248-Webcam-Modul ausgelesen wurden.
Hinweis: Das Boot-ROM befindet sich unterhalb des Offsets 0xb000 und ist identisch mit dem Boot-ROM des ursprünglichen X230-Webcam-Moduls.