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.
1. 8. 2012 at 19:15
Není to snaha Mrkvosoftu ztížit konkurenci život? Že ne? Koupit počítač bez operačního systému je letitý problém, teď to bude ještě horší.
1. 8. 2012 at 20:22
Myslím si, že je len otázkou času, kým sa nájde spôsob, ako to efektívne obísť.
Zatiaľ je to pomerne čerstvá záležitosť, takže sa hľadajú rýchle a najmenej bolestivé riešenia.
Podobné snahy M$ sa v rôznych obmenách objavujú stále.
Avšak nič to nemení na fakte, že ich najnovší W8 sa už pomaly otvorene začína považovať za katastrofu.
1. 8. 2012 at 23:40
divim se že ještě někdo nedal stížnost do Bruselu 🙂
2. 8. 2012 at 08:53
Brusel je len banda neschopných darmožráčov.
Existuje v EU viacero prípadov kúpy notebookov s M$ win, kedy súdy rozhodli o vrátení peňazí za nepotrebný operačný systém. Ako to ovplyvnilo ponuku notebookov bez OS. Nijako!
2. 8. 2012 at 21:39
Som zvedavý, ako si budem podpisovať vlastnoručne konfigurované jadro v Gentoo. Boli dni, keď som jadro kompiloval aj 20x denne, teraz ho už mám odladené a kompilujem každé nové raz, maximálne dva. O tom, že by som začal používať distribučné jadro nemôže byť ani reči, skôr by som pristal podporiť prepis BIOSu beaz tejto zhovädilosti.
3. 8. 2012 at 01:25
Dovolím si napsat, že odpověď na potřebu bezpečného bootování je v XKCD 129, tedy, že se M$ snaží o vytvoření ekosystému, ve kterém může cokoliv a může to nabídnout i „partnerům“ – jako Apple. A jelikož jeho monopolní pozice… Na druhou stranu je třeba napsat, že Apple ze svého přístupu nemusí běhat na mnoha roztříštěných součástkách, které jsou často tak špatně navržené, že vývojářům při rev-enge pro OSS často vstávají vlasy hrůzou. Pokud by se díky tomuto přístupu M$ zpakoval z většiny stávajících konfigurací, kde by vyhnil, a uvolnil místo Linuxu, možná by to nakonec nebylo až tak špatně.
Navíc je tu i zákaz změny režimu (safeboot off) pro ARMy. EU se na to určitě podívá, neboť jde – při správném zformulování – o porušení volné soutěže. V tomto je vysoce aktivní a M$ 2x nemusí.
Na druhou stranu, tento „bordel“ s vendor lock-in tu už byl a dojely na něj kvůli problematickému portování aplikací platformy Atari, Amiga či Commodore. Naopak na otevření specifikace vydělaly IBM-PC a jejich klony. V operačních systémech nás tato čistka právě čeká, jen to bude trvat déle, neboť výkonu na emulace je nyní přehršel a jako první to musí odnést hráči a jiné náročné výkony. Navíc každá ochrana nějaký výkon stojí – ať už na počítání, či na prolomení (která nebyla?).