
Die erste quelloffene und öffentlich verfügbare System-Management-Mode-Backdoor für UEFI-basierte Plattformen. Gut geeignet als Allzweck-Spielwiese für verschiedene SMM-Experimente.
SMM-Backdoor für UEFI-basierte Plattformen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dies ist ein veraltetes, aufgegebenes Projekt. Für die aktuelle Version der Backdoor siehe die Projektseite von SMM Backdoor Next Gen und dessen Dokumentation:
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Weitere Informationen zu diesem Projekt finden Sie im folgenden Artikel:
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
Repository-Inhalt:
SmmBackdoor.py -- Python-Programm, das es ermöglicht, das PE-Image eines UEFI-DXE-Treibers mit Backdoor-Code zu infizieren, mit der installierten Backdoor zu kommunizieren, um SMRAM zu lesen und einige andere nützliche Dinge zu tun.
SmmBackdoor/ -- Quellcode des UEFI-Teils, der im System Management Mode ausgeführt wird.
SmmBackdoor.efi, SmmBackdoor.pdb -- Binärdatei des UEFI-Teils und deren Debugsymbole.
smm_call/ -- Proof-of-Concept-Linux-Programm, das mit der installierten Backdoor interagiert, um Root-Rechte für seinen Prozess zu erlangen.
Um das SmmBackdoor-Projekt zu erstellen, benötigen Sie einen Windows-Computer mit Visual Studio 2008 und dem EDK2-Quellcode (https://github.com/tianocore/edk2).
Schritt-für-Schritt-Anleitung:
Kopieren Sie das SmmBackdoor-Unterverzeichnis in das EDK2-Quellcode-Verzeichnis.
Bearbeiten Sie die Datei Conf/target.txt und setzen Sie den Wert der Eigenschaft ACTIVE_PLATFORM auf OvmfPkg/OvmfPkgX64.dsc.
Bearbeiten Sie OvmfPkg/OvmfPkgX64.dsc und fügen Sie am Ende der Datei die folgenden Zeilen hinzu:
#
# 3-rd party drivers
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Starten Sie die Eingabeaufforderung von Visual Studio 2008 und wechseln Sie (cd) in das EDK2-Verzeichnis.
Führen Sie Edk2Setup.bat --pull aus, um die Build-Umgebung zu konfigurieren und die erforderlichen Binärdateien herunterzuladen.
cd SmmBackdoor && build
Nach der Kompilierung wird die resultierende PE-Image-Datei unter Build/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efi erstellt.
Um SmmBackdoor.efi als Infektor-Payload am Beispiel eines Intel-DQ77KB-Motherboards auszuführen:
Sichern Sie die Mainboard-Firmware mit einem Hardware-SPI-Programmer.
Öffnen Sie das gesicherte Flash-Image in UEFITool.
Extrahieren Sie das PE-Image der FFS-Datei mit der GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8 und speichern Sie es in der Datei extracted.bin.
Infizieren Sie das extrahierte Image mit SmmBackdoor.efi mithilfe von SmmBackdoor.py:
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
Ersetzen Sie in UEFITool das ursprüngliche PE-Image durch infected.bin.
Speichern Sie das modifizierte Flash-Image in einer Datei und schreiben Sie es mit dem Programmer in das ROM des Mainboards.
Die Backdoor verfügt außerdem über Debug-Ausgabefunktionen, mit denen DXE-Phasen-Debugmeldungen auf dem Bildschirm angezeigt und Runtime-Phasen-Debugmeldungen über den COM-Port empfangen werden können.
Um SmmBackdoor.py zu verwenden, müssen Sie die Python-Bibliothek pefile (https://pypi.python.org/pypi/pefile) und das CHIPSEC-Framework (https://github.com/chipsec/chipsec) einschließlich der Python-Bindings installieren.
Unterstützte Befehle:
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - Infiziert das PE-Image des DXE-Treibers mit dem angegebenen Backdoor-Code.
SmmBackdoor.py --test - Prüft, ob die Backdoor vorhanden ist, und gibt Statusinformationen aus der Struktur BACKDOOR_INFO aus.
SmmBackdoor.py --dump-smram - Sichert alle verfügbaren SMRAM-Bereiche in Dateien.
SmmBackdoor.py --read-phys
- Gibt einen hexadezimalen Dump der physischen Speicherseite an der angegebenen Adresse aus.SmmBackdoor.py --read-virt
- Gibt einen hexadezimalen Dump der virtuellen Speicherseite an der angegebenen Adresse aus.SmmBackdoor.py --timer-enable - Aktiviert das periodische Timer-SMI, das für smm_call erforderlich ist (standardmäßig aktiviert).
SmmBackdoor.py --timer-disable - Deaktiviert das periodische Timer-SMI.
Verwendung von smm_call:
smm_call [<arg_1> [<arg_2>]] - Sendet den angegebenen Steuercode und die Argumente an die SMM-Backdoor.
-
smm_call --privesc - Bittet die Backdoor, dem aufrufenden Prozess Root-Rechte zu gewähren, und startet eine Befehlsshell.
Bitte beachten Sie, dass dieser Code nur mit dem Mainboard Intel DQ77KB getestet wurde. Sie können versuchen, ihn auf anderer UEFI-kompatibler Hardware auszuführen, aber einige Funktionen der Backdoor funktionieren möglicherweise nicht.
Geschrieben von:
Dmytro Oleksiuk (aka Cr4sh)