Hlavní navigace

Projekt LinuxBoot: Linux jako firmware bootující Linux

Petr Krčmář

Linux Foundation představila nový projekt LinuxBoot, který se snaží nahradit proprietární firmware v počítačích linuxovým jádrem. Motto projektu zní: „Nechte to na Linuxu“ a cílem je mít Linux bootující Linux.

Doba čtení: 5 minut

Organizace Linux Foundation představila svůj nejnovější projekt nazvaný jednoduše LinuxBoot. Cílem projektu je zvýšit rychlost a spolehlivost startu tím, že některé funkce proprietárního firmware převezme linuxové jádro. Hlavní funkcí firmware vestavěného v hardware je totiž nabootovat operační systém. Pojďme bootovat Linux Linuxem, hlásí projekt.

Hardware je stále složitější a uživatelé mají také stále vyšší požadavky na jeho start. Firmware musí aktivovat spoustu různorodých zařízení a musí být schopen komunikovat s celou řadou různých zařízení od externích disků přes síťová rozhraní s různými komunikačními protokoly. Proto roste také složitost firmware, který se o takto komplexní start stará. Výsledkem jsou různě vážné chyby a snaha proprietární firmware nahradit otevřenou variantou.

LinuxBoot řeší problém pomalého a na chyby náchylného obskurního kódu tím, že jej nahradí linuxovým jádrem. Výsledkem je systém bootující za zlomek času a s vyšší spolehlivostí. To je důležité především v datových centrech provozovatelů cloudových služeb.

Zejména ve velkých datacentrech běží desítky tisíc serverů a každý výpadek může být bolestný. LinuxBoot chce nabídnout alternativu, která umožní snadné odstraňování chyb, rychlé řešení problémů a také nabídne provozní výhody v podobě rychlejšího startu strojů při dynamické potřebě vyššího výkonu.

Současné projekty Linux Foundation

Projekt ale uvádí, že není zdaleka určen jen pro velká firemní nasazení, ale velké výhody může nabídnout také uživatelům běžných počítačů nebo různých embedded či mobilních řešení. Všichni oceníme rychlejší start a (alespoň částečně) otevřený firmware naší základní desky.

Nahradit část UEFI pomocí Linuxu

Myšlenka to není nová, v oblasti velkých řešení se Linux pomocí Linuxu bootuje už velmi dlouho. LinuxBoot má ale v plánu přinést tuto techniku výrazně širšímu spektru uživatelů a snad i dodavatelů hardware. Za projektem kromě Linux Foundation stojí také například Google, Facebook, Horizon Computing Solutions a Two Sigma.

Dříve se o něco podobného snažil projekt Libreboot, který jistých úspěchů dosáhl, ale jen na velmi omezeném množství hardware. Vývoj navíc není nijak zásadně aktivní. Podobně si možná vzpomenete na další jména jako coreboot nebo LinuxBIOS. Je tedy možné, že otěže převezme projekt LinuxBoot, který je podporován takto velkými jmény, která navíc mají na větší otevřenosti svého hardware zájem.

LinuxBoot tedy chce nahradit konkrétní fáze bootu (například UEFI DXE – zavádění ovladačů) a přinést vlastní otestované ovladače pro různá zařízení. Výsledkem by měl být auditovatelný kód, vyházení zbytečných kroků a až dvacetinásobné zrychlení bootu. Navíc takto otevřený boot je možné přizpůsobovat konkrétním nasazením a například do něj rovnou přidat ovladače k dalšímu hardware.

Všechno nahradit nelze

Cílem není úplně nahradit UEFI nebo jiné části firmware, LinuxBoot se zařadí za úvodní inicializaci hardware a nahradí tu část firmware, která se stará o boot hlavního operačního systému. Naznačeno je to na výše uvedeném schématu.

Proč nenahradit uzavřený firmware úplně? Ve svém článku to vysvětluje Trammell Hudson, jeden z iniciátorů projektu. Výrobci procesorů totiž nedokumentují řadiče pamětí ani další komunikační rozhraní procesoru. Není tedy podle čeho znovu naprogramovat otevřený firmware, který by se postaral o inicializaci celého hardware. Proto je nutné (zatím?) sáhnout k rozumnému kompromisu a nízkoúrovňové fáze (SEC a PEI) nechat na malé části původního binárního firmware.

Velká část bootovacího procesu (fáze DXE, BDS, TSL, RT) ale mohou být nahrazeny upraveným linuxovým jádrem, které se postará o celou přípravu, nahraje z disku jádro hlavního operačního systému a to potom spustí pomocí kexec. Mít ve firmware Linux nám umožňuje postavit výrazně bezpečnější servery, které můžeme flexibilně upravovat pro své potřeby a získat tak výrazně odolnější systém, píše Hudson.

Vyšší bezpečnost

LinuxBoot přinese také menší šanci na systém úspěšně zaútočit. Hudson uvádí příklad serveru, jehož firmware má více než 400 modulů a další je ochoten načíst z ROM jednotlivých periferií. Existují například moduly pro načítání obrázků ve formátu JPEG (kvůli zobrazení loga výrobce), kompletní síťový stack, HTTP server a další. V mnoha těchto částech už byly objeveny zneužitelné chyby.

Zároveň je tu spousta zastaralých ovladačů, například pro různé disketové mechaniky nebo pro řešení problému Y2K. Navíc funkce některých modulů není vůbec známá – je tam třeba věc nazvaná „MsftOemActivation“. Tohle všechno by aktuální otevřený firmware mohl zahodit, protože by se soustředil na to podstatné – zavedení operačního systému.

Další potenciální problém přináší dnešní nejpoužívanější linuxový zavaděč GRUB. Hudson upozorňuje na to, že jde vlastně o samostatný operační systém, který má přibližně 250 tisíc řádek kódu. Obsahuje vlastní ovladače pro disky, USB nebo třeba grafické a síťové karty. Chyba se může snadno vyskytnout i tady a upravený USB disk může zaútočit na UEFI nebo GRUB. Proto LinuxBoot nahrazuje i všechny tyto komponenty a nechává je na linuxovém jádře. To sice může také obsahovat chyby, ale je snadnější mít pod kontrolou jednu komponentu než tři – navíc na kód Linuxu se dívá výrazně více lidí než na GRUB.

Přizpůsobitelnost

Zajímavá je také možnost si LinuxBoot upravit podle svých představ a potřeb. Jde o plnohodnotný operační systém, který je možné skriptovat či doplňovat, je možné do něj přidávat vlastní funkce a využívat všech možností, jako je přístup k šifrovaným diskům, načítání dat z běžných souborových systémů, využívání plnohodnotných síťových protokolů nebo třeba ovladačů k různým síťovým kartám (UEFI obvykle zná jen tu jednu na desce).

Zároveň je možné k LinuxBootu přidat některé ze specializovaných prostředí (runtime) – vlastně miniaturních linuxových distribucí přímo ve vaší základní desce. Můžete tak vytvořit specializované zařízení s extra zabezpečením nebo získat počítač, který je už při bootu schopný provádět pokročilé operace naskriptované v jazyce Go. Jeho interpret bude součástí vaší základní desky.

Výsledkem může být výrazné zrychlení, protože UEFI nemusí procházet mnoha různými fázemi a během několika sekund můžete mít počítač funkční. Příkladem je server OpenCompute Winterfell, který za normálních okolností startuje 7 minut, s LinuxBootem to zvládne za 20 sekund. Podobných výsledků Hudson dosáhl na desce Intel S2600. Podívejte se na video, kde vidíte celý start od zapnutí až po práci v sériové konzoli.

MIF18 tip v článku ROSA

Otevřeně a reprodukovatelně

Hlavním cílem projektu je ale získat otevřenou a auditovatelnou náhradu za dnešní firmware, kterému kvůli jeho chybovosti a komplexitě jednoduše nemůžeme věřit. Nemůžeme pak ale věřit ani našemu počítači, protože napadený firmware znedůvěryhodní jakoukoliv snahu o další bezpečnost. Výrobci hardware navíc sami příliš bezpečnost firmware neřeší, koupí ho od subdodavatele a použijí, jak je. Při nejlepším se starají o aktualizace pro nejnovější počítače, které ještě prodávají.

Výsledkem by tak měl být nejen auditovatelný kód, ale také reprodukovatelný. To znamená, že kdokoliv bude schopen ze zdrojových kódů sestavit na bit stejný binární výsledek, který nechá běžet ve svém počítači. Jen tak budou firmy i jednotlivci vědět, co jim v systému běží.

Našli jste v článku chybu?