Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
IntelTXE-PoC — Intel Management Engine JTAG Proof of Concept | Kitploit
Tools/GitHubGitHub/ptresearch/inteltxe-poc
Embedded-System-SicherheitPayload-GenerierungSchwachstellenanalyseReverse EngineeringDebuggerHardware-HackingHardware-SicherheitFirmware-AnalyseBinary-ExploitationArchived
GitHubptresearch/inteltxe-poc

IntelTXE-PoC

549106vor 6 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Intel Management Engine JTAG Proof of Concept

Repository anzeigen

Haftungsausschluss

Alle Informationen dienen ausschließlich zu Bildungszwecken. Die Befolgung dieser Anweisungen erfolgt auf eigene Gefahr. Weder die Autoren noch ihr Arbeitgeber sind für direkte oder indirekte Schäden oder Verluste verantwortlich, die aus Handlungen oder Unterlassungen einer Person oder Organisation auf der Grundlage der auf dieser Seite enthaltenen Informationen entstehen.

Inhalt

Einführung
Erforderliche Software
Erzeugen des Payloads
Erzeugen des Unlock-Tokens
Vorbereiten des SPI-Flash-Images
Integrieren von Dateien in das Firmware-Image
Deaktivieren der OEM-Signierung
Erstellen des Firmware-Images
Hochfahren der Haupt-CPU
Schreiben des Images auf den SPI-Flash
Vorbereiten des USB-Debug-Kabels
Patchen der OpenIPC-Konfigurationsdateien
Entschlüsseln der OpenIPC-Konfigurationsdateien
Hinzufügen des LMT-Cores zur Konfiguration
Festlegen der Umgebungsvariable IPC_PATH
Durchführen einer ersten Überprüfung der JTAG-Funktionsfähigkeit
ME-Thread anzeigen
Cores anhalten
ME-Debugging: Schnellstart
Beliebigen Speicher lesen
ROM lesen
Warum TXE?
Liste der getesteten Plattformen
Autoren
Lizenz

Einführung

Die Schwachstelle INTEL-SA-00086 ermöglicht es, JTAG für den Intel Management Engine-Core zu aktivieren. Wir haben unseren JTAG-PoC für die Plattform Gigabyte Brix GP-BPCE-3350C entwickelt. Obwohl wir angehenden Forschern empfehlen, dieselbe Plattform zu verwenden, sollten auch Plattformen anderer Hersteller mit dem Intel Apollo Lake-ChIP-Satz den PoC unterstützen (für TXE-Version 3.0.1.1107).

Erforderliche Software

Intel System Tools

Die Schwachstelle INTEL-SA-00086 beinhaltet einen Pufferüberlauf bei der Verarbeitung einer auf MFS (dem internen ME-Dateisystem) gespeicherten Datei. Der vollständige Dateipfad ist /home/bup/ct. Sie müssen sie mithilfe von Intel Flash Image Tool (FIT) in die ME-Firmware integrieren – eines der Intel-Systemtools, die Intel an OEMs von Hardware auf Basis von Intel-PCH-Chipsätzen bereitstellt. Hier ist die Struktur des Stammverzeichnisses des Intel-Systemtools-Pakets:

Screenshot

Die Dienstprogramme der Intel-ME- (TXE, SPS)-Systemtools sind nicht für Endbenutzer bestimmt – daher finden Sie sie nicht auf der offiziellen Intel-Website. Einige OEMs veröffentlichen sie jedoch als Teil von Software-Updates zusammen mit Gerätetreibern. Für die Integration unseres PoC benötigen Sie also Intel TXE System Tools Version 3.x, die online zu finden ist.

Intel System Studio

Sie müssen Intel System Studio installieren; eine Testversion kann von der Intel-Website heruntergeladen werden. In unseren Experimenten verwendeten wir Intel System Studio 2018.

Intel TXE Firmware

Der PoC zielt auf Intel-TXE-Firmware-Version 3.0.1.1107. Das SPI-Flash-Image für Gigabyte GB-BPCE-3350C Version F5 enthält die erforderliche Firmware-Version.

Python

Alle unsere Skripte sind in Python geschrieben. Wir empfehlen die Verwendung von Python 2.7. Die Skripte benötigen außerdem das Paket pycrypto. Um pycrypto zu installieren, führen Sie den folgenden Befehl aus:

root@kitploit:~
pip install pycrypto

AMIBCP

Dieses Dienstprogramm wird nur benötigt, wenn Sie die CPU hochfahren müssen.

Die EFI Human Interface Infrastructure (HII) ist ein spezieller Mechanismus zum Erstellen einer Benutzeroberfläche im UEFI sowie zum Verarbeiten und Verwalten von Benutzereingaben. EFI HII identifiziert Standardwerte für alle Optionen, einschließlich der verborgenen. Sobald die Option im Zusammenhang mit DCI gefunden ist, kann sie für die Standardkonfiguration aktiviert werden, und DCI kann durch Wiederherstellen der BIOS-Werkseinstellungen aktiviert werden. Zum Hochfahren der Haupt-CPU benötigen Sie AMI BIOS Configuration Program Version 5.xx, die ebenfalls online zu finden ist.

Erzeugen des Payloads

Führen Sie das Skript me_exp_bxtp.py aus:

root@kitploit:~
me_exp_bxtp.py -f <dateiname>

Das Skript erzeugt die erforderlichen Daten und exportiert sie in die angegebene Datei (geben Sie entweder den vollständigen Dateipfad oder, innerhalb des aktuellen Verzeichnisses, einfach einen Namen an – standardmäßig ct.bin). Diese Datei wird später von FIT verwendet.

Erzeugen des Unlock-Tokens

Führen Sie das Skript me_utok_bxtp.py aus:

root@kitploit:~
me_utok_bxtp.py -f <dateiname>

Das Skript erzeugt die erforderlichen Daten und exportiert sie in die angegebene Datei (geben Sie entweder den vollständigen Dateipfad oder, innerhalb des aktuellen Verzeichnisses, einfach einen Namen an – standardmäßig utok.bin). Diese Datei wird später von FIT verwendet.

Vorbereiten des SPI-Flash-Images

Aktivieren der DCI-Option

Überspringen Sie diesen Schritt, wenn Sie die CPU nicht hochfahren müssen.

Um die Option DCI Enable zu aktivieren, führen Sie das Dienstprogramm AMIBCP aus und öffnen Sie damit das mit Ihrer Plattform gelieferte SPI-Firmware-Image. Öffnen Sie für den Gigabyte Brix GP-BPCE-3350C die Datei, die über den oben angegebenen Gigabyte-Link heruntergeladen wurde (Pfad zur Imagedatei im Archiv: F5/image.bin).

Screenshot

Nun müssen wir die Option HDCIEN auf der Registerkarte Setup Configuration aktivieren.

Payload integrieren

Um die Dateien ct.bin und utok.bin zu integrieren, führen Sie das Dienstprogramm FIT (fit.exe) aus und öffnen Sie damit das SPI-Firmware-Image.

Screenshot

Andere Hardware-Plattform

Wenn Sie eine andere Hardware-Plattform verwenden und keinen Zugriff auf TXE 3.0.1.1107 haben, können Sie ein SPI-Flash-Image für Gigabyte GB-BPCE-3350C Version F5 herunterladen und den TXE-Abschnitt über FIT extrahieren. FIT extrahiert beim Öffnen des Images verschiedene Abschnitte des gesamten SPI-Images (SPI-Descriptor, UEFI/BIOS-Firmware, Intel-ME-Firmware und Unlock Token) und speichert sie im Ordner *"image_name"/Decomp *.

Screenshot

Sie finden die Datei mit der erforderlichen Intel-TXE-Firmware also unter /Decomp/TXE Region.bin. Öffnen Sie dann in FIT das SPI-Image für Ihre jeweilige Plattform und ersetzen Sie die Datei, die die Intel-TXE-Firmware enthält, durch die aus dem GB-Brix-3350c-Image gewonnene Version ("Intel(R) TXE Binary File" auf der Registerkarte Flash-Layout):

Screenshot

Integrieren von Dateien in das Firmware-Image

Nun müssen wir in FIT die Dateien angeben, die wir für /home/bup/ct und Unlock Token erzeugt haben. Auf der Registerkarte Debug in FIT können Sie die Trace-Hub-Binärdatei und den Unlock Token angeben, die in die Firmware integriert werden sollen. Dabei sollte es sich um die bereits erzeugten Dateien handeln.

Screenshot

Deaktivieren der OEM-Signierung

Entfernen Sie einfach das Feld OEM Public Key Hash aus FIT:

Screenshot

Erstellen des Firmware-Images

Erstellen Sie das Image, indem Sie im Menü Build die Option Build Image auswählen.

Screenshot

Ignorieren Sie die Meldung zu den BootGuard-Einstellungen (klicken Sie auf "Ja"):

Screenshot

Wenn bisher alles korrekt durchgeführt wurde, sollte der Build-Prozess erfolgreich sein und FIT gibt eine Konsolenmeldung wie die folgende aus:

Screenshot

Hochfahren der Haupt-CPU

Überspringen Sie diesen Schritt, wenn Sie die CPU nicht hochfahren müssen.

Sie müssen den HAP-Modus aktivieren, um die CPU hochzufahren. Bit 0 des Bytes am Offset +0x102 sollte gesetzt werden:

Screenshot

Schreiben des Images auf den SPI-Flash

Zum Schreiben des Images auf den SPI-Flash empfehlen wir dringend die Verwendung eines SPI-Programmers.
Sichern Sie unbedingt die Original-Firmware, damit Sie sie im Fehlerfall wiederherstellen können!

Vorbereiten des USB-Debug-Kabels

Sie benötigen ein USB-3.0-Debug-Kabel, um die Verbindung zur Plattform herzustellen. Sie können entweder ein speziell dafür hergestelltes Kabel kaufen oder sich aus einem USB-3.0-AM–AM-Kabel selbst eines basteln, indem Sie die Kontakte D+, D- und Vcc isolieren.

Screenshot

Patchen der OpenIPC-Konfigurationsdateien

Intel entwickelt und stellt Benutzern zwei Softwarepakete zur Verfügung, die für das JTAG-Debugging von Plattformen und der Haupt-CPU verwendet werden können: DAL (DFx Abstraction Layer) und OpenIPC. Sowohl DAL als auch OpenIPC sind Teil von Intel System Studio. Nach der Installation von Intel System Studio 2018 erscheint OpenIPC im folgenden Verzeichnis:

Windows

root@kitploit:~
C:\Intel\OpenIPC_1.1740.2381.100

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/openipc

Die OpenIPC-Konfiguration ist verschlüsselt und unterstützt den TXE-Core nicht. Entschlüsseln Sie daher die Konfiguration und fügen Sie ihr eine TXE-Beschreibung hinzu.

Entschlüsseln der OpenIPC-Konfigurationsdateien

Um die Konfigurationsdateien zu entschlüsseln, extrahieren Sie den Schlüssel aus der Bibliothek StructuredData (Linux: libStructuredData_x64.so, Windows: StructuredData_x64.dll) in OpenIPC/Bin mithilfe des IDA-Pro-Skripts openipc_key_extract.py. Übergeben Sie den Schlüssel (in unserem Fall 4504fb02be0a9c4c84df2a89cf508bc3) mit dem Pfad zum OpenIPC-Verzeichnis an das Skript config_decryptor.py.

root@kitploit:~
config_decryptor.py –k 4504fb02be0a9c4c84df2a89cf508bc3 –p C:\Intel\OpenIPC

Hinzufügen des LMT-Cores zur Konfiguration

Die mitgelieferte Version von OpenIPC enthält nicht die erforderlichen Informationen über den TXE-Core. Daher müssen wir einen Patch (patch.diff) auf die entschlüsselten OpenIPC-Konfigurationsdateien anwenden. So geht's:

root@kitploit:~
patch -p2 < patch.diff

Festlegen der Umgebungsvariable IPC_PATH

Setzen Sie nach der Entschlüsselung und dem Patchen die Umgebungsvariable IPC_PATH auf das neue OpenIPC-Verzeichnis, damit ipccli die modifizierte OpenIPC-Version verwendet. Zum Beispiel:

Windows

root@kitploit:~
set IPC_PATH=c:\Intel\OpenIPC\Bin

Durchführen einer ersten Überprüfung der JTAG-Funktionsfähigkeit

Der Aktivator blockiert das anschließende Laden, indem er den BUP-Prozess nach der Aktivierung von JTAG in einer Schleife hält. Nach dem Start zeigt die Plattform keine Lebenszeichen (der Monitor schaltet sich nicht ein, die Tastaturindikatoren leuchten nicht auf und kein BIOS-POST-Sound wird abgespielt). Sie müssen also über das DCI-Debugging prüfen, ob die Plattform im BUP-Modul "hängengeblieben" ist.

Wie DAL enthält die OpenIPC-Bibliothek eine Befehlszeilenschnittstelle (CLI), die in Python geschrieben und als Python-Bibliothek im Rahmen von Intel System Studio bereitgestellt wird und mit Hilfe von pip auf dem System installiert werden kann. Das Installationspaket für ipccli befindet sich unter folgendem Pfad: Windows

root@kitploit:~
<Program Files(x86)>\IntelSWTools\system_debugger_2018\debugger\ipccli\ ipccli-1.1740.544.100-py2.py3-none-any.whl

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/ipccli/ipccli-1.1811.727.100-py2.py3-none-any.whl

Um ipccli zu installieren, führen Sie den folgenden Konsolenbefehl aus:

root@kitploit:~
pip install ipccli-1.1740.544.100-py2.py3-none-any.whl

Nach der Installation ist ipccli in der Laufzeitumgebung der entsprechenden Python-Version verfügbar (derjenigen, aus der pip aufgerufen wurde). Führen Sie die folgenden Befehle in der Python-Konsole aus, um mit OpenIPC zu beginnen:

root@kitploit:~
import ipccli
ipc = ipccli.baseaccess()

Der Mechanismus zum Verbinden mit der Zielplattform über DCI wird gestartet, was zu der folgenden Konsolenausgabe führt:

Screenshot

Wenn keine Verbindung hergestellt wird – z. B. wenn die Plattform nicht eingeschaltet oder nicht physisch über DCI verbunden ist – ähneln die Meldungen der folgenden:

Screenshot

Wenn die DCI-Verbindung erfolgreich ist, stellen Sie sicher, dass das Register PERSONALITY des Geräts DFX_AGGRAGATOR gleich 3 ist. Das Register PERSONALITY hat einen IR-Code (Instruction Register) von 0x54. Um es zu lesen, führen Sie die folgenden Befehle aus:

root@kitploit:~
dfx_agg = ipc.devs.mdu_dfx_agg_tap0
ipc.irdrscan(dfx_agg, 0x54, 32)

So sollte das Ergebnis dieses Befehls aussehen:

Screenshot

ME-Debugging: Schnellstart

Das Dienstprogramm ipccli wird mit einer recht ausführlichen HTML-Dokumentation geliefert, die in einem Ordner des Python-Pakets ipccli zu finden ist:

root@kitploit:~
<Python Dir>\Lib\site-packages\ipccli\html\Index.html

ME-Thread anzeigen

Wenn die vorherigen Schritte korrekt durchgeführt wurden, ist der TXE-Core bei einer Verbindung zur Plattform über ipccli über CSE Tap zugänglich, und ipccli ermöglicht den Zugriff über den folgenden ipccli-Pfad:

root@kitploit:~
ipc.devs.cse_c0.threads[0]

Da der PoC das Laden der Plattform jedoch blockiert, bis die Haupt-CPU initialisiert ist, sind die Cores über JTAG nicht zugänglich, und auf den ME-Core kann über den folgenden Befehl zugegriffen werden:

root@kitploit:~
ipc.threads[0]

Cores anhalten

Um die ME-Prozessor-Ausführung anzuhalten, führen Sie den folgenden Befehl aus:

root@kitploit:~
me = ipc.devs.cse_c0.threads[0]
me.halt()

Um die CPU-Prozessor-Ausführung anzuhalten, führen Sie den folgenden Befehl aus:

root@kitploit:~
core = ipc.threads[0]
core.halt()

Screenshot

Die Konsole zeigt die logische Adresse des Befehls an, an dem angehalten wurde.

Beliebigen Speicher lesen

OpenIPC ermöglicht das Lesen des Speichers nach dem Anhalten, zum Beispiel:

root@kitploit:~
ipc.threads[0].mem("0xf0080004P", 4)

Sie können eine logische Adresse (sel:offset), eine lineare Adresse (L-Modifikator) oder eine physische Adresse (P-Modifikator) angeben.

ROM lesen

Der ME-Systemagent (MISA) ermöglicht es, die anfängliche physische Adresse des ROM-Bereichs zu erhalten, die den ME-Reset-Vektor enthält. Sie können die ROM-Adresse über das Register Hunit ROM Memory Base (HROMMB) am Offset 0xe20 der MISA-MMIO (0xf0000000P) ermitteln:

Screenshot

ROM liegt immer von ROMBASE bis 0xffffffff Um das ROM in eine Datei zu kopieren, führen Sie den folgenden Befehl aus:

root@kitploit:~
ipc.threads[0].memsave("<dateipfad>", "0xfffe0000p", 0x20001)

Es ist wichtig, die Größe als 0x20001 anzugeben, nicht als 0x20000 (andernfalls bekommt OpenIPC Probleme aufgrund von Schwierigkeiten mit dem 64-Bit-Zugriff, der für den 32-Bit-ME-Core nicht möglich ist). Das letzte Byte der Datei kann verworfen werden, da es nicht Teil des ROM ist.

Warum TXE?

Die Plattform bietet mehr Möglichkeiten für das Debugging ohne einen speziellen Intel-CCA-SVT-Adapter und ermöglicht das Debuggen der frühesten Phasen des TXE-Cores über ein gewöhnliches USB-Debug-Kabel.

Verwandte URLs:

Intel ME: Der Weg der statischen Analyse

Intel-DCI-Geheimnisse

Intel ME: Flash-Dateisystem erklärt

Wie man einen ausgeschalteten Computer hackt oder nicht signierten Code in der Intel Management Engine ausführt

Im Inneren der Intel Management Engine

Deaktivieren von Intel ME 11 über den undokumentierten Modus

Liste der getesteten Plattformen

  • Gigabyte Mini-PC Barebone (BRIX) GB-BPCE-3350C (rev:1.1, 1.2)
  • Beelink M1

Autoren

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

Forschungsteam

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

Dmitry Sklyarov (@_Dmit)

Lizenz

Copyright (c) 2018 Mark Ermolov, Maxim Goryachy bei Positive Technologies

Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, uneingeschränkt mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Modifizieren, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten: Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.

DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE GEWÄHRLEISTUNG, AUSDRÜCKLICH ODER IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, OB AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ERGEBEN.

Tool herunterladen