Ú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.
- Na prázdném flash disku vytvořte adresář
/EFI/Boot
. - Do tohoto adresáře zkopírujte
PreLoader.efi
pod názvembootx64.efi
aHashTool.efi
beze změny názvu. - 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ázvemloader.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
.
- 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.
- 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í souborgrubx64.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.
- Na prázdném flash disku vytvořte adresář
/EFI/Boot
. - Do tohoto adresáře zkopírujte
Shim.efi
pod názvembootx64.efi
aMOKManager.efi
beze změny názvu. - Dále do stejného adresáře zkopírujte soubor
refind_x64.efi
pod názvemgrubx64.efi
a souborrefind.conf-sample
pod názvemrefind.conf
. Přidání celého adresáředrivers_x64
dovoluje rEFIndu nahlédnout do dalších souborových systémů.
Je lepší mít zde i certifikát tvůrce rEFIndu. - 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. - 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í.