Portál AbcLinuxu, 1. května 2025 05:04
Aktuální verze jádra: 3.7-rc4. Citáty týdne: Mel Gorman, David Miller. Omezení jádra pod UEFI secure boot.
Aktuální vývojová verze jádra je 3.7-rc4 vydaná 4. listopadu. Linus k ní řekl: Je zajímavá pravděpodobně jen rozruchem, který způsobila v jistých kruzích, protože obsahuje opravu v žurnálování bitmapy na ext4. Je to drobný patch a navzdory vzniklému šílenství nebylo možné problém reprodukovat, pokud jste si nehráli se speciálními volbami pro mount.
Stabilní vydání: verze 3.0.51, 3.4.18 a 3.6.6 vyšly 5. listopadu. Všechny obsahují důležité opravy. Poslední dvě zmíněné verze obsahují opravu poškozování dat na ext4.
Kdo nemá po ránu rád vůni formálních metod?
-- Mel Gorman
Kód pro metriku říká: „Yo dawg, I heard you like sizeof, so I did a sizeof of a sizeof, so you can size your size!“ Oprava od Juliana Anastasova.
-- David Miller
"Problém" s UEFI secure boot se linuxového systému dotýká na různých úrovních. Nejprve tu máme problémy s tím Linux vůbec spustit, které jsou snad povětšinou vyřešeny dvěma podepsanými zavaděči, které jsou k dispozici pro distribuce a uživatele. Pak tu jsou jaderné funkce, které mají potenciál sabotovat secure boot. V závislosti na pohledu na věc by tyto funkce buď měly být v jádře nastavitelné – aby je některé distribuce mohly u podepsaných jader vypnout – nebo nepředstavují větší nebezpečí než existující (nebo neznámé) chyby v jádře. Jak asi tipujete, tak na linux-kernel zazněly oba pohledy na věc.
Podstatou problému je to, že na linuxových systémech jádro uživateli root důvěřuje. To znamená, že root může ve stavu systému provádět různé dočasné – nebo trvalé – změny. Mezi tyto změny patří použití kexec() ke spuštění jiného operačního systému nebo zápis hibernačního obrazu na swapovací oddíl pro použití při obnově (resume). Ale obě tyto funkce může útočník použít k obejití ochrany, kterou má secure boot vynucovat.
Pokud by uživatel například spustil systém přes jeden z Microsoftem podepsaných linuxových zavaděčů – „vata“ (shim) nebo „předzavaděč“ – s jádrem, které neomezuje pravomoci roota, tak by toto jádro mohlo spustit jiné jádro, které třeba mohlo být kompromitováno. Horší je ještě to, že z pohledu těch, co se bojí, že Microsoft bude blacklistovat zavaděče nebo klíče, by tímto jiným jádrem mohla být zákeřná verze Windows. Systém chráněný secure bootem by tedy nakonec spustil nějaká špatná Windows, což je přesně tou situací, které má secure boot zabránit.
Pokud by se toto rozšířilo, tak různí lidé věří, že by Microsoft zakázal zavaděč, který byl v tomto útoku použit. Pokud by šlo o stejný zavaděč, jako by se používal pro start Linuxu, tak by nové systémy, stejně jako ty staré, kam se rozšířila aktualizace blacklistu, odmítly spustit Linux. Matthew Garret má z tohoto strach, a proto navrhl změny, které by vhodně nastaveným jádrům zakázaly kexec() a další věci, co by k obejití bylo možné použít.
To se řešilo na začátku září a tyto změny nebyly moc kontroverzní až na název capability, kterou Garrett pojmenoval jako (CAP_SECURE_FIRMWARE), a omezení kexec(). V půlce září poslal další dávku patchů, které byly skoro stejné, až na odstranění patche kexec() a přejmenování capability na CAP_COMPROMISE_KERNEL. K patchům uvedl, že pokud je někdo chce nasadit, tak zakáží kexec do doby, než bude začleněna podpora pro načítání podepsaných dat.
Asi tak na měsíc zavládlo ticho a pak se rozjelo rozsáhlé vlákno. Dotaz od Jiřího Kosiny o načítání firmwaru do „bezpečného“ jádra vedl k debatě o modelu rizik, který je pokryt Garretovým patchem. Ačkoliv Garrett souhlasil, že načítání firmwaru by mělo být řešeno přes podpisy, nekladl tomu velkou váhu. Automatizovaný útok za použití upraveného firmwaru by značně závisel na použitém hardwaru, vyžadoval by zpětné inženýrství a ve výsledku bychom z nich asi měli prospěch.
Jak James Bottomley upozornil, tu vždy budou chyby v jádře, které umožní obejití těchto omezení (např. když si root přečte podpisový klíč pro hibernaci nebo přepne bit dané capability):
[...] útok lokálně zvyšující práva obvykle využívá nějaké chyby (typicky buffer overflow), která spustí libovolný kód v kontextu jádra. V tomto případě může být stejný typ útoku použit ke kompromitaci jakéhokoliv jaderného ochranného mechanismu včetně vypnutí secure boot a přečtění jaderného soukromého podpisového klíče.
[...] Jde mi o to, že vzhledem k tomu, že většina exploitů dokáže spustit v jádře libovolný kód, tak nemá moc smysl uvažovat o podobných věcech jako o něčem, co zabrání útoku. Měli bychom se zaměřit na debatu o tom, proč chcete v prostředí secure boot zakázat legitimnímu lokálnímu rootovi zapisovat na oddíl pro hibernaci.
Jaderné exploity, ze kterých mají Garrett a další obavy, asi nikdo řešit nechce, alespoň co se secure boot týče. Kosina řekl:
Já to chápu tak, že nám nejde o ochranu před tím, aby root zneužíval chyby v jádře. Snažíme se zabránit tomu, aby root zasahoval do kódu a dat jádra přes standardní prostředky (/dev/mem, ioperm, přeprogramování zařízení, aby použila DMA na libovolná umístění, obnovení z obrazu hibernace, se kterým si pohrál, apod.).
Není ale jisté, proč by Microsoft rozlišoval mezi exploitem a regulérními jadernými službami, když by se rozhodoval blacklistovat. U distribucí, které šíří podepsaná jádra, je ale takto možné značně snížit riziko útoku.
Eric Paris podrobně popsal útok, jenž nainstaluje upravené linuxové prostředí (s legitimně podepsaným zavaděčem a jádrem), které se uspí poté, co připraví hibernační obraz Windows s trojanem. Uživatel by musel probudit systém dvakrát, ale nakonec by měl malware na systému se secure boot.
Bottomleymu a ostatním ale značně vadí představa „nedůvěryhodného roota“. V úpravách jádra pro bezpečný boot jde hlavně o omezení roota, aby nemohl v bootovacím prostředí dělat trvalé změny. Garrettem navržené patche odstraňují mnoho děr, pomocí kterých by root takové změny mohl udělat, ale lidé argumentují, že to nebude stačit. Alan Cox:
I s těmito všemi patchi mohu jako root nadále snadno převzít kontrolu nad strojem a současně jsi zakázal uspávání na disk, kexec a spoustu dalších užitečných věcí. Abys systém skutečně uzamknul, musel bys toho udělat mnohem víc.
Další možný způsob, jak by Linux mohl být použit k útoku proti Windows (právě tehdy by se asi klíče dostaly na blacklist), by bylo změnit chování zavaděče Linuxu. Bottomley navrhl, že ověření přítomnosti uživatele při prvním spuštění zavaděče, což se dá zjistit podle toho, že databáze klíčů UEFI a databáze „klíčů vlastníka stroje“ nebudou obsahovat ty správné klíče, rozsah problému omezí. Garrett upozornil na to, že předzavaděč toto nemá dělat, protože i při prvním bootu musí být schopen se spustit v nepřítomnosti uživatele. Bottomleymu to ale vadí:
[...] já ti říkám to, že umožněním automatického počátečního bootu způsobuješ problém, který může skončit útokem na Windows. Mohl bys snadno ověřit přítomnost uživatele při prvním bootu, což by tomu zamezilo. Místo toho ale řešíme všechno tohleto.
Garrett ale vidí automatický první boot jako naprostou nezbytnost, hlavně pro ty, kteří se snaží o automatizovanou instalaci. Ostatní s tím zase nesouhlasí a debata tak stále pokračuje. Hodí se říct, že předzavaděč, který Bottomley vydal, při prvním bootu ověřuje přítomnost uživatele (a nejen tehdy, dále pak při změnách v nastavení secure boot).
Hledání všech cest, jakými by „nedůvěryhodný root“ mohl zasahovat do prostředí secure boot, se zdá být tak trochu nekonečné. Kromě toho budou i všechny budoucí funkce muset být prověřovány, zda nemusejí být v závislosti na CAP_COMPROMISE_KERNEL zakázány.
Nedůvěra v roota je něco pro jaderné vývojáře (a uživatele) dosti nezvyklého. Asi si můžeme představit, že budou všechna problémová místa nakonec vystopována, ale bude to stát hodně úsilí. Jestli si to zaslouží funkce, která je značně (i když ne úplně) užitečná jen pro ochranu Windows, toť otázka. Na druhou stranu, nemoci snadno bootovat Linux na x86 hardwaru jen kvůli blacklistu klíče by bylo také problematické. Budeme si ještě muset počkat, jak to celé dopadne.
Snažíme se zabránit tomu, aby root zasahoval do kódu a dat jádra přes standardní prostředky (/dev/mem, ioperm, přeprogramování zařízení, aby použila DMA na libovolná umístění, obnovení z obrazu hibernace, se kterým si pohrál, apod.).A když si root natáhne vlastní modul, tak co? :)
Cílem je, aby ten, kdo bude chtít používat Linux s distribučním jádrem na stroji s povoleným UEFI "secure bootem" (např. kvůli dual bootu s Windows), to tak mohl mít bez nutnosti lézt do setupu a buď si tam přidávat vlastní klíč nebo střídavě "secure boot" vypínat a zapínat.
Kdo si bude chtít překládat vlastní jádro, ten si tam stejně přidá vlastní klíč nebo "secure boot" rovnou vypne, takže toho se to netýká. Speciální případ je ten, kdo sice chce bootovat vlastní jádro, ale bude chtít secure boot a secure mode využít k tomu, aby měl jistotu, že se bootuje opravdu právě jen to jeho jádro - ale to IMHO nebude až tak časté.
Cílem je…Já si myslím, že skutečným cílem je opravdu zabezpečit aby žádný jiný (ani svobodný) operační systém nemohl natáhnout podvrhnuté Windowsí jádro. Protože přesně tak se to dělalo u cracknutých Windů Vista. Nebudu to popisovat celé, ale jednou ze součástí byl otevřený GRUB4DOS celé v tandemu ve kterém se natáhne jádro, které si myslí že je pořád na původní HW konfigraci. A to se právě dle mého názoru snaží Microsoft zastavit. Aby se nedalo natáhnout žádné jiné jádro než to oficiálně na OEM PC předinstalované a aby zároveň se nedal natáhnout žádný jiný systém, který by takové věci jako natahování jiných jader s uživatelem danými parametry dovolil (nazývat jádro u kterého je funkční kexec jakožto „kompromitované“ je směšné). Je tady prostě vidět ten tlak na jaderné vývojáře k implementování této funkčnosti, protože mi nevykládejte že o takové cipoviny se aktivně snaží sami. Budoucnost potom bude oficiální předinstalovaný Windows a z oficiálních distribučních zdrojů nainstalované GNU distribuce s „nekompromitovaným“ jádrem a z pohledu systému Windows zase zpětná kontrola klíčů v UEFI zavaděči (pro případ, že by si někdo udělal vlastní klíč, nahrál jádro co dovoluje natahovat jiné jádra, protože to je cesta je cracku). Na to bych klidně vsadil svoje boty. A navíc se tak dokonale sváže operační systémem s daným HW a neoddělitelnost nebude jen právní (pomocí smluv), ale i technická.
Nikdo se neozval, kdyz se tohle zavedlo na ARMu, protoze tam MS jeste nema monopol.Tak, tam není důvod to hrotit...
Takze cekam neco jako "Podivejte jak krasne nam to na tom armu funguje, jen to sjednotime".Nemyslím si, že by EU na něco takového skočila.
A proti tomu sa EU neozvala.Protože Win8 na ARM HW nikoho nezajímá... stejný propadák jako jejich Windows Phone. Ten se taky chytil jen u pár mých známých Win programátorů/integrátorů/whatever, co opěvují každý exkrement, co z té firmy vyleze. Když to člověk vidí, tak si říká, jestli nejedou na fetu, že ztratili zbytek soudnosti.
A s Windows 9 pride poziadavka, aby vyrobcovia HW neumoznovali ziadnu manipulaciu s klucmi ani vypnutie secure bootu.To ne, ale spíš si IMHO Microsoft najde způsob jak kontrolovat seznam klíčů v UEFI a když tam bude něco navíc místo jejich oficiálního seznamu, tak počítač bude vyhlášen za kompromitovaný a jádro systému Widnows začne hrát Zagorku. Takže žádný dualboot s custom-made jádrama. Úžasná budoucnost.
Já se hlavně divím, že se to dostalo do současné situace. Vždyť přístup k tomu, co půjde bootovat, má jedna (komerční) firma, které ostatní musí platit za podpis -> je to jasný monopol. Co víc je potřeba k tomu, aby zasáhly příslušné orgány? Nasazení tohoto monopolu do běžné praxe?
nějaká špatná WindowsTo jsou prosím jaká Windows?
U Windows 8 (x86/x86_64) je to povoleno.
Přesněji: je povinné to umožnit.
Přesněji řečeno je to dobrovolné. Tato podmínka se nachází v certifikaci pro Windows, nikdo k tomu vyrobce nijak nenutiU Windows 8 (x86/x86_64) je to povoleno.Přesněji: je povinné to umožnit.
Další možný způsob, jak by Linux mohl být použit k útoku proti Windows (právě tehdy by se asi klíče dostaly na blacklist), by bylo změnit chování zavaděče Linuxu. Bottomley navrhl, že ověření přítomnosti uživatele při prvním spuštění zavaděče, což se dá zjistit podle toho, že databáze klíčů UEFI a databáze „klíčů vlastníka stroje“ nebudou obsahovat ty správné klíče, rozsah problému omezí. Garrett upozornil na to, že předzavaděč toto nemá dělat, protože i při prvním bootu musí být schopen se spustit v nepřítomnosti uživatele. Bottomleymu to ale vadí:Tohle všechno jen kvůli Windows?
Vývojáři zřejmě nemaj nic na práciNo oni by pravděpodobně měli na práci něco užitečnějšího, co by dělali radši. Jenže pracují pro někoho a aby dostávali peníze, musí dělat to, co ten někdo chce.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.