
PCI Express DIY-Hacking-Toolkit für Xilinx SP605. Dieses Repository beherbergt außerdem Hyper-V Backdoor und Boot Backdoor; siehe Readme für Links und Informationen.
Allgemeine Informationen
Inhalt
SP605-Board-Konfiguration
Softwarekonfiguration
Beispiele
Verwendung der Python-API
Praktische DMA-Angriffe
Option-ROM-Angriffe
Fehlerbehebung
Erstellen des Projekts aus dem Quellcode
Dieses Repository enthält eine Reihe von Werkzeugen und Proof-of-Concepts im Zusammenhang mit dem PCI-E-Bus und DMA-Angriffen. Es enthält ein HDL-Design, das ein softwaresteuerbares PCI-E-Gen-1.1-Endpoint-Gerät für das Xilinx SP605 Evaluation Kit mit Spartan-6-FPGA implementiert. Im Vergleich zum beliebten USB3380EVB ermöglicht dieses Design die Arbeit mit rohen Transaction-Level-Paketen (TLP) des PCI-E-Busses und die Durchführung vollständiger 64-Bit-Speicher-Lese-/Schreiboperationen. Um praktische Anwendungsfälle des Designs zu demonstrieren, gibt es ein Werkzeug für Pre-Boot-DMA-Angriffe auf UEFI-basierten Maschinen, mit dem beliebige UEFI-DXE-Treiber während der Plattforminitialisierung ausgeführt werden können.
Hier ist ein Programm, das zeigt, wie man Pre-Boot-DMA-Angriffe nutzt, um eine Hyper-V-VM-Exit-Handler-Hintertür in Windows 10 und 11 mit aktivierter virtualisierungsbasierter Sicherheit einzuschleusen, die auf einer Plattform mit aktiviertem UEFI Secure Boot laufen. Der bereitgestellte Hyper-V-Backdoor-PoC könnte für Reverse-Engineering- und Exploit-Entwicklungszwecke nützlich sein; er stellt eine Schnittstelle bereit, um den Hypervisor-Zustand (VMCS, physischer/virtueller Speicher, Register usw.) aus der Gastpartition zu inspizieren und Gast-zu-Host-VM-Escape-Angriffe durchzuführen.
Ein weiteres Programm zeigt, wie man Pre-Boot-DMA-Angriffe nutzt, um beliebigen Benutzermodus- oder Kernelmodus-Code in das Windows-Betriebssystem einzuschleusen, indem der Bootvorgang mithilfe der Boot-Hintertür gekapert wird. Dieses Programm kann auch mit DMA Shell arbeiten − es ist ein Boot-Backdoor-Payload, das es ermöglicht, Konsolenbefehle über das schurkische PCI-E-Gerät auszuführen, Dateien zu übertragen und Drittanbieter-Executables zur Laufzeit in das Zielbetriebssystem zu laden.
💾 Der Hyper-V-Backdoor-Teil dieses Projekts bietet viele weitere Funktionen und Bereitstellungsoptionen als in diesem Dokument beschrieben. Du kannst ihn getrennt von den DMA-Angriffswerkzeugen und sogar ohne spezielle Hardware verwenden: Siehe seine Dokumentation
💾 Der Boot-Backdoor-Teil dieses Projekts bietet viele weitere Funktionen und Bereitstellungsoptionen als in diesem Dokument beschrieben. Du kannst ihn getrennt von den DMA-Angriffswerkzeugen und sogar ohne spezielle Hardware verwenden: Siehe seine Dokumentation
💾 Die Python-Werkzeuge aus diesem Projekt sowie die FPGA-Designs für die SP605-, ZC706- und PicoEVB-Boards können ebenfalls verwendet werden, um SMM Backdoor Next Gen per Pre-Boot-DMA-Angriff bereitzustellen. Weitere technische Details findest du in seiner Dokumentation.
🛠️ Die Python-Werkzeuge und Payloads aus diesem Projekt, einschließlich Hyper-V Backdoor und Boot Backdoor, können auch mit Boards auf Basis des Xilinx Zynq-7000 SoC verwendet werden. Es gibt ein separates Projekt für ein DMA-Angriffsdesign für das Xilinx ZC706 Evaluation Kit.
🛠️ Die Python-Werkzeuge und Payloads aus diesem Projekt, einschließlich Hyper-V Backdoor und Boot Backdoor, können auch mit dem PicoEVB-Entwicklungsboard verwendet werden. Es gibt ein separates Pico-DMA-Projekt − ein vollautonomes Pre-Boot-DMA-Angriffs-Hardware-Implantat für den M.2-Steckplatz, das beliebige UEFI-DXE-Treiber als Payload ausführen kann.
s6_pcie_microblaze.xise − Xilinx-ISE-Projektdatei.
microblaze/pcores/axis_pcie_v1_00_a/ − Benutzerdefiniertes Peripheriemodul, das es ermöglicht, den integrierten PCI-Express-Endpoint-Block des Spartan-6-FPGAs als rohen TLP-Stream mit dem MicroBlaze-Softprozessorkern zu verbinden.
sdk/srec_bootloader_0/ − Einfacher Bootloader für den MicroBlaze-Softprozessor; er verwendet das SREC-Imageformat und den Onboard-Linear-Flash-Speicher der SP605, um das Hauptprogramm von MicroBlaze zu laden und zu speichern.
sdk/main_0/ − Hauptprogramm für den MicroBlaze-Softprozessor; es leitet rohe TLP-Pakete des PCI-E-Busses über den Onboard-Ethernet-Port der SP605 und den lwIP-Netzwerkstack an eine TCP-Verbindung weiter.
python/pcie_lib.py − Python-Bibliothek zur Netzwerkinteraktion mit dem Hauptprogramm von MicroBlaze auf dem SP605-Board; sie implementiert verschiedene Low-Level- und High-Level-Abstraktionen, um aus Python-Code heraus auf der TLP-Ebene von PCI-E zu arbeiten.
python/pcie_mem.py − Befehlszeilenprogramm, das den Host-RAM durch Senden von MRd-TLPs auf dem Bildschirm oder in eine Ausgabedatei ausgibt.
python/pcie_mem_scan.py − Befehlszeilenprogramm, das den Zielhost nach physischen Speicherbereichen durchsucht, die über den PCI-E-Bus zugänglich sind; es ist nützlich für ein Sicherheitsaudit von Plattformen mit aktiviertem IOMMU (Beispiele: 1, 2, 3, 4).
python/uefi_backdoor_simple.py − Befehlszeilenprogramm für Pre-Boot-DMA-Angriffe, das einen Dummy-UEFI-Treiber in die Boot-Sequenz des Zielsystems einschleust.
python/uefi_backdoor_hv.py − Befehlszeilenprogramm für Pre-Boot-DMA-Angriffe, das eine Hyper-V-VM-Exit-Handler-Hintertür in die Boot-Sequenz des Zielsystems einschleust.
python/uefi_backdoor_boot.py − Befehlszeilenprogramm für Pre-Boot-DMA-Angriffe, das eine Boot-Hintertür in die Boot-Sequenz des Zielsystems einschleust.
python/payloads/DmaBackdoorSimple/ − Quellcode eines Dummy-UEFI-DXE-Treibers zur Verwendung mit uefi_backdoor_simple.py.
python/payloads/DmaBackdoorHv/ − Quellcode des UEFI-DXE-Treibers zur Verwendung mit uefi_backdoor_hv.py; er implementiert die Hyper-V-Backdoor-Funktionalität.
python/payloads/DmaBackdoorBoot/ − Quellcode des UEFI-DXE-Treibers zur Verwendung mit uefi_backdoor_boot.py; er implementiert die Boot-Backdoor-Funktionalität.
