Toshiba-Notebooks: Reverse-Engineering mit Lötkolben und Pseudocode

Eigentlich wollte der Hacker Serge Bazanski nur ein etwa 14 Jahre altes Toshiba Portégé R100 zum Laufen bringen. Weil das geschenkte Gerät mit einem Bios-Passwort gesichert war, das keiner kannte, wurde der Hacker kreativ - und fand mit seinem Bekannten Michał Kowalczyk nebenbei eine Sicherheitslücke in aktuellen Business-Notebooks des Herstellers.
"Das war einfach so ein innerer Drang. Ich wollte in der Lage sein, das Gerät zu benutzen" , erzählt Bazanski auf der Sicherheitskonferenz Recon in Brüssel. Dass er während des Prozesses einen Exploit entwickeln würde, der auch mit Geräten funktioniert, die mehr als zehn Jahre später erschienen sind, ahnte er am Anfang nicht.
Zunächst probierten die Hacker aus, was man üblicherweise macht, wenn ein Rechner ein Bios-Passwort hat: die CMOS-Batterie entfernen, die Kondensatoren leeren. Mit einem Schlüssel über die Pins von Chips fahren, die wie Flashspeicher aussehen, um damit eine falsche Checksumme zu erzwingen, damit das Passwort zurückgesetzt wird. Doch all das funktionierte nicht. Es waren also Reverse-Engineering-Fähigkeiten gefragt.
Tastenkombination schaltet Challenge frei
Mit einer Tastenkombination (Strg+Tab, Strg+Enter) gelang es ihnen, eine andere Ausgabe des Bildschirms zu provozieren. Statt der Passwortabfrage erschien ein Challenge-Code auf dem Bildschirm. Sie nahmen an, dass durch die Eingabe des Response-Codes das Passwort umgangen werden könnte, was sich als zutreffend erwies. "Das ist sicher eine Funktion für den Service von Toshiba" , sagt Bazanski. Eine Art Backdoor also. Was fehlte also zum Hackerglück? Ein Key Generator, der den richtigen Response-Code ausgab. Dazu musste allerdings eine genaue Analyse des Bios her.
.jpg)
Den Chip zur Analyse einfach mit einem Lötkolben vom Board zu lösen, schien zunächst keine Option zu sein. Die Hacker versuchten also, die Bios-Updates des Herstellers zu analysieren. Tatsächlich fand sich in dem Installer für das Bios-Update die Datei BIOFCF6T.Com, in der das Bios-Update auf die Version 1.40 enthalten war. Das Problem: Die Dateien lagen in einem unbekannten Format vor. Außerdem handelt es sich bei dem Entpacker um eine 16-Bit-Exe, was den Umgang grundsätzlich erheblich verkompliziert.
Abhilfe schaffte ein Bios-Update eines verwandten Modells aus ähnlicher Zeit, das in einer 32-Bit-Version vorlag. Parallel zu der Untersuchung der Bios-Updates von Kowalczyk entschied sich Bazanski letztlich doch, den Flash-Speicher vom Motherboard des Notebooks zu entfernen, um den Inhalt des Bios auszulesen. "Es war ein langer, dunkler Abend und ich habe einfach damit angefangen" , erzählt er.
Für alle angehenden Hardwarehacker hat Bazanski noch einen guten Tipp parat: "Wenn der Chip schmal ist und lang, dann ist es RAM. Ist er breit, aber an den Seiten kurz, ist es meist Flash. Wenn der Chip quadratisch ist: googeln!"
Doch mit googeln ist es in der weiteren Analyse natürlich nicht getan ...
Ein eigenes Breakout-Board aus dem Hackerspace des Vertrauens
Um den Speicher auszulesen, entwarf Bazanski ein eigenes Breakout-Board, mit dem die Kontakte des Speichers angesteuert werden. Wenn man sich am Rechner mit einem Programm wie Kicad ein entsprechendes Design anfertigt, könne man das Board in vielen Hackerspaces ätzen lassen, sagt er. Die Kosten dafür betrügen rund 25 Euro, zu Hause sei aber weiteres Equipment notwendig, wie etwa ein Lötkolben, eine Heißluftpistole und wenn nötig etwas Alkohol, für eine ruhige Hand.
Im nächsten Schritt werden dann die Daten ausgelesen, um eine Analyse des Bios am PC vorzunehmen. Dazu analysierten die beiden Hacker zunächst das Speicherlayout und die Schreiboperationen. Den Code des Bios analysierten die Hacker dann mit dem Decompiler Ida. Intels Handbuch für den verwendeten Prozessor lieferte weitere Hinweise.
Speichermodi von 8086-Prozessoren studieren
Etwa, dass nach einem Reset des Prozessors die Register in einen bekannten Zustand versetzt würden und im Real Mode liefen - also ohne Zugriffsschutz für den Speicher. Auch moderne Prozessoren starten meist noch in diesem Modus, schalten aber zur Vermeidung von Angriffen während des Bootvorgangs in den Protected Mode mit einem virtuellen Speichermanagement, das keinen direkten Zugriff auf physische Speicheradressen ermöglicht.
So begann die Suche nach den Instruktionen für die Passwortabfrage und den Challenge/Response-Mechanismus. Für die Organisation der Abarbeitung von Instruktionen zuständig ist der Extended Instruction Pointer. Es gilt also, das entsprechende Kommando zu finden.
Nach Angaben von Bazanski und Kowalczyk liegt die Adresse des Extended Instruction Pointer (EIP), einem Register in Intels X86-Prozessoren, nach dem Start auf 0000FF0H, das zugewiesene Code-Segment (CS) im 16-Bit-Speicherraum ist FFFF0000H. Zusammen ergebe dies die Adresse 0x FFFFFFF0. Da das A20-Gate aktiviert ist, liegt die angegebene Adresse hinter den eigentlich verfügbaren 20 8086-Registern. Es liegt also eine Speichererweiterung nach dem Unreal Mode vor.
Das Bios läuft nach dem Start im 16-Bit-Protected-Mode, unterstützt aber den Unreal Mode, um mehr Speicher adressieren zu können. Über Umwege ist es daher möglich, trotz virtualisiertem Speicher auf physische Speicheradressen zuzugreifen. Für die Analyse des Codes ist es jedoch notwendig, die richtige Zuordnung des erweiterten Speichers zu finden.
Das wiederum macht den Zugriff auf den Global Descriptor Table notwendig. Darin werden Speicherbereich und Gates verwaltet. Doch wie können die notwendigen Informationen beschafft werden?
Dazu nutzten die Hacker den von Ida ausgegebenen Pseudocode für die Passwortabfrage. Alle Anfragen nach dem Response-Code landen in der Funktion f(in_buf) → out_buf. Die Analyse ergab, dass die Funktion alle Bytes an die I/O-Ports 62h und 66h sendet. Das Handbuch der Southbridge verrät, dass diese Ports an einen Mikrocontroller weitergeleitet werden, im konkreten Fall ein Embedded Controller (EC) vom Typ Renesas M306K9FC LRP. Dieser ist über einen seriellen Bus (LPC) mit der Southbridge verbunden.
Für eine genauere Analyse musste also der Inhalt eines weiteren Chips ausgelesen werden, weil für den untersuchten Rechner keine Updates für den EC existieren.
Der Lötkolben kommt erneut zum Einsatz
Bazanski entfernte also einen weiteren Chip von der Platine und erstellte ein weiteres Breakout-Board, um den Inhalt des Controllers auszulesen. Der Chip hat jedoch verschiedene Prüfmechanismen und weist Kommandos ohne richtige Authentifizierung ab. Um den Speicher auszulesen, ist also ein Schlüssel notwendig.
Ein Bug im Bootloader des Controllers ermöglicht es allerdings, über einen sogenannten Side-Channel-Angriff alle Bytes des notwendigen Schlüssels zu enumerieren. Code für die Ausnutzung des Bugs findet sich bei Github(öffnet im neuen Fenster) .
Die Analyse ergab, dass für die Challenge, mit der das Bios-Passwort umgangen werden kann, die Funktion RDTSC aufgerufen wird, mit der die Anzahl der Zyklen nach einem Neustart des PCs gemessen wird. Zusätzlich werden die ersten 8 Byte der mit MD5 gehashten Seriennummer des PCs dem String hinzugefügt.
Der von Bazanski und Kowalczyk erstellte Keygenerator nimmt den Challenge-Wert und wendet einen von Toshiba entwickelten Verschlüsselungsalgorithmus an, um den Response-Code zu berechnen. Dabei handelt es sich um eine nicht näher benannte 64-Bit-Block-Cipher.
Mit dem Keygenerator kann der Bootvorgang des Rechners fortgeführt werden, ohne das Bios-Passwort zu kennen. Für eine dauerhafte Nutzung mag das zu aufwendig sein, für einen einmaligen Angriff hingegen nicht.
Der Angriff funktioniert auch auf modernen Rechnern von Toshiba
Aus Spaß probierten die beiden Hacker ihre Vorgehensweise auch auf modernen Laptops von Toshiba aus. Dabei stellten sie fest, dass sich der Challenge/Response-Mechanismus auch hier aufrufen lässt und der Keygenerator ebenfalls funktioniert - der Mechanismus wurde also über ein Jahrzehnt lang nicht verändert.
Nach eigenen Angaben könnten sie auch ein Rootkit entwickeln, das den Host-PC über den Renesas-Controller angreift. So sei über den LPC ein direkter Speicherzugriff möglich, außerdem könnten Keylogging-Funktionen implementiert werden.
Toshiba arbeitet nach eigenem Bekunden an einer Lösung des Problems. Am 2. November 2017 teilte das Unternehmen mit, an "temporären Bios-Updates" zu arbeiten, endgültige Lösungen "für einige Modelle" sollen bis März 2018 vorliegen. Die Patches werden sich aber nach Angaben von Bazanski wohl etwas verschieben - vermutlich, weil Toshiba derzeit wie alle anderen Hersteller an Updates für die CPU-Sicherheitslücken Meltdown und Spectre arbeitet.



