Děravý Intel Management Engine lze nahradit minimalistickým Linuxem a Go

24. 11. 2017
Doba čtení: 7 minut

Sdílet

Uvnitř procesorů Intel běží skrytě plnohodnotný operační systém včetně síťového stacku a web serveru. Zbavit se ho zcela není možné, ale můžeme ho nahradit něčím minimalistickým a méně děravým.

Už víme, že uvnitř procesorů Intel běží velmi mocný firmware založený na operačním systému MINIX. Už v něm byly nalezeny první vážné bezpečnostní chyby, které mohou vést až k ovládnutí celého počítače na dálku. Není se čemu divit, MINIX není maličký firmware nutný k běhu procesoru, ale plnohodnotný operační systém, který obsahuje například podporu pro IPv4 a IPv6, ovladače, souborový systém nebo třeba web server.

Běží navíc ve velmi privilegovaném režimu, ke kterému nemá běžný operační systém přístup, takže běží zcela skrytě a může provádět prakticky cokoliv za zády uživatele. Není divu, že se uživatelé takové věci ve svém počítači bojí a velké firmy v čele s Googlem se jí snaží zbavit. Protože není snadné takovou věc vypnout, přichází ke slovu jiné řešení: otevřené, minimalistické a postavené na Linuxu.

Proprietární software ve vašem CPU

Detaily celého projektu popsal Ronald Minnich z Google na pražské Embedded Linux Conference Europe. To je člověk, který stojí za vývojem nástroje Coreboot, který byl dříve znám pod názvem LinuxBIOS. Jeho cílem je nahradit uzavřený BIOS v základních deskách něčím otevřeným. Principiálně jde tedy o podobný problém, ale na zcela jiné softwarové vrstvě.

Hlavní problém podle Minnicha je v tom, že Linux ztratil kontrolu nad hardwarem. V 90. letech byl operační systém pánem celého stroje a mohl provádět cokoliv. Dnes jsou mezi ním a hardwarem minimálně další dvě a půl jádra. Mají vyšší práva než operační systém a mohou manipulovat s ním i s hardware. Navíc jsou uzavřená a samozřejmě také úspěšně exploitovatelná.

Co víc, exploity je možné zapsat přímo do paměti v desce, takže zůstávají persistentní a není možné je odstranit. V takovém stavu zbývá jen desku zahodit. Pokud svému počítači věříte, jste šílenci, řekl na své přednášce Minnich. Na vašem procesoru totiž běží ohromné množství proprietárního software, o kterém nevíte téměř nic a nemůžete ho nahradit. Naštěstí existují lidé, kteří pracují na tom, abychom přestali být šílení a získali trochu příčetnosti.

Co mi to tu běží?

Pokud chceme pochopit rozvrstvení operačních systémů ve svém procesoru, musíme se zabývat takzvanými Ringy (kruhy). Ty tvoří jednotlivé vrstvy a dovolují řídit procesy ve vyšších kruzích. Tradičně nejnižším, a tedy hlavním, kruhem býval ten s číslem nula. V něm běží jádro operačního systému, které řídí činnost uživatelského software ve vyšších kruzích – dnes typicky v tom s číslem tři.

Aby bylo možné provozovat jednoduše hardwarovou virtualizaci, přišel do nových procesorů (společně s Intel VT-x a AMD AMD-V) kruh s číslem –1. V něm běží hypervizor, tedy virtualizační hostitel, který si pak založí kruhy nula a v nich spouští běžné operační systémy. Má tedy vyšší privilegia a je pro ně neviditelný.

Ještě nad touto vrstvou pak existuje Ring –2, který se stará o samotný hardware a ke kterému nemají vyšší kruhy vůbec přístup. V něm běží 16bitové mikrojádro SMM starající se o zdroje v CPU a 64bitové UEFI jádro. Tyhle věci se starají o to, aby fungovaly například různé „hardwarové“ funkce počítačů – když třeba zaklapnete displej u notebooku, probudí se právě tyhle kusy software a zajistí třeba uspání.

Tady jsme si dlouho mysleli, že to končí. Ukázalo se ale, že existuje ještě privilegovanější režim označený analogicky jako Ring –3. To je ta věc, které se lidé bojí, říká Minnich. V něm totiž běží další plnohodnotný operační systém postavený na MINIX 3. Jednoduše to shrnuje následující schéma:

Operační systémy ve vašem procesoru

V kruzích –2 a –3 běží různý software, oba ale mají společné to, že se jedná o plnohodnotné operační systémy se spoustou vlastností: IPv4 a IPv6 stack, souborové systémy, ovladače pro různá zařízení (USB, disky, síťové karty a další) a také třeba web servery. Intel Management Engine (dále jen ME) totiž potřebuje znát souborový systém, protože může být použit k dálkovému přepsání operačního systému na disku. Jak Ronald Minnich připomíná, je možné to udělat i s vypnutým počítačem – pokud je zapojen v zásuvce a v síti.

Všude samá díra

Uvnitř navíc běží spousta komponent, jejichž smyslu nerozumíme. Mají rozličné názvy jako „full network manageability“, „regular network manageability“, „manageability“ a „outbreak containment heuristic“. Už v roce 2010 bylo ukázáno, že většina těchto komponent má bezpečnostní mezery [PDF] a část chyb stále ještě není opravená.

Že je to realita ukázal Intel na začátku roku, kdy opravil sedm let starou díru. Ta umožňovala na dálku do webového serveru v ME poslat heslo o nulové délce a získat plný přístup k dálkové správě počítače. Intel sice tvrdí, že nezaznamenal žádné pokusy o zneužití, ale v praxi je těžké uhlídat miliardu procesorů a není možné sledovat provoz všude. Navíc při takovém množství nikdy nebudou záplatovány všechny systémy.

O úroveň výše běží už zmíněný SMM, který původně sloužil ke správě napájení u starých systému s DOS. Přebírá od operačního systému řízení v případě, že přijde některá ze zajímavých událostí (SMI). Zajímavé je, že jakmile je SMM aktivován, už není možné jej vypnout. Ukousne si 8 MB systémové paměti, do které přestane vidět operační systém. Navíc pro něj existuje celá řada exploitů.

Ve stejném kruhu běží ještě zmíněné UEFI, což je prý extrémně komplexní kernel, pro nějž dopisují funkce jednotliví dodavatelé počítačů. Podle Minnicha ovšem jejich programátoři úplně dobře nerozumí všem pravidlům takového kódu, proto dělají chyby. Výsledkem je, že jsou tam obrovské gigantické díry, kterými je dovnitř možné dostat exploit. Těch existuje velké množství, navíc UEFI aktualizuje sám sebe, takže je možné vytvořit perzistentní malware, který se usídlí uvnitř UEFI a bude se při dalších pokusech o aktualizace tvářit, že všechno funguje správně.

Komponenty UEFI

Jak to celé opravíme?

Co s takovou bezpečnostní noční můrou můžeme dělat? Přejít na AMD není řešením, protože i tam existují uzavřené části, do kterých nevidíme. Vznikl proto projekt, který se snaží minimalizovat privilegovaný software uvnitř procesoru, aby ubylo kódu, snížilo se riziko bezpečnostních děr a omezily se schopnosti těchto potenciálně děravých firmwarů.

Výsledkem je projekt s názvem Non-Extensible Reduced Firmware, neboli nerozšiřitelný zmenšený firmware, zkráceně NERF. Nerozšiřitelný je, protože se vývojáři domnívají, že právě rozšiřitelnost je hlavním problémem originálního software.

Hlavním cílem je udělat minimální firmware, se kterým by počítač správně bootoval a fungoval. Zároveň s tím přichází podstatně větší otevřenost a možnost kdykoliv velmi rychle opravit případné chyby. Prakticky je to realizováno tak, že z původního firmware jsou odstraněny téměř všechny komponenty – zrušit ME úplně není možné, počítač by bez něj nenabootoval a pokud už ano, za 30 minut by se sám vypnul. Dobrou zprávou ale je, že většinu komponent ME je možné odstranit.

Vznikla proto velmi okleštěná náhrada, která nebude obsahovat web server, síťové stacky a ovladače hardware. Standardní ME zabírá 5 MB z integrované 8MB flash paměti, ale tuto velikost se podařilo redukovat na pouhých 300 KB. Kromě toho jsou z ME a UEFI odstraněny také schopnosti vlastní aktualizace, takže o případné flashování se postará sám NERF.

Nad vším sedí Linux

NERF se skládá z několika částí: osekanou ME ROM, minimalizovanou UEFI ROM a vypnutým SMM. Nad tím vším sedí linuxové jádro s uživatelským prostředím napsaným v Go (u-root). Neexistuje příliš mnoho důvodů proč mít SMM zapnuté, pokud by však některá z jeho funkcí byla v budoucnu potřeba, dokáže ji zastat Linux.

Během bootu počítače nejprve proběhnou dvě fáze (security neboli SEC a pre-EFI initialization čili PEI), které jsou kompletně proprietární a jejich funkce nebudou nikdy zveřejněny. Poté ale už nastupuje driver execution environment (DXE), což je naopak dobře dokumentovaná funkce starající se například o výběr operačního systému a jeho zavedení. O tuto část už se může postarat integrované linuxové jádro.

Některé části svázané přímo s hardwarem pravděpodobně nebudeme schopni nikdy nahradit, ale cílem je hlavně vyměnit ty velké komplexní komponenty, které ukrývají nejvíce bezpečnostních děr a jsou proto největším problémem. V tuto chvíli už je možné NERF sestavit a nabootovat, zatím je nejlepších výsledků dosahováno na serverech od firem Dell, MinowMax a OCP nodech.

Použití tohoto alternativního firmware také dovoluje výrazně zjednodušit správu. Zatímco v případě UEFI je nutné mít pro každý hardware jiné sestavení, použití univerzálního linuxového jádra většinu těchto problému ruší. Samozřejmě se předpokládá, že budou prováděny různá jádra pro různé systémy, ale už teď se daří startovat stejný firmware na malých deskách MinnowMax i na velkých OCP systémech.

Uživatelská část celého firmware je napsána v jazyce Go, který je bezpečnější než čisté C, takže lze předpokládat menší množství bezpečnostních děr. Výsledkem je 5,9MB initramfs, který obsahuje kompletní kód, kompilátor i toolchain. Jednotlivé funkce se kompilují až při použití, což zabere asi 200 ms. Podle Minnicha je to dobré proto, že je kód stále k dispozici v otevřené podobě vhodné k auditu.

Pro případy, kdyby ve flash paměti nebylo dost místa nebo by procesor byl na kompilaci příliš pomalý, je možné použít režim u-root, který je podobný BusyBoxu. Jde také o jednu velkou binárku, na kterou jsou nalinkovány jednotlivé názvy příkazů. V tomto formátu má pak celý userspace jen 2 MB a jeho provoz je velmi rychlý i na pomalých strojích. Protože je celý software velmi malý a jednoúčelový, zkracuje také dobu bootu celého počítače.

ict ve školství 24

Ronald Minnich předpokládá, že se první počítače s NERF a u-root objeví už v roce 2018. Firmy chtějí používat firmware, kterému rozumí. Chtějí také bootovat rychle a bezpečně, říká Minnich. 

(Zdroje: LWN.net, kompletní záznam přednášky, prezentace [PDF], web projektu NERF)

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.