Úvodem
Minimálně férové bude zmínit se, že Secure Boot neprovozuji a myš je jediný mnou používaný produkt Microsoftu. Nevykládejte si to špatně. Osobně považuji Secure Boot za přínos do celého procesu zabezpečení, ale tato funkce mne příliš omezuje v mé zábavě (i vrtání se v Linuxu může být pro někoho zábava :-) ) a jak již bylo zmíněno, nepoužívám Windows.
Funkce Secure Boot je nejvíce využitelná právě pro uživatele Windows, neboť je pro útočníky mnohem jednodušší nalézt zranitelnost rozšířeného operačního systému s jedním jádrem a infikovat jeho start malwarem, než hledat zranitelnost v mnoha variacích linuxového jádra. V úplném bezpečí však není ani Linux.
Na Secure Boot jsem narazil až při obnově hardwaru v listopadu 2013. Pouhá zvídavost je zodpovědná za mnohatýdenní studium a testování této funkce. Velkou inspirací se pro mé pokusy stali Matthew Garrett (shim) a Roderick W. Smith (rEFInd).
Cílem tohoto článku je obeznámit vás nejen se základními aplikacemi pro manipulaci s UEFI a Secure Boot, ale i poukázat na možná řešení komplikací spojených s provozem Linuxu pod Secure Boot.
UEFI boot
UEFI po otestování hardwaru nenahlíží do MBR, ale do EFI System Partition, což je samostatný bootovací oddíl, kam operační systémy ukládají EFI aplikace zodpovědné za jejich start. Na tomto systémovém oddílu si každý nainstalovaný operační systém vytvoří vlastní adresář obsahující vše potřebné pro jeho start, a nedochází tak k ovlivňování startu ostatních systémů jako u MBR. EFI aplikací mohou být univerzální zavaděče (ELILO, Grub2 atd.), různé utilitky (např. test paměti, shell), samozřejmě zavaděč daného operačního systému a v případě Linuxu i kernel samotný.
Oproti BIOSu je zde podstatná změna v pořadí bootování (v UEFI např. Startup>Boot). Každý nainstalovaný operační systém vytvoří v NVRAM záznam o umístění spouštěcí efi aplikace na EFI System Partition a tento spouštěcí parametr přidá (alespoň v mém případě) právě do pořadníku bootování. Zde je poté nutno nastavit položku, z jaké chcete bootovat (USB, CD, Fedora, Windows atd.). Umístění nejen tohoto seznamu se liší dle výrobce a zhlédnutí příručky k základní desce vám napomůže.
EFI System Partition
Systémový oddíl typu FAT32 s nastaveným příznakem boot (nikoliv boot_legacy). Nesmí být součástí LVM, raidu nebo být šifrován. V běžném provozu jej Linux připojuje do /boot/efi
. Velikost oddílu je diskutabilní, ale v mnoha případech je zmiňována velikost 512MB (kvůli FAT32 formátování ve Windows). Po nainstalování mnoha operačních systémů však objem dat nepřesáhl 50 MB.
Na tomto oddíle můžete nalézt “hlavní adresář” /efi/boot
obsahující soubor bootx64.efi
. Selže-li čtení ze všech zařízení (např. kvůli smazání NVRAM), pokusí se UEFI nalézt na EFI System Partition právě tento soubor a spustí jej (pokud existuje). Tohoto chování lze velmi dobře využít (a také zneužít) při tvorbě USB a dalších médií spustitelných pod UEFI.
Funkce Secure Boot
Bezpečnostní rozšíření v UEFI pro start certifikovaných operačních systémů. Se zapnutým Secure Boot nespustíte software, který nemá veřejný klíč tvůrce operačního systému uložený na základní desce v NVRAM. Toto chování zabraňuje spouštět škodlivý kód (vir) před samotným operačním systémem (Windows), ale zároveň znepříjemňuje používání vlastních konfigurací linuxové komunitě. Naštěstí lze ve většině případů tuto funkci na x86 platformě vypnout. Na ARM architektuře však Secure boot vypnout nelze.
Opět však záleží na výrobci hardwaru, jakým způsobem UEFI a Secure Boot implementuje do svého výrobku. Vždyť co výrobce, to jiný BIOS, natož UEFI a Secure Boot. Zakoupíte-li si například nový notebook s Windows 8, bude s největší pravděpodobností Secure Boot aktivní – k jeho vypnutí se sice můžete svobodně rozhodnout, ale provést to lze až po odsouhlasení podmínek používání operačního systému firmy Microsoft (ach ta svoboda).
Provoz operačních systémů
Předpokládám, že většina uživatelů bude chtít provozovat Linux společně s Windows 8. Než však začne vaše cesta úpravou Secure Boot, musíte si nejprve ujasnit, jakou Linuxovou distribuci chcete na počítači provozovat, protože některé kroky nejsou v jistých případech nutné. Pokusím se tedy nastínit vaše možnosti na několika příkladech.
Pro korektnost testů jsem využil nabídky Microsoftu a stáhl devadesátidenní trial verzi Windows 8.1. Z linuxových distribucí bylo nainstalováno openSUSE 13.1, Fedora 19, Ubuntu 13.10, Debian 7.2 a Mint 16.
Příklad č.1
- Windows 8
- openSUSE
Za openSUSE si můžete dosadit Fedoru nebo Ubuntu. Tyto tři distribuce jsou schopny startovat pod Secure Boot. Jejich start využívá aplikaci Shim, která kontroluje podpis nejen zavaděče (Grub2), ale i spouštěného linuxového jádra. Důležitá je shoda podpisů jednotlivých kroků zavádění se záznamy v databázi klíčů. Grub2 instalovaný těmito distribucemi by vám neměl činit problémy při spouštění Windows a za určitých podmínek i vlastnoručně kompilovaného jádra.
Příklad č.2
- Windows
- Debian
Debian je zde uveden jako zástupce ostatních Linuxových distribucí, které nepodporují start pod Secure Boot. Většinou vám v takové kombinaci operačních systémů selže spouštění pomocí Grub2. Nejjednodušší řešení je nainstalování rEFInd zavaděče, který bude schopen spouštět Windows 8. Provoz Linuxu bude záviset na možnosti jeho podepsání (vlastním certifikátem).
Příklad č.3
- openSUSE
- Ubuntu
- Debian
Hardware obsahující pouze Linuxové distribuce je na tom ohledně spouštění pomocí Grub2 nejlépe. Stačí totiž podepsat svým certifikátem jen Grub2 z Debianu (příp. Mintu a dalších) a ten náhle dokáže (po drobných úpravách v grub.cfg) spouštět i ostatní podepsané distribuce (varianta se zranitelností v podobě spuštění nepodepsaného systému). Nebo podepsat jádro Debianu a spouštět jej Grubem z distribuce podporující Secure Boot (bezpečná varianta).
Z uvedených příkladů je patrné, že se Secure Boot pod Linuxem není až takový problém. Problémy vás čekají jen při kombinaci Windows a Linuxu bez oficiální podpory Secure Boot.
Certifikáty v NVRAM
Někteří výrobci umožňují uživatelům upravovat (mazat, přidávat) podpisy v NVRAM přímo z UEFI. Ostatní uživatelé jsou odkázáni na externí EFI aplikace. Než však přikročíme k úpravám, je vhodné seznámit se s databázemi certifikátů.
- PK (Platform Key)
Většinou obsahuje jediný veřejný klíč
- DB (Signature Database)
Sada klíčů používaných pro ověřování ovladačů nebo aplikací.
- DBX (Signature Database Blacklist)
Nedůvěryhodné klíče a hash podpisy
- KEK (Key Exchange Keys)
Sada důvěryhodných klíčů pro aktualizaci DB a DBX seznamů.
- MOK (Machine Owner Key)
Klíče tvořené uživatelem umožňující spouštět vlastní aplikace (lokálně kompilovaná jádra). Do této databáze zapisují aplikace MokManager a HashTool.
Tvorba média pro Secure Boot
Vytvoření flash disku s aplikacemi pro manipulaci s certifikáty není nikterak složité. Naprosté minimun je mít na takovém médiu Shell nebo rEFInd pro spouštění KeyTool.efi. S těmito aplikacemi si vystačíte, pokud tvorbu certifikátů a podepisování binárek budete činit ve stávající instalaci linuxové distribuce.
O mnoho těžší však není takový flash disk doplnit o live Linux, který bude zastávat tvorbu certifikátu a následné podepisování. Vyhnete se tak kompilaci potřebných aplikací z gitu (sbsigntool, gnu-efi, efitools), nenachází-li se balíčky pro vaši distribuci v příslušném repozitáři.
- Připravte flash disk (1GB verze postačí) vytvořením GPT tabulky oddílů (např. Gparted = Zařízení > Vytvořit tabulku oddílů > Pokročilé > gpt ). Po vytvoření tabulky je vhodné rozdělit flash disk na dva oddíly formátu FAT32. První oddíl o velikosti alespoň 800 MB (jako název zadejte uefiflash) pro Fedoru a základní EFI aplikace. Druhý oddíl (název dataflash) se ve Fedoře lépe používá pro práci s daty. Názvy oddílů můžete použít dle vlastního uvážení, ale použijete-li zde uvedené, ušetříte si práci při zadávání příkazů v terminálu.
- Stáhněte obraz Fedory 20 Live LXDE. Máte-li již obraz Fedory 19, můžete použít i tuto verzi, neboť celý postup vznikal ve Fedoře 19 a poté byl odzkoušen v nové verzi. Po stažení rozbale ISO obraz na první oddíl flash disku (např. pomocí Správce archivů) a přejmenujte adresář
/EFI/BOOT
na/EFI/fedora
. - V adresáři
/EFI/fedora
nahraďte obsah souborugrub.cfg
následujícím:set default="0" set timeout=1 search --no-floppy --set=root -l 'uefiflash' menuentry 'Start Fedora Live' { linuxefi /isolinux/vmlinuz0 root=live:LABEL=uefiflash rw rd.live.image quiet rhgb initrdefi /isolinux/initrd0.img }
- Stáhněte rEFInd 0.7.7.zip a rozbalte jej na druhý oddíl. Na prvním oddílu vytvořte adresář
/EFI/Boot
, do kterého překopírujte a přejmenujte souboryrefind_x64.efi
nabootx64.efi
arefind.conf-sample
narefind.conf
Chcete-li spouštět jádra nacházející se mimo EFI System Partition zkopírujte obsah adresáředrivers_x64
do/EFI/Boot/drivers_x64
. Jedná se o ovladače souborových systémů, které umožní rEFIndu nahlédnout do ostatních oddílů. - Poupravte soubor
refind.conf
v/EFI/Boot
– odkomentujte řádky:
textonly textmode 2
- Na druhém oddílu flash disku vytvořte adresáře
rpm
,moje_cert
,orig_cert
a stáhněte do adresářerpm
tyto balíčky:
sbsigntools-0.6-4.1.x86_64.rpm
gnu-efi-3.0q-43.1.x86_64.rpm
efitools-1.4.2-1.1.x86_64.rpm
- Restartujte počítač do UEFI a nastavte Secure Boot na Setup Mode. Po uložení nastavení a restartu, nastartujte Fedoru z flash disku (položka obsahující
BOOTX64.efi
nauefiflash
)
Pokračování příště
To je pro dnešek všechno a příště budeme pokračovat vytvořením klíče a certifikátu, podepsáním souborů a instalací zavaděče