
baton drop (CVE-2022-21894): Schwachstelle zur Umgehung der Sicherheitsfunktion von Secure Boot
Windows-Startanwendungen erlauben es, mit der Einstellung truncatememory Speicherblöcke zu entfernen, die „persistente“ Bereiche serialisierter Daten aus der Speicherkarte enthalten, was zu einem Secure-Boot-Bypass führt.
truncatememory entfernt den gesamten Speicher oberhalb einer angegebenen physischen Adresse aus der Speicherkarte.bootdebug, testsigning, nointegritychecks), wodurch Secure Boot gebrochen wird.Dieses Problem wurde durch zwei verschiedene Änderungen behoben:
bootmgr ist.VERSIONINFO-Ressource mit einem OriginalFilename enthält und dieser Dateiname in einer Blockliste enthalten ist (die bootmgr.exe und hvloader.exe enthält; in Nickel wurde hvloader.efi hinzugefügt, aber dies wurde nicht zurückportiert).
hvloader.exe nicht in der Blockliste von winload enthalten – ursprünglich war es enthalten, was das Hyper-V-Laden brach!OriginalFilename zwingend bootmgr.exe sein, wenn ein bestimmtes Flags-Bit gesetzt ist (das mit dem Element flightedbootmgr verwendet wird, um bootmgr von der Festplatte zu laden).Der Angreifer muss sicherstellen, dass die serialisierte Secure-Boot-Richtlinie oberhalb einer bekannten physischen Adresse zugewiesen wird.
osdevice des BCD-Eintrags eine BitLocker-verschlüsselte Partition ist, bei der der VMK mithilfe des TPM abgeleitet wurde.
Das Element avoidlowmemory kann verwendet werden, um sicherzustellen, dass alle Zuweisungen von physischem Speicher oberhalb einer angegebenen physischen Adresse erfolgen:
bootmgr und das Angeben eines benutzerdefinierten BCD-Pfads (mithilfe des Elements bcdfilepath, auch bekannt als custom:22000023) verwendet werden, um dies zu umgehen.bootmgr auszuführen, um VBS zu deaktivieren, und dann wieder zum ursprünglichen Bootloader zu wechseln.
bootmgr den VMK auf einem Windows-10+-System nicht entsiegeln kann.hvloader.efi kann mit dem Element nointegritychecks geladen werden, um eine selbstsignierte mcupdate.dll zu laden, deren Einstiegspunkt vor ExitBootServices aufgerufen wird.
Alternativ kann auf Nicht-AMD64-Systemen winload.efi vor TH2 mit dem Element testsigning verwendet werden; dies erlaubt selbstsignierte Binärdateien mit der EKU szOID_NT5_CRYPTO im Zertifikat.
Auf ARMv7-Systemen ist das Laden einer gepatchten, selbstsignierten hal.dll mit einem Import zu mcupdate.dll erforderlich, um Codeausführung zu erlangen.
Auf x86- und AMD64-Systemen muss die als mcupdate.dll geladene Datei mcupdate_*.dll heißen, wobei * die CPUID-Herstellerzeichenfolge ist (GenuineIntel, AuthenticAMD usw.).
Auf ARM64-Systemen kann diese Technik nicht verwendet werden, da der früheste verfügbare produktionssignierte Build ein WinPE von RS2 ist; daher kann derzeit nur tethered Codeausführung durchgeführt werden (mithilfe von bootdebug).
Dieses Repository enthält die folgenden Dateien:
mcupdate.dll an einer virtuellen Adresse mit aktiviertem Paging ausgeführt wird, ist es unmöglich, EFI-Funktionen direkt aufzurufen (Paging muss deaktiviert werden, um EFI-Funktionen aufzurufen; die Rückkehr zu einer virtuellen Adresse mit deaktiviertem Paging führt zu nichts Gutem).BlImgLoadPEImageEx oder BlImgLoadPEImageFromSourceBuffer mit Bit 0 in den Flags aufrufen, um eine zusätzliche Payload bei einer 1:1-Zuordnung von physischer Adresse zu virtueller Adresse zu laden.
BlImgAllocateImageBuffer mit demselben gesetzten Bit aufrufen, um Speicher bei einer 1:1-Zuordnung von physischer Adresse zu virtueller Adresse zuzuweisen; dann eine Payload selbst laden (oder sich selbst dorthin umabbilden).bootmgfw aus Windows 8 RTM und hvloader aus TH1 RTM ausnutzt.
hvloader eine Nachricht auf dem Bildschirm aus und läuft dann in einer Endlosschleife.bootmgr aus RS1 und aus TH1 RTM ausnutzt.Dieses Problem kann verwendet werden, um BitLocker-Schlüssel auszulesen (wenn Secure Boot für die Integritätsvalidierung verwendet wird).
Die Korrektur für dieses Problem behob auch ein weiteres Problem ohne CVE.
bootmgr ignoriert eine bereits im Speicher befindliche BitLocker-Schlüsseltabelle und weist eine neue zu, ohne die alte zu löschen.
bootmgr aus bootmgr laden (mit einem beliebigen osdevice, bei dem Secure Boot für die Integritätsvalidierung verwendet wird), zu WinPE booten, einen bekannten verwundbaren Treiber laden und damit die vorhandene BitLocker-Schlüsseltabelle im physischen Speicher suchen und auslesen.Es wurde noch keine bekannte verwundbare Startanwendung widerrufen.
bootmgr seine eigene Signatur prüft.Ein unvollständiger Widerruf erfolgte, und eine weitere CVE (CVE-2023-24932). Es gibt immer noch verwundbare bootmgfws, die nicht widerrufen wurden, sowie zusätzliche Patches, die nur den Fall beheben, in dem bootmgr bootmgr lädt. Es brauchte nur einen eingefügten Bootkit, um MS zum Handeln zu bewegen ;)
Wenn du kreativ genug bist, findest du einen Weg, den Widerruf von über 2000 bootmgfw-Dateien zu umgehen ;)
hvloaderbootmgr Version 19041.1081 und hvloader aus TH1 RTM ausnutzt.