Linux E X P R E S

Facebook

PreLoader a Shim

tux.png

Když Microsoft prosadil začlenění funkce Secure Boot do UEFI, objevilo se mnoho otázek ohledně možnosti provozovat se Secure Boot i Linux. Neuplynulo mnoho času a do Linuxového světa zavítaly EFI aplikace PreLoader a Shim, které umožňují Linuxu využít bezpečnostní funkce Secure Boot. Pokusím se objasnit vám fungování zmíněných aplikací a uvézt příklady použití.


Úvodem

V tomto článku uvedu pouze příklady použití PreLoaderu a Shimu. Pro pochopení některých pojmů a kroků (EFI System Partition, podepsání EFI aplikace atd.), které zde nebudou popsány, vám doporučuji článek (Ne)upravujte UEFI a Secure Boot, kde je dostatek informací týkající se problematiky Linuxu a Secure Boot.

Rozdíly v aplikacích

Tyto aplikace jsou před-zavaděčem v tom slova smyslu, že zavaděč je například Syslinux, Grub, ELILO, rEFInd atd. Obě aplikace vám umožní spustit Linux pod Secure Boot, ale každá toho dosahuje jinou cestou.)

  • PreLoader využívá hash kontrolní součty a kontroluje přítomnost uživatele.
  • Shim pracuje nejen s hash kontrolními součty, ale i s certifikáty.

Pro správnou funkci potřebují obě aplikace MOK databázi, která podle internetových zvěstí není přítomna v každém produktu s UEFI. Další podmínkou (pokud použijete v článku odkazované verze) je přítomnost certifikátů Microsoftu, které uvolnil pro další stranu.

Poznámka autora: Microsoft používá dva druhy certifikátů. Jeden je určen pro Windows 8 a druhý pro ostatní systémy (dostupný za poplatek). Většina výrobců tak implementuje pouze tyto dva certifikáty do NVRAM, čímž je umožněn start pod Secure Boot nejen Windows 8, ale i OpenSUSE, Fedoře a Ubuntu. Tyto distribuce totiž používají před-zavaděč Shim, který je podepsán zmíněným druhým certifikátem Microsoftu.

PreLoader

Autorem aplikace je Linux Foundation. Před-zavaděč PreLoader potřebuje ke své činnosti aplikaci HashTool.efi, která vytváří hash kontrolní součty pro MOK databázi.

  • PreLoader po svém startu nejprve zobrazí varování o funkci Secure Boot, což je kontrola přítomnosti uživatele. Nedojde-li totiž k potvrzení tohoto varování, ukončí PreLoader svůj start.
  • Po úspěšné kontrole přítomnosti uživatele, hledá PreLoader soubor loader.efi (musí být ve stejném adresáři), a je-li nalezen, ověří jeho kontrolní součet s MOK databází.
  • Shoduje-li se kontrolní součet souboru loader.efi se záznamem v MOK databázi, dojde ke spuštění zmíněného souboru a již žádné další kontroly podpisů neprobíhají.

V opačném případě vás uvítá menu HashTool (musí být ve stejném adresáři) s možností vytvořit hash kontrolní součet pro soubor loader.efi s následným přidáním do MOK databáze.

Tolik k teorii a než vám nabídnu příklady, které napoví více (tápete-li stále), poukážu v několika bodech na vhodnost použití před-zavaděče PreLoader.

  • Pod názvem loader.efi může být zavaděč (syslinux, Grub, LILO atd.), jiná EFI aplikace (EFI Shell, memtest atd.), nebo samotné jádro Linuxu (verze 3.3.0 a novější).
  • Není vhodný pro multiboot Linuxu a Windows 8. Pro tuto činnost jsou lepší aplikace.
  • Výhodou je používání MOK databáze, do které lze zapisovat bez nutnosti nastavovat Setup mode pro Secure Boot (nepotřebujete certifikát pro KEK, DB, PK). MOK databázi lze považovat i za nevýhodu (nemusí být ve všech UEFI).

PreLoader – příklad

Pro zde uvedený příklad jsem použil instalační DVD Debianu 7.2. Příklad je pouze na ukázku, protože instalace a následný provoz Linuxu jsou dvě rozdílné činnosti.

  1. Na prázdném flash disku vytvořte adresář /EFI/Boot.
  2. Do tohoto adresáře zkopírujte PreLoader.efi pod názvem bootx64.efi a HashTool.efi beze změny názvu.
  3. Do DVD mechaniky vložte instalační médium a vyhledejte na něm adresář /EFI/Boot. Debian zde má pouze jediný soubor (bootx64.efi je přejmenovaný Grub2), který je nutné překopírovat pod názvem loader.efi na flash disk do adresáře /EFI/Boot.

Je-li na vašem instalačním DVD médiu v adresáři /EFI/Boot více souborů, pak místo bootx64.efi vyberte pro zkopírování (a přejmenování na loader.efi) soubor grubx64.efi.

  1. Restart a nabootování z flash disku vám po několika ťuknutí do klávesnice zobrazí HashTool menu, kde vyberete volbu Enroll Hash > loader.efi a odsouhlasíte přidání kontrolního součtu do MOK databáze.
  2. Další nabootování z flash disku vám spustí instalaci z DVD v mechanice (Debian a další sice nepodporují Secure Boot, ale instalace funguje bez ohledu na tuto funkci).

V průběhu testování funkce Secure Boot jsem místo flash disku použil ESP a PreLoader uložil do samostatného adresáře. Ani nebylo zapotřebí vytvářet bootovací záznam v UEFI (pomocí efibootmgr nebo bcfg), protože používám rEFInd s automaticky generovaným menu. Kdykoliv jsem vložil instalační DVD Debianu do mechaniky, mohl jsem jej instalovat i se zapnutou funkcí Secure Boot.

Shim

Autorem aplikace je Matthew Garrett. Pro správnou funkci jsou zapotřebí dva soubory, které naleznete v tomto archivu. Shim.efi je před-zavaděčem a MokManager.efi slouží pro uložení certifikátu (formát cer) nebo hash kontrolního součtu do MOKlistu v NVRAM.

  • Shim po svém startu hledá soubor s názvem grubx64.efi (musí být ve stejném adresáři) a ověřuje jeho podpis (hash nebo certifikát) v MOK databázi.
  • Shoduje-li se podpis souboru grubx64.efi se záznamem v MOK databázi, dojde ke spuštění zmíněného souboru. Shim je však schopen požadovat ověření podpisu u aplikací, které spouští soubor grubx64.efi (toto je správný koncept funkce Secure Boot).

Není-li nalezen záznam v MOK databázi, uvítá vás obrazovka s možností přidat certifikát nebo vytvořit hash kontrolní součet s vložením do MOK databáze.

Před uvedením příkladu, opět zmíním vhodnost použití před-zavaděče Shim.

  • Pod názvem grubx64.efi se může skrývat zavaděč nebo EFI aplikace, nikoli však jádro Linuxu.
  • Přidání certifikátu je v některých případech výhodnější než samotný hash kontrolní součet.
  • Shim není vhodný pro multiboot Linuxu s Windows8 (podrobněji vysvětlím v závěru).
  • Databáze MOK je výhodou i nevýhodou, tak jako v případě použití PreLoaderu.

Pro příklad použití Shimu jsem použil flash disk se zavaděčem rEFInd.

  1. Na prázdném flash disku vytvořte adresář /EFI/Boot.
  2. Do tohoto adresáře zkopírujte Shim.efi pod názvem bootx64.efi a MOKManager.efi beze změny názvu.
  3. Dále do stejného adresáře zkopírujte soubor refind_x64.efi pod názvem grubx64.efi a soubor refind.conf-sample pod názvem refind.conf. Přidání celého adresáře drivers_x64 dovoluje rEFIndu nahlédnout do dalších souborových systémů.

    Je lepší mít zde i certifikát tvůrce rEFIndu.

  4. Po nabootování z flash disku se zobrazí jednoduché menu (za předpokladu, že soubor grubx64.efi nemá podpis v MOK), kde vyberete volbu Enroll key from disk. Objeví se dlouhé řetězce, kdy každý z nich odpovídá nějakému zařízení. Lze z nich však rozpoznat, o jaká zařízení se jedná (USB, HDD atd.). Vyberte položku obsahující USB a vyhledejte certifikát pro vložení do MOK. Nalezený certifikát si můžete prohlédnout (stisknete-li 1), nebo jej rovnou přidat (stisknete-li 0 a následně potvrdíte) do MOK databáze.
  5. Další nabootování z flash disku vám spustí zavaděč rEFInd s podporou Secure Boot.

Závěr

V sérii článků jsem se pokusil seznámit vás s problematikou Secure Boot na Linuxu. Než tuto minisérii zakončím, připomenu v několika bodech celou (nejen z pohledu dnešního článku) problematiku.

  • Správný koncept funkce Secure Boot ověřuje všechny spouštěné aplikace až po jádro operačního systému.
  • V dnešním pojednání o EFI aplikacích jsem zmínil nevhodnost PreLoaderu a Shimu pro multiboot Linuxu a Windows 8. Obě jmenované aplikace jsou schopny zajistit start zavaděči rEFIndu, který na rozdíl od Grub2 nemá problém spouštět pod Secure Boot Windows 8 a Linux. Z mého úhlu pohledu je vhodnější přidat certifikát rEFIndu (nebo jiného, vámi preferovaného zavaděče) do DB databáze. Tam totiž patří důvěryhodné certifikáty.

Poznámka autora: Grub2 používaný u distribucí podporujících Secure Boot je pomocí patchů omezen v možnosti načítání dalších modulů a obsahuje pouze základní moduly pro danou distribuci přímo ve svém jádře (grubx64.efi). Tímto je zajištěno, že dodávaný Grub2 spustí pouze podepsané operační systémy, a není tak narušen koncept funkce Secure Boot.

  • Do MOK databáze lze zapisovat bez potřeby nastavit Secure Boot do Setup mode. Což osobně považuji za nebezpečí pro koncept Secure Boot. Byť jsem studiu a testování Secure Boot věnoval jen večery po dobu několika týdnů, zkompiloval jsem si jádro Linuxu s možností přímého ukládání a mazání podpisů v Secure Boot záznamech. Jak dlouho asi potrvá využití takové možnosti a vznikne postup pro autory malwaru, kteří mimochodem mají kapitál, čas a podstatně větší znalosti než já – běžný uživatel.

Poznámka autora: Secure Boot je mladá technologie (2012) a už nyní je v jistých oblastech znát její vliv na Linux. Jádro Linuxu je totiž u některých distribucí omezováno pomocí patchů, tak jako Grub2.

  • Sice Secure Boot ani Windows neprovozuji, přesto se mi při testování multibootu Linuxu a Windows 8 velmi osvědčil zavaděč rEFInd, u kterého jsem zůstal.
  • PreLoader a Shim jsou vhodné pro tvorbu různých výměnných médií. Shim je díky možnosti práce s certifikáty přeci jen výhodnější pro tvorbu komplexnějších médií (Shim > rEFInd > vlastní grub2 = spouštění i z ISO obrazů), kdy vám pro fungování postačí jen jeden vlastní certifikát.

A to je vše. Touto sérií článků jsem sice nevyčerpal možnosti provozu/obcházení/přiohnutí funkce Secure Boot, ale snad se mi podařilo obeznámit vás se základy UEFI a touto funkcí.

Diskuze (15) Nahoru