přejít na obsah přejít na navigaci

Linux E X P R E S, (Ne)upravujte UEFI a Secure Boot

(Ne)upravujte UEFI a Secure Boot

Linux

Již nějaký čas nás startem počítačů doprovází Unified Extensible Firmware Interface (UEFI), který je nástupcem Basic Input-Output System (BIOS). S UEFI se objevily funkce umožňující rychlejší a bezpečnější start operačních systémů (Windows). Právě bezpečnostní funkce Secure Boot se z počátku stala strašákem linuxové komunity. Ukáži vám, že začátkem roku 2014 není Secure Boot pro Linux nepřekonatelný problém. 


reklama

Ú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.

  1. 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.
  2. 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.
  3. V adresáři /EFI/fedora nahraďte obsah souboru grub.cfgná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
    }
    
  4. 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 soubory refind_x64.efi na bootx64.efirefind.conf-sample na refind.conf

    Chcete-li spouštět jádra nacházející se mimo EFI System Partition zkopírujte obsah adresáře drivers_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ů.
  5. Poupravte soubor refind.conf/EFI/Boot – odkomentujte řádky:
    textonly
    textmode 2
  6. Na druhém oddílu flash disku vytvořte adresáře rpm, moje_cert, orig_cert a stáhněte do adresáře rpm 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

  7. 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 na uefiflash)

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

Nahoru

(Jako ve škole)
Průměr: 1,20 | Hodnotilo: 30
 

Top články z OpenOffice.cz

Příspěvky

(Ne)upravujte UEFI a Secure Boot
pettu 7. 02. 2014, 21:52:01
Odpovědět  Odkaz 
To vyzerá tak jednoducho, človek ani nepozná zmenu oproti BIOSu.. UEFI je proste skvelé!
(Ne)upravujte UEFI a Secure Boot
marek 8. 02. 2014, 10:26:01
Odpovědět  Odkaz 
Dobrý článek. Nevím, proč autor má nahoře jen jednu hvězdičku.
Lukáš Jelínek Re: (Ne)upravujte UEFI a Secure Boot
Lukáš Jelínek 8. 02. 2014, 13:00:46
Odpovědět  Odkaz 
Ten "hvězdičkový systém" vychází z počtu umístění v první desítce žebříčku čtenosti za poslední dva roky, viz http://www.linuxexpres.cz/o-webu/redakce#hodnoceni
(Ne)upravujte UEFI a Secure Boot
GeBu 8. 02. 2014, 11:32:13
Odpovědět  Odkaz 
Moc děkuji za velmi žhavé téma (hlavně pro nové notebooky) - internet je problémů plný.
Na podzim jsem se pokoušel instalovat openSUSE ještě verzi 12.3 na nový notebook HP 650 s UEFI a Secure Boot s předinstalovanými Windows 8. Zřejmě se mi podařil i zápis do EFI System Partition, protože při startu mám možnost vybrat Windows 8 nebo openSUSE 12.3, ale openSUSE mi nebootovalo. Neměl jsem tolik času se tím dále zabývat a částečně mne odradila tato věta: "Secure Boot support in openSUSE 12.3 is still considered experimental."
Další pokusy jsem dělal po vydání verze 13.1, ale tam se mi objevuje hlášení:

Nastala chyba při instalaci GRUB2-EFI
cp: nelze vytvořit obyčejný soubor "/boot/efi/EFI/opensuse/grubx64.efi
Systém souborů je pouze pro čtení.

Zřejmě je to nějak zamknuté - prý to dělají aktualizace Windows a já aktualizoval na verzi 8.1. Viz diskuse zde: http://www.abclinuxu.cz/poradna/linux/show/387366

Jak píši v diskusi, tak tam mám soubory s dost divnými názvy a ani je nemohu běžný způsobem kopírovat. Nemám moc odvahu se v tom hrabat - nerad bych řešil záchranu dat.
Co poradíte?
PS: Rozhodl jsem se dál pokračovat s Kubuntu (kvůli blízkosti k Debianu).
Vladislav Konopík Re: (Ne)upravujte UEFI a Secure Boot
Vladislav Konopík 8. 02. 2014, 12:52:38
Odpovědět  Odkaz 
Dobrý den. Přečetl jsem si Vaše trápení s UEFI z přiloženého odkazu.

Celá situace je v případě OpenSUSE vcelku jednoduchá. Chcete-li
používat Secure Boot, je nutné spustit instalaci Linuxu s aktivní
funkcí Secure Boot. OpenSUSE takto vytvoří dva bootovací záznamy
v UEFI.

opensuse - pro spuštění grub2 bez Secure Boot
opensuse-secureboot - pro spuštění Shim předzavaděče, který poté hlídá
certifikáty a spustí podepsaný grub2 a podepsané jádro OpenSUSE

U Vás nedošlo k vytvoření těchto bootovacích záznamů, neboť jste zvolil
"vlastní" instalaci Linuxu (pozměnil jste instalaci odškrtnutím samostatného
adresáře /home). Toto se mi při testování také stalo, a k odstranění problému
bylo zapotřebí "ukázat" instalátoru jaký oddíl je EFI System Partition a nastavit mu bod připojení na /boot/efi. Instalace by měla po tomto kroku proběhnout korektně.

Tento neduh je i u instalace Fedory, kde je taktéž nutné ručně nastavit
ESP na bod připojení /boot/efi.
(Ne)upravujte UEFI a Secure Boot
GeBu 8. 02. 2014, 13:40:53
Odpovědět  Odkaz 
Děkuji moc za informaci. Určitě to vyzkouším a napíšu.
Netušíte, jestli je to stejné v Kubuntu?
Uvažoval jsem původně o tom přemigrovat z Kubuntu na openSUSE u příležitosti nového notebooku. Chtěl jsem vyzkoušet, jak je na tom KDE v openSUSE, protože se všude tvrdí, že openSUSE se na KDE zaměřuje. Z Kubuntu takový pocit nemám.
Nyní jsem však zjistil, že se budu dálkově starat o stanici s Debianem a bude pro mne lepší používat nějaký DEBianí klon.
Vladislav Konopík Re: (Ne)upravujte UEFI a Secure Boot
Vladislav Konopík 8. 02. 2014, 14:11:24
Odpovědět  Odkaz 
Kubuntu je odvozenina Ubuntu, který sice vzešel z Debianu, ale již dávno se vydal vlastní cestou (využívají však balíčky deb).
Klony Ubuntu jsem netestoval (testovaný Mint je odvozenina, nikoli klon), ale předpokládám, že na-rozdíl od Ubuntu, mohou mít jeho klony s funkcí Secure Boot problém (stejně jako Mint)
Mohu Vám však doporučit, aby jste vyčkal do uveřejnění pokračování tohoto článku, kde získáte povědomost o řešení jistých komplikací se Secure Boot.

Ohledně dálkové správy:

Můžete nalézt (a také naleznete) pár rozdílů mezi Ubuntu (a jeho klony) a Debianem. Hlavní rozdíl je v používání práv superuživatele (při klasické instalaci těchto distribucí)

Ubuntu (a jeho klony) používá sudo pro vykonání příkazu s právy superuživatele
Debian používá pro práva superuživatele příkaz su

sudo je dočasné povýšení práv (jen pro vykonání daného příkazu) a su je trvalé povýšení (jakýkoliv příkaz poté má práva superuživatele)
Re: Re: (Ne)upravujte UEFI a Secure Boot
GeBu 8. 02. 2014, 14:34:22
Odpovědět  Odkaz 
Děkuji za info. O rozdílech mezi Ubuntu a Debianem vím. Na desktopu jsem kdysi Debian používal. Dnes hlavně Ubuntu. Spíše do toho nechci montovat to openSUSE, protože tam je úplně jiný balíčkovací systém.
Vladislav Konopík Re: Re: Re: (Ne)upravujte UEFI a Secure Boot
Vladislav Konopík 8. 02. 2014, 14:58:52
Odpovědět  Odkaz 
Pozapomněl jsem na jednu skutečnost. Nemám po ruce iso obraz nějakého klonu ubuntu, ale pokud
firma Canonical uvolnila certifikát i pro klony Ubuntu, můžete se přesvědčit vcelku jednoduše o podpoře Secure Boot.

Postačí vyzkoušet CD/DVD/flashdisk v počítači se zapnutou funkcí Secure Boot. Pokud nastartuje instalace máte vyhráno (distribuce bude používat předzavaděč Shim) , podle vzoru Ubuntu)

Nebo nahlédněte do ISO obrazu do adresáře /EFI/Boot a je-li tam více souborů, máte reálnou možnost tuto distribuci pod Secure Boot provozovat.
Mělo by tam být zhruba toto: bootx64.efi (což je přejmenovaný Shim), grubx64.efi (klasický Grub2) a může tam být i MokManager.efi (pro vložení certifikátu do MOKlistu)
EFI System Partition a nová základní deska
petr 19. 02. 2014, 19:43:38
Odpovědět  Odkaz 
Kde ten "EFI System Partition" je, je to v nějaké NVRAM, nebo ve flash základní desky, nebo na HDD a případně na kterém HDD ho najdu (mám jich více)?
Ale taky když plánuju koupit novou základní desku atd. a provozovat jen linux, musím to vůbec řešit a na jaké distribuci ano a na jaké ne?
Díky.
Vladislav Konopík Re: EFI System Partition a nová základní deska
Vladislav Konopík 19. 02. 2014, 20:07:29
Odpovědět  Odkaz 
EFI System Partition je oddíl na HDD, což i z textu vyplývá (Nesmí být součástí LVM, raidu nebo být šifrován). Najdete jej na HDD ze kterého počítač bootuje a "řešit" to budete pouze při instalaci operačního systému. Některé operační systémy při instalaci potřebují nastavit bod připojení pro EFI System Partition na /boot/efi.
Marek Uher (Ne)upravujte UEFI a Secure Boot
Marek Uher 3. 06. 2014, 10:25:22
Odpovědět  Odkaz 
Pro Debian GNU/Linux 8 (Jessie) existuje pěkný návod, jak Secure Boot zprovoznit i v této distribuci:

http://burtness.wordpress.com/2014/02/08/secure-boot-with-debian-testing/

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Vladislav Konopík


  • Distribuce: Debian / Mint-debian based
  • Grafické prostředí: GNOME
  • Hodnocení autora: *