
baton drop (CVE-2022-21894): Vulnerabilità di bypass delle funzionalità di sicurezza di Secure Boot
Le applicazioni di avvio di Windows consentono all'impostazione truncatememory di rimuovere blocchi di memoria contenenti intervalli "persistenti" di dati serializzati dalla mappa di memoria, portando al bypass di Secure Boot.
truncatememory rimuoverà tutta la memoria al di sopra di un indirizzo fisico specificato dalla mappa di memoria.bootdebug, testsigning, nointegritychecks), rompendo così Secure Boot.Questo problema è stato corretto con due modifiche distinte:
bootmgr, l'inizializzazione dell'applicazione di avvio fallisce.VERSIONINFO contenente un OriginalFilename e se tale nome file è incluso in un blocklist (contenente bootmgr.exe e hvloader.exe; in Nickel, è stato aggiunto hvloader.efi ma non è stato backportato), il caricamento fallisce.
hvloader.exe non è incluso nella blocklist di winload - originariamente lo era, il che ha rotto il caricamento di Hyper-V!flightedbootmgr per caricare bootmgr dal disco), OriginalFilename deve essere bootmgr.exe.L'attaccante deve assicurarsi che i criteri Secure Boot serializzati vengano allocati al di sopra di un indirizzo fisico noto.
osdevice della voce BCD è una partizione crittografata con BitLocker in cui il VMK è stato derivato utilizzando il TPM.
L'elemento avoidlowmemory può essere utilizzato per garantire che tutte le allocazioni di memoria fisica avvengano al di sopra di un indirizzo fisico specificato:
bootmgr e la specifica di un percorso BCD personalizzato (usando l'elemento bcdfilepath aka custom:22000023) possono essere utilizzati per bypassare questo limite.bootmgr di Windows 8.x per disabilitare VBS e poi tornare al bootloader originale.
bootmgr di Windows 8.x non riuscirà a de-sigillare il VMK su un sistema Windows 10+.hvloader.efi può essere caricato con l'elemento nointegritychecks per caricare una mcupdate.dll autofirmata, il cui punto di ingresso verrà chiamato prima di ExitBootServices.
In alternativa, sui sistemi non AMD64, winload.efi precedente a TH2 può essere utilizzato con l'elemento testsigning; questo consente binari autofirmati con l'EKU szOID_NT5_CRYPTO nel certificato.
Sui sistemi ARMv7, per ottenere l'esecuzione di codice sarà necessario caricare una hal.dll autofirmata e modificata con un'importazione verso mcupdate.dll.
Sui sistemi x86 e AMD64, il file caricato come mcupdate.dll deve essere denominato mcupdate_*.dll, dove * è la stringa del produttore CPUID (GenuineIntel, AuthenticAMD, ecc.).
Sui sistemi ARM64, questa tecnica non può essere utilizzata perché la prima build di produzione firmata disponibile è una WinPE di RS2; quindi attualmente è possibile eseguire solo codice in modalità tethered (usando bootdebug).
Questo repository include i seguenti file:
mcupdate.dll viene eseguita a un indirizzo virtuale con paging abilitato, è impossibile chiamare direttamente le funzioni EFI (il paging deve essere disabilitato per chiamare le funzioni EFI; tornare a un indirizzo virtuale con paging disattivato non porta a nulla di buono).BlImgLoadPEImageEx o BlImgLoadPEImageFromSourceBuffer con il bit 0 impostato nei flag per caricare un payload aggiuntivo in un mapping 1:1 tra indirizzo fisico e indirizzo virtuale.
BlImgAllocateImageBuffer con lo stesso bit impostato per allocare memoria in un mapping 1:1 tra indirizzo fisico e indirizzo virtuale; quindi caricare un payload da sé (o rimapparsi lì).bootmgfw di Windows 8 RTM e hvloader di TH1 RTM.
hvloader ottenuta tramite offset e poi entra in un loop infinito.bootmgr di RS1 e hvloader di TH1 RTM.Questo problema può essere utilizzato per dumpare le chiavi BitLocker (dove Secure Boot viene utilizzato per la convalida dell'integrità).
La correzione di questo problema ha anche risolto un altro problema che non ha un CVE.
bootmgr ignora qualsiasi keytable BitLocker già presente in memoria e ne alloca una nuova, senza cancellare quella vecchia.
bootmgr RS2+ da bootmgr (specificando un osdevice arbitrario in cui Secure Boot viene utilizzato per la convalida dell'integrità), avviare WinPE, caricare un driver vulnerabile noto e usarlo per cercare e dumpare la keytable BitLocker esistente nella memoria fisica.Nessuna applicazione di avvio vulnerabile nota è stata ancora revocata.
bootmgr.C'è stata una revoca incompleta, e un altro CVE (CVE-2023-24932). Ci sono ancora bootmgfw vulnerabili che non sono stati revocati, oltre a patch aggiuntive che correggono solo il caso in cui bootmgr carica bootmgr. È bastato un bootkit copiato e incollato per far agire Microsoft ;)
Se sei abbastanza creativo, troverai un modo per aggirare la revoca di oltre 2000 file bootmgfw ;)
bootmgr versione 19041.1081 e hvloader di TH1 RTM.