Articles

Ubuntu Wiki

co je UEFI Secure Boot?

UEFI Secure boot je ověřovací mechanismus pro zajištění důvěryhodnosti kódu spuštěného firmwarem.

Správné, bezpečné použití UEFI Secure Boot vyžaduje, aby každý binární naložené v botě je ověřen proti známé klíče, který se nachází ve firmware, které označují důvěryhodných dodavatelů a zdrojů pro binární soubory, nebo důvěryhodný konkrétní binární soubory, které mohou být identifikovány pomocí kryptografického hash.

většina hardwaru x86 pochází z továrny předem načtené klávesami Microsoft. To znamená, že můžeme obvykle spolehnout na firmware na tyto systémy věřit binární soubory, které jsou podepsány společností Microsoft a Linuxové komunity se silně spoléhá na tento předpoklad pro Secure Boot do práce. Stejný postup používají například Red Hat a SUSE.

mnoho ARM a dalších architektur také podporuje UEFI Secure Boot, ale nemusí to být předběžné načítání klíčů ve firmwaru. Na těchto architekturách může být nutné znovu podepsat spouštěcí obrazy certifikátem, který je načten do firmwaru vlastníkem hardwaru.

počáteční implementační plán: implementační plán.

Podporované architektury

  • amd64: shim binární podepsán společností Microsoft a grub binární podepsané Canonical jsou uvedeny v Ubuntu hlavní archivu jako podložku nebo podepsaný grub-efi-amd64-signed.

  • arm64: 20.04 („ústřední“), shim binární podepsán společností Microsoft a grub binární podepsané Canonical jsou uvedeny v Ubuntu hlavní archivu jako podložku nebo podepsaný grub-efi-arm64-signed. Existuje chyba GRUB, která je předmětem vyšetřování, která musí být vyřešena dříve, než tato práce skončí.

Testování UEFI Secure Boot

Pokud máte zájem o testování Secure Boot na vašem systému, poraďte jak na to zde: UEFI/SecureBoot/Testování.

Jak UEFI Secure Boot funguje na Ubuntu

Na Ubuntu, všechny pre-postavený binární soubory určené k načtení jako součást procesu spouštění, s výjimkou initrd image, jsou podepsány Canonical je UEFI certifikát, který je sám o sobě implicitně důvěryhodný tím, že je zakotven v shim loader, sám podepsány společností Microsoft.

Na architekturách, nebo systémy, kde je pre-naložený podpisové certifikáty od společnosti Microsoft nejsou k dispozici, nebo naložený ve firmware, uživatelé mohou nahradit stávající podpisy na podložku nebo grub a vložte je, jak si přejí, ověření proti jejich vlastní certifikáty importované v systému firmware.

při spuštění systému firmware načte binární kód shim, jak je uvedeno v proměnných bootentry firmwaru. Ubuntu nainstaluje vlastní BootEntry v době instalace a může jej aktualizovat kdykoli je bootloader GRUB aktualizován. Vzhledem k tomu, že binární kód je podepsán společností Microsoft; je ověřen a přijat firmwarem při ověřování proti certifikátům, které jsou již ve firmwaru přítomny. Od shim binární vloží Kanonický list, stejně jako jeho vlastní důvěru databáze, další prvky spouštěcí prostředí, navíc je podepsán jeden z přijatelných certifikátů pre-naložený ve firmware, být podepsán Canonical je UEFI klíč.

Další věc, kterou načte shim, je obrázek ve druhé fázi. To může být jedna ze dvou věcí: buď GRUB, pokud se systém normálně zavádí; nebo MokManager, pokud je vyžadována správa klíčů, jak je nakonfigurováno proměnnými firmwaru(obvykle se mění, když byl systém dříve spuštěn).

při normálním zavádění; GRUB binární (grub*.efi) je načten a jeho ověření se pokouší proti všem dříve známým důvěryhodným zdrojům. Binární soubor GRUB pro Ubuntu je podepsán kanonickým klíčem UEFI, takže je úspěšně ověřen a spouštěcí proces pokračuje.

Pokud bootování pokračovat s úkoly správy klíčů, MokManager binární (mm*.efi) je nabitá. Tento binární je explicitně důvěryhodný shim tím, že podepsané dočasný klíč, který existuje pouze při překrytí binární je postaven. To znamená, že jen MokManager binární postavený s konkrétní podložku binární bude dovoleno běžet a omezuje možnost kompromisu z použití ohrožena nástroje. MokManager umožňuje každému uživateli přítomen na konzoly systému zapsat klíče, odstranit důvěryhodné klíče, zapsat binární hodnoty hash a přepínat Secure Boot ověření na podložku úrovni, ale většina úkolů vyžaduje předem stanovených zadání hesla pro potvrzení, že uživatel na konzoli je opravdu člověk, který požadované změny. Taková hesla přežívají pouze v jednom běhu shim / MokManager; a jsou vymazány, jakmile je proces dokončen nebo zrušen. Jakmile je správa klíčů dokončena, systém se restartuje a nepokračuje pouze v zavádění, protože pro úspěšné dokončení spouštění mohou být vyžadovány změny správy klíčů.

Jakmile je systém pokračuje v bootování GRUB, GRUB proces načte všechny požadované konfigurace (obvykle načítání konfigurace z ESP (EFI System Partition), což ukazuje na další konfigurační soubor na root nebo boot partition), který bude ukazovat na to, aby se obraz jádra načíst.

EFI aplikace až do tohoto bodu mají plný přístup do systému firmwaru, včetně přístupu k měnící důvěryhodný firmware proměnných, jádro zatížení musí být také ověřena proti věřit databáze. Oficiální jádra Ubuntu jsou podepsána kanonickým klíčem UEFI, jsou úspěšně ověřena a kontrola je předána jádru. Initrd obrázky nejsou ověřeny.

V případě, že neoficiální jader nebo jader postaven uživatelů, další kroky je třeba přijmout, pokud uživatelé chtějí zatížení těchto jader při zachování plné schopnosti UEFI Secure Boot. Všechna jádra musí být podepsána, aby mohla být načtena GRUB, když je povoleno UEFI Secure Boot, takže uživatel bude muset pokračovat s vlastním podpisem. Alternativně, uživatelé mohou chtít zakázat ověřování na podložku, zatímco spuštěn s povolenou volbou Secure Boot na oficiální kernel pomocí sudo mokutil –disable-ověření‘, poskytuje heslo, pokud budete vyzváni, a restartovat, nebo vypnout Secure Boot v firmware úplně.

až do tohoto okamžiku se jakékoli selhání ověření načtení obrázku setkává s Kritickou chybou, která zastaví spouštěcí proces. Systém nebude pokračovat v zavádění a po určité době se může automaticky restartovat, protože jiné proměnné BootEntry mohou obsahovat spouštěcí cesty, které jsou platné a důvěryhodné.

Jednou naložený, potvrzen jader bude zakázat firmware Boot Služby, tedy vrácení privilegií a účinně přepnutí do uživatelského režimu, kde přístup k důvěryhodným proměnné je omezen pouze pro čtení. Vzhledem k rozsáhlým oprávněním poskytovaným modulům jádra bude také nutné po načtení ověřit jakýkoli modul, který není zabudován do jádra. Moduly postavené a dodávané společností Canonical s oficiálními jádry jsou podepsány klíčem Canonical UEFI a jako takové jsou důvěryhodné. Vlastní moduly budou vyžadovat, aby uživatel podnikl nezbytné kroky k podpisu modulů před tím, než je jádro načítá. Toho lze dosáhnout pomocí příkazu „kmodsign“.

nepodepsané moduly jsou jednoduše odmítnuty jádrem. Jakýkoli pokus o jejich vložení pomocí insmod nebo modprobe selže s chybovou zprávou.

vzhledem k tomu, že mnoho uživatelů vyžaduje moduly třetích stran, aby jejich systémy fungovaly správně nebo aby některá zařízení fungovala; a že tyto třetí-party moduly vyžadují stavební lokálně na systém, k zabudování do běžícího jádra, Ubuntu poskytuje nástroje pro automatizaci a zjednodušení procesu podepisování.

Jak mohu provádět neautomatizované podepisování ovladačů?

některé projekty mohou vyžadovat použití vlastních ovladačů jádra, které nejsou nastaveny tak, aby fungovaly s DKMS. V těchto případech by měli lidé využívat nástroje obsažené v shim-podepsal balíček: update-secureboot-politika k dispozici je skript vygenerovat nový MOK (pokud ne DKMS-zabudované moduly spouští generování).

použijte následující příkaz k zápisu existujícího klíče do shim:

sudo update-secureboot-policy --enroll-key

pokud neexistuje MOK, skript ukončí zprávu za tímto účelem. Pokud je klíč již zapsán, skript se ukončí a nedělá nic. Pokud klíč existuje, ale neukáže se, že je zapsán, uživatel bude po restartu vyzván k zadání hesla, aby mohl být klíč zapsán.

můžete vytvořit nový MOK pomocí následujícího příkazu:

sudo update-secureboot-policy --new-key

A pak zapsat nově vygenerovaný klíč do překrytí s již dříve zmíněný příkaz pro tento úkol.

moduly jádra pak mohou být podepsány příkazem kmodsign (viz UEFI/SecureBoot/Signing) jako součást procesu sestavení.

Bezpečnostní důsledky v Stroj-Majitel Key management

MOK generované v době instalace nebo upgrade je stroj specifické, a povoleno pouze do jádra, nebo shim podepsat moduly jádra, o použití konkrétního KeyUsage OID (1.3.6.1.4.1.2312.16.1.2) označující omezení MOK.

poslední verze shim zahrnují logiku, která dodržuje omezení klíčů pouze pro podepisování modulů. Tyto klíče budou moci být zapsány do firmwaru v databázi shim ‚ s trust, ale budou ignorovány, když shim nebo GRUB ověřují obrázky, které se mají načíst ve firmwaru. Funkce Shim ‚s verify () úspěšně ověří pouze obrázky podepsané klíči, které neobsahují“ pouze podepisování modulů “ (1.3.6.1.4.1.2312.16.1.2) KeyUsage OID. Jádra Ubuntu používají databázi global trust (která zahrnuje jak shim, tak firmware) a při načítání modulů jádra přijme kterýkoli z přiložených klíčů jako podepisovací klíče.

Vzhledem k omezením na automaticky generované MOK a skutečnost, že uživatelé s superuser přístup do systému a přístup do systému konzole zadejte heslo požadované při registraci klíče už mají high-level přístup k systému; generované MOK klíč je držen na souborový systém jako běžné soubory vlastněné uživatelem root s read-only oprávnění. To je považováno za dostatečné k omezení přístupu k MOK pro podepisování škodlivými uživateli nebo skripty, zejména vzhledem k tomu, že v systému neexistuje žádný MOK, pokud nevyžaduje ovladače třetích stran. To omezuje možnost kompromisu od zneužití generovaného klíče MOK k podpisu škodlivého modulu jádra. To je ekvivalentní kompromisu uživatelských aplikací, které by již byly možné s přístupem superuživatele do systému, a zabezpečení je mimo rozsah UEFI Secure Boot.

předchozí systémy mohly mít v systému shim deaktivovanou validaci bezpečného zavádění. V rámci procesu upgradu budou tyto systémy migrovány, aby znovu umožnily bezpečné ověření spouštění v aplikaci shim a případně zapsaly nový klíč MOK.

MOK generace a podepisování

generování klíčů a podepisování proces je mírně liší v závislosti na tom, zda máme co do činění s úplně novou instalaci nebo upgrade systému již běží Ubuntu; tyto dva případy jsou jasně označeny níže.

Ve všech případech, pokud systém není bootování v režimu UEFI, žádné speciální modul jádra podpisu kroky nebo klíč generace se bude dít.

Pokud je Secure Boot zakázán, stále dochází k vytváření a zápisu MOK, protože uživatel může později povolit Secure Boot. Systém by měl fungovat správně, pokud tomu tak je.

uživatel nainstaluje Ubuntu na nový systém

uživatel prochází instalačním programem. Na začátku, při přípravě k instalaci a pouze tehdy, pokud systém vyžaduje třetí-party moduly pro práci, uživatel je vyzván na systému heslo, které je jasně označené jako nutné po dokončení instalace, a zatímco systém je instalován, nový MOK je generován automaticky bez dalšího zásahu uživatele.

ovladače třetích stran nebo moduly jádra požadované systémem budou automaticky vytvořeny, když je balíček nainstalován, a proces sestavení zahrnuje krok podpisu. Podpisu krok automaticky používá MOK dříve vytvořených podepsat modul, tak, že může být okamžitě načten, jakmile systém restartován a MOK je zahrnuta v systém důvěru databáze.

po dokončení instalace a restartování systému, při prvním spuštění je uživatel prezentovány s MokManager programu (část nainstalován shim loader), jako soubor v textovém režimu panely, které všechny uživatele, zapsat vytvořený MOK. Uživatel vybere „zapsat MOK“, zobrazí se otisk prstu certifikátu k zápisu, a je vyzván k potvrzení zápisu. Po potvrzení bude nový MOK zadán do firmwaru A Uživatel bude požádán o restartování systému.

po restartování systému budou ovladače třetích stran podepsané právě zapsaným MOK načteny podle potřeby.

uživatel upgrade na UEFI povolen systém Ubuntu na novou verzi, kde systém vyžaduje ovladače třetích stran

Na upgrade, podložku a podložku-podepsané balíčky jsou aktualizovány. Podložky-podepsal balíček post-install úkoly výnosů generovat nový MOK, a vyzve uživatele pro heslo, které je jasně uvedeno, jak byl povinen, jakmile proces aktualizace je dokončena a systém se restartoval.

během upgradu se aktualizují balíčky jádra a moduly třetích stran. Moduly třetích stran jsou přestavěny na nová jádra a jejich proces po sestavení je automaticky podepisuje mok.

po upgradu se uživateli doporučuje restartovat systém.

při restartu, uživatel je prezentován s programem MokManager (část instalovaného shim loader), jako sada panelů textového režimu, že všichni uživatelé zapsat generované MOK. Uživatel vybere „zapsat MOK“, zobrazí se otisk prstu certifikátu k zápisu, a je vyzván k potvrzení zápisu. Uživatel je také prezentován s výzvou k opětovnému povolení Secure Boot validation (v případě, že bylo zjištěno, že je zakázáno); a MokManager opět vyžaduje potvrzení od uživatele. Jakmile jsou všechny kroky potvrzeny, ověření shim je znovu povoleno, nový MOK bude zadán do firmwaru A Uživatel bude požádán o restartování systému.

po restartování systému budou ovladače třetích stran podepsané právě zapsaným MOK načteny podle potřeby.

Ve všech případech, po spuštění systému s UEFI Secure Boot povoleno a novější verze shim; instalace nové DKMS modul (ovladač třetí strany) bude pokračovat podepsat vestavěný modul s MOK. K tomu dojde bez interakce uživatele, pokud v systému existuje platný klíč MOK a zdá se, že je již zapsán.

Pokud žádný MOK existuje, nebo stávající MOK není zapsaný, nový klíč bude automaticky vytvořen těsně před podpisem, a uživatel bude vyzván, aby zapsat klíč tím, že poskytuje heslo, které bude vyžadováno při restartu.