Jak ovlivní zavedení bezpečného bootování UEFI distribuce Linuxu? Tým Fedory tuto záležitost řeší pro nadcházející vydání.

Článek původně vyšel v blogu Matthew Garretta jako Implementing UEFI Secure Boot in Fedora. Na fedora.cz vychází se svolením autora.

(Poznámka – ačkoliv pracuji pro Red Hat, budu tu mluvit pouze o Fedoře. V textu níže jsou obsaženy pouze mé názory a popis mé práce na Fedoře, nikoliv názory nebo budoucí plány Red Hatu.)

Fedora 17 je venku. Je užitečná a zároveň zdarma, a hodí se jako vítaný doplněk na jakoukoliv rodinnou sešlost. Vyzkoušejte ji. Za povšimnutí však stojí ještě kvůli jedné věci – jde o poslední vydání Fedory v období před zavedením bezpečného bootování UEFI. Fedora 18 vyjde přibližně ve stejnou dobu jako Windows 8 a, jak už bylo řečeno dříve, všechen hardware pro Windows 8 bude dodáván s bezpečným bootováním zapnutým ve výchozím nastavení. I když Microsoft pozměnil své původní stanovisko a všechny x86 počítače s Windows budou muset mít ve firmwaru možnost tuto funkci vypnout nebo umožnit uživatelům využít své vlastní klíče, není možné nutit všechny uživatele k provádění těžko přístupných nastavení firmwaru, než budou moci spustit Fedoru. Pracujeme na plánu, který by nám umožnil situaci řešit. Není to ideální, ale ze všech přístupů, které jsme prozkoumali, tento nabízí nejlepší poměr mezi snahou nechat uživatele bootovat Fedoru a zajištěním uživatelské svobody.

Aby počítač bootoval

Většina hardwaru, který si budete moci koupit koncem roku, bude certifikována pro Windows 8. to znamená, že bude mít hardware sadu bezpečných bootovacích klíčů, a pokud budou na počítači předinstalované Windows 8, bezpečné bootování bude ve výchozím nastavení zapnuto. Ta sada klíčů není pevně daná a pravděpodobně se bude u různých výrobců lišit, ale cokoliv s logem Windows bude mít klíč od Microsoftu [1].

Zjišťovali jsme, jestli by nebylo možné vytvořit klíč pro Fedoru a přimět prodejce hardwaru, aby jej používali, ale ze dvou důvodů jsme to zavrhli. Zaprvé, ač se nám dostalo překvapivě kladných reakcí od prodejců, nedalo se reálně předpokládat, že bychom přesvědčili všechny. To by znamenalo návrat do časů, kdy bylo nutné prolézat seznamy kompatibilního hardwaru, než si něco koupíte, a to je od základu nepřátelské vůči uživatelům. Zadruhé, Fedoru by to dostalo na privilegovanou pozici. Coby jedna z větších distribucí máme větší možnost mluvit s výrobci hardwaru než většina jiných dister. Systémy s klíčem od Fedory by bez potíží nabootovaly Fedoru, ale bootovaly by také Mandrivu, Arch, Mint, Mepis? Zavedení klíče pro konkrétní distribuci a přesvědčování hardwarových firem, aby ho používaly, by bylo nefér vůči ostatním distribucím. Chceme soutěžit na základě hodnoty, ne využívat lepší vazby na OEM.

Alternativním řešením by bylo vytvořit nějaký obecný linuxový klíč. Ukázalo se však, že i to by bylo složité, protože by bylo nutné najít subjekt, který by byl ochotný vzít na sebe odpovědnost za správu podepisování a distribuci toho klíče. To předpokládá mít možnost uchovávat v naprostém bezpečí kořenový klíč a provádět přiměřené ověřování lidí, kteří chtějí podepisovat. To je nákladné. Nákladné v řádech milionů dolarů. Navíc by dlouho trvalo, než by se systém zavedl, a my jsme čas neměli. A konečně, nikdo se do takového dobrovolnictví nehrnul. Takže žádný obecný linuxový klíč.

Poslední možnost nebyla zrovna lákavá, ale pravděpodobně šlo o nejméně špatnou. Microsoft bude nabízet podepisovací služby prostřednictvím svého portálu sysdev. Není to úplně zadarmo (je s tím spojen jednorázový poplatek 99 dolarů pro získání přístupu; těch 99 dolarů je pro Verisign, nikoliv Microsoft – a jakmile jednou zaplatíte, můžete podepsat libovolné množství binárek), ale je to levnější, než by byla jakákoliv jiná realistická varianta. Zajišťuje to kompatibilitu s nejširším možným okruhem hardwaru a předejde se tím tomu, že by měla Fedora nějaké zvláštní výhody oproti jiným linuxovým distribucím. Existuje-li lepší možnost, my jsme ji neobjevili. S nějvětší pravděpodobností to tedy bude přístup, který zvolíme. Náš první bootloader bude podepsaný klíčem od Microsoftu.

Bootloadery

Pro víceúrovňový přístup k podepisování jsme se rozhodli z docela jednoduchého důvodu. Podepisování prostřednictvím podepisovací služby Microsoftu je manuální proces, což je otrava. Nechceme zdržovat aktualizace bootloaderů jen proto, že by někdo musel najít instalaci Internet Exploreru a čipovou kartu a ručně sestavit balíčky. Místo toho píšeme velmi jednoduchý bootloader [2]. Ten nebude dělat nic jiného než natahovat skutečný bootloader (Grub 2), ověřovat, že je podepsaný podpisovým klíčem Fedory, a spouštět ho. Díky tomu, že podpisový klíč Fedory použijeme v tomto bodě, budeme moci sestavovat aktualizace Grubu v rámci existující buildové infrastruktury a podepisovat si je sami. Bootloader první fáze by se měl měnit jen velmi zřídka a neplánujeme, že by byl aktualizován častěji než jednou za vydání. Neměl by tedy představovat velkou zátěž pro správu vydání.

A co Grub? Ve Fedoře 18 už jako výchozí používáme Grub 2 pro EFI systémy, ale stále je potřeba pár věcí dodělat, než bude připravený na bezpečné bootování. První věc je, že zakážeme natahování modulů. V tuto chvíli je možné do Grubu 2 nahrát za běhu jakýkoliv kód, což popírá smysl bezpečného bootování. Takže to bude vypnuté. Pak přidáme podporu pro ověřování, že jádro, které se chystá nabootovat, je podepsáno důvěryhodným klíčem. A nakonec pročistíme příkazový řádek jádra, aby se zabránilo některým funkcím, které by útočníkovi dovolily, že by i podepsané jádro spustilo libovolný kód. Tato omezení zmizí, pokud bude bezpečné bootování vypnuto.

Jádro

Bezpečné bootování je postaveno na myšlence, že veškerý kód, který má přímý přístup k hardwaru, je důvěryhodný, a jakýkoliv nedůvěryhodný kód musí jít přes ten důvěryhodný. To by šlo obejít, pokud by uživatelé mohli v jádře spouštět libovolný kód. Budeme tedy vyžadovat podepsané jaderné moduly a zamykat některé aspekty funkčnosti jádra. Nejviditelnější příklad je to, že nebude možné z uživatelského prostoru přímo přistupovat k PCI oblastem, takže všechny grafické karty budou potřebovat jaderné ovladače. Nastavování režimu [modesetting] z uživatelského prostoru bude věcí minulosti. Opět, vypnutí bezpečného bootování zruší i všechna tato omezení.

Podepsané moduly jsou pochopitelně z uživatelského hlediska potíž. Budeme podepisovat všechny moduly v distribuci, ale co ovladače, které nejsou ve stromu jádra? Na to zatím nemáme uspokojivou odpověď. I zde platí, že nechceme řešení, které by fungovalo u nás, ale ne v jiných distribucích. Ovladače jen pro Fedoru nebo jen pro Ubuntu je to poslední, co by lidé chtěli – a tohle je opravdu nutné řešit napříč distribucemi.

Moment, cože bude podepsané?

Bezpečné bootování je navrženo tak, aby chránilo před škodlivým kódem spuštěným před operačním systémem. Nejde o hypotetickou hrozbu. Malware spouštěný před bootem existuje a je ošklivější, než byste si mohli myslet. Takže je zřejmé, že bootloadery je třeba podepisovat, protože jinak byste jen nahradili podepsaný bootloader nepodepsaným, který by nainstaloval škodlivý kód a nabootoval váš OS.

Ale co jádro? Jádro je jen kód. Když vezmu podepsaný linuxový bootloader a pak ho použiji k nabootování něčeho, co vypadá jako nepodepsané linuxové jádro, možná jsem právě nabootoval malware. A může-li ten malware napadnout Windows, nebude už podepsaný linuxový bootloader jen obyčejný podepsaný linuxový bootloader, nýbrž podepsaný spouštěč windowsovského malwaru, což je ten druh věcí, které vedou k umístění takového bootloaderu na seznam zakázaných binárek, a najednou už podepsaný linuxový bootloader není ani ten podepsaný linuxový bootloader. Takže jádra je nutné podepisovat.

[1] Vlastně je možné, že klíč od Microsoftu bude mít úplně všechen hardware. Bezpečné bootování vyžaduje, aby byly podepsané i ovladače UEFI. Podepisovací formát umožňuje pouze jediný podpis na binárku. Kvůli kompatibilitě bude všechen doplňkový hardware prodáván podepsaný klíčem od Microsoftu, což znamená, že ten klíč budou muset podporovat všichni prodejci systémů, aby na daném hardwaru jejich systémy běžely.

[2] Aktuální zdrojové kódy jsou zde. Závisí na portu šifrovací knihovny UEFI a OpenSSL, kterému při sestavování musím trochu pomáhat. Nahraji to co nejdříve.

…dokončení