Sdílet prostřednictvím


Zmírnění paměti UEFI

Požadavky certifikační autority (CA) třetí strany Microsoftu se aktualizují a nyní vyžadují, aby obrazy UEFI obsahovaly mitigace paměti – tyto změny se odrážejí v požadavcích na podepisování UEFI – Technická komunita Microsoftu.

Agentura pro zabezpečení kybernetické bezpečnosti a infrastruktury nedávno zjistila, že ohrožení zabezpečení firmwaru jako celek stále roste. Nasazované techniky zmírnění firmwaru zatím nejsou dostatečné, aby se zabránilo moderním útokům a zmírnění rizik se neaplikují jednotně napříč implementacemi firmwaru dodavatele.

Tato zjištění jsou konzistentní s voláními z komunity Tianocore, komunity výzkumu bezpečnosti a komunity UEFI. K vylepšení zabezpečení platformy zařízení s Windows jsou potřeba základní techniky zmírnění rizik v celém ekosystému.

K realizaci tohoto cíle společnost Microsoft zavádí následující požadavky na podepisování certifikačními autoritami UEFI třetích stran.

Požadavky na podepisování pro zmírnění dopadů na paměť

Metadata PE/COFF

  1. Zarovnání sekce odeslaného souboru PE musí být v souladu s velikostí stránky. Musí to být 4 KB nebo větší mocnina 2 (například 64 KB).

  2. Příznaky sekce nesmí kombinovat IMAGE_SCN_MEM_WRITE a IMAGE_SCN_MEM_EXECUTE pro žádnou danou sekci.

V případě implementace: certifikace knihovny PE/COFF DLL

  • Vlastnosti DLL musí zahrnovat IMAGE_DLLCHARACTERISTICS_NX_COMPAT

Vzhledem k tomu, že staticky nelze rozpoznat dodržování NX, měl by firmware, který nastaví IMAGE_DLLCHARACTERISTICS_NX_COMPAT, postupovat podle těchto kroků, aby zajistil, že obraz firmwaru bude správně fungovat s aplikovanými ochranami NX.

  1. Modul kódu nesmí spouštět vlastní úpravy kódu; to znamená, že části kódu aplikace nesmí obsahovat atribut zápisu. Jakýkoli pokus o změnu hodnot v rozsahu paměti způsobí chybu spuštění.

  2. Pokud se modul kódu pokusí načíst jakýkoli interní kód do paměti pro spuštění, nebo pokud poskytuje podporu pro externí zavaděč, musí použít EFI_MEMORY_ATTRIBUTE_PROTOCOL správně. Tento volitelný protokol umožňuje volajícímu získat, nastavit a vymazat atributy čtení, zápisu a spouštění dobře definovaného rozsahu paměti.

    • Interní kód načtený do paměti musí udržovat jejich exkluzivitu mezi WRITE a EXECUTE. Atributy musí být také změněny po načtení kódu, aby bylo možné provádět.
    • Externí zavaděče musí podporovat EFI_MEMORY_ATTRIBUTE_PROTOCOL, pokud jsou dostupné v systému. Zavaděč nesmí předpokládat, že nově přidělená paměť umožňuje spouštění jakéhokoli typu kódu.
  3. Aplikace nesmí předpokládat, že všechny rozsahy paměti jsou platné; konkrétně strana 0 (obvykle na fyzické adrese 0 kB až 4 kB).

  4. Prostor zásobníku se nedá použít ke spouštění kódu.

K dispozici je nástroj pro ověření obrázku PE/COFF , který otestuje, že obrázek splňuje požadavky na metadata (požadavky na statický soubor PE/COFF) pro nastavení bitu charakteristické knihovny DLL.

Použití požadavků na omezení rizik paměti

Zarovnání oddílu obrázku umožňuje prostředí firmwaru UEFI/Platform Initialization (PI) chránit oddíl pomocí atributů tabulky stránek. Kromě toho by součásti firmwaru měly předpokládat, že atributy stránkovací tabulky se použijí na image firmwaru, aby byly povolené následující funkce:

  • Žádná ochrana paměti NX (Execute) – Všechny oddíly bez kódu budou označeny jako NX a oddíly kódu budou označeny jen pro čtení (RO), aby se zabránilo spuštění mimo oddíly kódu a přepsání oddílů kódu.

  • Stráže stránek – Stráženou stránku lze přidat před a za odpovídající přidělenou stránku. Jakýkoli pokus o přístup ke stránce stráže způsobí chybu stránky (#PF).

  • Stráže paměti – stránka hlavy a stránka konce budou umístěny před a za část paměti, kterou přidělený bazén zabírá. Doporučuje se, aby dodavatel testoval firmware pro podtečení (pomocí stránky s ochrannou hlavičkou) i přetečení (pomocí stránky s ochrannou patičkou).

  • Ochrana zásobníku procesoru – Strážná stránka je nastavená na Nenachází se v tabulce stránek a umístí se do dolní části zásobníku, aby bylo zjištěno přetečení zásobníku.

  • Ochrana ukazatele null – žádný přístup k první stránce (na adrese nula). I když starší implementace systému BIOS umístily v tomto umístění vektorovou tabulku přerušení (IVT), firmware UEFI by měl očekávat, že tato stránka je označena jako Nepřítomná, aby zachytila nulové dereference ukazatelů.

Zarovnání souboru vs. zarovnání oddílu

Linkery, jako je MSVC, obvykle nabízejí několik možností zarovnání. Například v MSVC /FILEALIGN ovlivňuje zarovnání v rámci rozložení binárního souboru, které může mít relativně větší dopad na celkovou velikost souboru. /ALIGN určuje, jak budou různé oddíly po načtení zarovnány v paměti. Toto zarovnání oddílu (/ALIGN) je důležité pro tyto změny.

Zpětná kompatibilita

Firmware platformy může zachovat zpětnou kompatibilitu při pokusu o aktivaci IMAGE_DLLCHARACTERISTICS_NX_COMPAT obnovením přidělení paměti RWX, když je načten modul, který nemá nastaven bit IMAGE_DLLCHARACTERISTICS_NX_COMPAT. Očekává se, že se tato zásada časem zruší, jakmile ekosystém přijme tuto změnu.

/ALIGN (zarovnání oddílu)

/FILEALIGN (zarovnání částí v souborech)

Prohlídka za hranice systému BIOS - Ochrana paměti v systému UEFI BIOS

Strategie CISA pro DHS pro opravu ohrožení zabezpečení pod operačním systémem mezi nejhoršími pachateli

Project Mu: Funkce ochrany paměti

Nástroj pro ověření obrázku PE/COFF

Ochrana ekosystému UEFI: Dodavatelský řetězec firmwaru je pevně (kódovaný)

Firmware UEFI – Zabezpečení SMM

Požadavky na podepisování UEFI – Technická komunita Microsoftu