Ten příklad uvedený ve zprávičce sice bezpečný je, ale zároveň ilustruje, že jediná situace, kdy je bezpečné modul natáhnout a podpis zkontrolovat až dodatečně, je situace, kdy ho vlastně kontrolovat nepotřebujeme vůbec, protože integrita modulu je ověřená jinak. Takže je na místě otázka, jestli by to nemělo být nějak řešeno ověření, že tomu tak je, a podpis samotného modulu by se v takovém případě nemusel ověřovat vůbec.
Předpokládám, že tohle bude ošetřené.
Opravuji, asi to nijak ošetřené nebude. Nechal jsem se unést zdejší debatou o nebezpečnosti. Když jsem se na ten příspěvek podíval, evidentně se počítá jenom s variantou, že už byla integrita modulů ověřena např. pomocí secure bootu. Takže ošetřené to v tuto chvíli asi nijak nebude, protože to není potřeba – patch se zaměřuje na situace, kdy je kontrola podpisů modulů redundantní, takže její odložení nemůže bezpečnost zhoršit.
V idealnim svete, kde vse funguje jak ma by to mohlo byt pravdive, ale ukazte mi programatora, co nedela chyby :D Ono i te implementaci secure bootu muzou byt chyby. Redundantni a na prvni pohled zdanlive zbytecna kontrola v takovych situacich muze pomoci odhalit problem drive... nez po par minutach, kdy konecne nastartuji vsechny sluzby.
Takhle fungují alarmy – v domech, autech, v bankách… A asi to funguje, když se to používá. On totiž často ten čas je potřeba.
Dovedu si představit, že se odloží třeba aktivace sítě, připojení disku s daty nebo start služeb až po kontrole podpisů modulů. Takže případný útočník by byl v prostředí, kde nic nezmůže.
Alarm v dome nefunguje tak, ze by v case zakodovani slo vlezt do domu klidne oknem v prvnim patre. Definuji se typicky nejaka vybrane zpozdene zony v okoli klavesnic u vstupu, kde je ponechan cas na odkodovani (a rozhodne clovek nesmi opustit prostor zpozdene zony). Ostatni zony spusti ten alarm hned... A rozhodne jde cela EZS postavit i tak, ze odkodovani zastrezeneho prostoru se cele odbude zvenci (zvlaste s moznostmi, co jdou dnes), pak i potreba zpozdene te zony zcela odpadne.
Cemu pomuze, ze odlozim kontrolu modulu, kdyz soucasne budu vazan tim, ze nesmim aktivovat sit, pripojit svazek...? Ten cas tomu beztak venovat nakonec musim... a jen kvuli honbe za par milisekundama v jedne fazi bootu ten problem proste jen "odsunout" jinam na pozdeji a za cenu, ze tam v mezicase naopak nejaky problem vzniknout muze je proste divny a nejak postrada logiku... nejbezpecnejsi je to overovat hned pri natazeni. Ve zpravicce se navic pise, ze to chteji resit prave az ve chvili, kdy nabehne userspace... takze to okno muze byt klidne hodinovy.
Alarm v dome nefunguje tak, ze by v case zakodovani slo vlezt do domu klidne oknem v prvnim patre.
Přesně takhle alarm funguje. Když je alarm zakódován, nebrání zloději, aby vlezl do domu/bytu kudykoli. Alarm zareaguje teprve po té, když je zloděj uvnitř. Nebrání to vniknutí dovnitř, ale slouží to k tomu, aby to zloděje pokud možno odradilo (proto se prvky alarmu jako sirény umisťují viditelně a proto bývá viditelně umístěná informace o tom, že je objekt střežen), a když už to zloděje neodradí, aby mu alarm nedal čas něco ukrást, protože bude muset rychle zmizet.
Cemu pomuze, ze odlozim kontrolu modulu, kdyz soucasne budu vazan tim, ze nesmim aktivovat sit, pripojit svazek...? Ten cas tomu beztak venovat nakonec musim... a jen kvuli honbe za par milisekundama v jedne fazi bootu ten problem proste jen "odsunout" jinam na pozdeji
Zpožděná kontrola se může dělat paralelně s jinými činnostmi. Takže celkový čas startu se zkrátí, protože kontrolu podpisů odstraníte z kritické cesty a provedete ji paralelně vedle nějaké jiné činnosti.
za cenu, ze tam v mezicase naopak nejaky problem vzniknout muze
Předpokládám, že to bude řešené tak, aby podvržený modul nemohl tu kontrolu podpisů vypnout nebo obejít.
nejbezpecnejsi je to overovat hned pri natazeni
Ano, je to nejbezpečnější. Ale někdy není potřeba největší bezpečnost a vyplatí se zanedbatelné omezení bezpečnosti vyměnit za něco jiného (třeba rychlejší start).
Ve zpravicce se navic pise, ze to chteji resit prave az ve chvili, kdy nabehne userspace... takze to okno muze byt klidne hodinovy.
Kde trvá start linuxu hodinu? A i kdyby – pokud během té hodiny nebude mít útočník prostředky, jak škodit (např. nebude dostupná síťová komunikace), je jedno, jak dlouho ta doba trvá.
> Předpokládám, že to bude řešené tak, aby podvržený modul nemohl tu kontrolu podpisů vypnout nebo obejít.
Z čeho tak usuzujete? Dovedete si představit, jak by to technicky vypadalo? Kernelové moduly běží se stejným oprávněním jako kernel sám a mohou mu číst a zapisovat kamkoliv do paměti. Dovedu si představit, že to bude opruz, ale asi ne větší opruz než praktické zneužití buffer overflow.
Kernel a moduly kernelu bezia v ring 0. To oddelenie ktore spominate je ze drivery a software ktory potrebuje pristup k IO operaciam bezi v ring 1 alebo 2. Userspace je ring 3. Ak bude v ring 0 az 2 zavedeny infikovany kod, tak to co citate z disku v ring 3 nemusi byt absolutne zhodne s tym co sa na disku v skutocnosti nachadza...
Jestli některé moduly běží v ring 1 nebo 2, tak to možná smysl dávat bude.
Ale pořád tu vidím otazníky, které tu v diskuzi zazněly jinde:
* Kolik času se tím reálně ušetří? Budu počítat optimistickou situaci, která odpovídá tomu, že ušetříme celý čas kontroly, protože se provede ve chvíli, kdy se CPU fláká. Ověření podpisu je v podstatě hash (dat, která stejně musejí být v RAM) plus ověření podpisu hashe, někdo to tu už odhadoval na řádově milisekundy, já bych taky nečekal víc.
* Scénář se secure bootem (uvádí nejen zprávička, ale i autor v LKML) dává smysl napůl – tady by šlo kontrolu úplně vynechat.
* Proti úspoře stojí navýšení komplexity kódu, která přidává možnost zranitelností (ledaže je kontrola zbytečná, jako v předchozím bodě). Do attack surface spadají i všechna volání API kernelu, které může modul provést před ověřením.
Tak nějak tuším, že RH k tomu má nějaký důvod, ale naprosto ho tam nevidím.
V commitu je zmiňován secure boot, takže s jiným scénářem se v tuto chvíli pravděpodobně nepočítá. Tím pádem kód není nijak složitý a kontrola je v podstatě zbytečná. Následná kontrola je v podstatě jenom ověření, že se chyba nestala někde jinde. Attack surface je tedy v podstatě nulový.
V e-mailu s commitem se píše „significantly improve the boot speed“, takže já věřím, že to mají zjištěné a že to v některých scénářích pomůže.
Tady je to samozřejmě vytažené jako zajímavost, takže to nemusí být nijak častý případ a je klidně možné, že se nikdo z nás, kdo tady diskutujeme, nesetká se situací, kde by to pomohlo. Ale psát rovnou „mně to nepomůže, takže je to k ničemu“ je poněkud nafoukané (a to není na vás, jsou tu jiní takoví experti).
Aha, ona většina popisu patche šla pochopit oběma způsoby (kontrola provedená později vs. dočasně vypnutá kontrola), nicméně z „This patch introduces a feature to skip signature verification during
the initrd boot phase.“ jsem pochopil, že se kontrola těch modulů z initrd opravdu vypíná.
Ale autor zprávičky to zjevně pochopil též špatně:
> Podpisy u jaderných modulů se zkontrolují zpožděně až naběhne userspace.
Tady už zhruba rozumím motivaci. Resp. stále nevím, kde přesně to něco reálně ušetří, ale aspoň chápu, že na slabém HW to nějaký přínos mít bude a že nejde o nějaké dramatické zvětšení možnosti chyb.
No kdyz se do toho patche skutecne pozorne podivate, tak ten prostor pro chyby tam je velky. Ona ta kontrola se nereaktivuje sama od sebe (Furthermore, a supplementary method is necessary to reactivate verification subsequently), ale musi k tomu z userspace prijit nejaky pokyn. A samozrejme i v tehle casti muze vzniknout chyba, flag v sysfs se z jakehokoliv duvodu nezmeni... a oopss... najednou se nekontroluje nic :-)
To samozřejmě ano, nicméně:
1. Na úrovni samotného kernelu tam dramatické riziko chyb nevidím.
2. V initu je potřeba pohlídat správné zpracování chyb, zejména se nesmí za žádných okolností stát, že boot pokračuje bez toho přepnutí – ať už protože failne něco před přepnutím a skončí skript, nebo protože failne samotné přepnutí. Je na to potřeba dát pozor, ale přijde mi to celkem řešitelné. Rozhodně bych to bral jako řádově menší riziko než snahu o dočasný běh neověřeného kernelového modulu s omezeným oprávněním.
No, jasne... to si kdysi jinde rikali taky :-) Ano, zdanlive to trivialni je, naprogramovat to ted je jedna vec, ale to ze po case nejaky commit muze jinde zcela nepozorovane rozbit je vec jina... takovejch chyb pamatuje historie uz spoustu.
Lenze z kodu modulu natiahnuteho do RAM tak aby ho bolo mozne spustit ten podpis neoverite. Jedine ze by neobsahoval priame volania a skoky. Musite ho nacitat znovu z disku a overit ho proti tomu ako vypadal pred realokaciou.
No, z pohladu komunity tam ani ja nevidim dovod.
Ale pozor, KONSPIRACIA:
Odpoved z helpdesku: No chcete bezpecnejsi system... AIX ste uz skusal? :D
18. 9. 2023, 10:30 editováno autorem komentáře
Vsak take ulohou alarmu neni explicitne zabranit zlodeji vniknout dovnitr a nikde jsem nenapsal, ze to jeho ulohou je. Ulohou alarmu je.... spustit alarm, treba vc. notifikace na PCO, ktery obratem aktivuje vyjezd bouchacu, co tomu zlodeji rozbiji drzku...
Ulohou kontrol pri natahovani kerneloveho modulu je zabranit natazeni nezadouciho kodu, zpravidla s velmi vysokym opravnenim. Ta ochrana tu je a funguje... jen nejakym z prominutim posukum se se zda, ze to trva moc dlouho. I kdyz se realne resi par milisekund.
Z pohledu optimalizace procesu bootu co resi RH se resi naprosta marginalnost, kde zpozdeni je minimalni. Jasne, nejaky vyvojar z si vykaze cinnost, ale za cenu toho, ze bezpecnost celeho retezce to bez pochyb snizi. Zanedbatelny je tady prave cas, ktery ta kontrola zabere.
Kde trva start hodinu? Treba u velkych databazi. Ale chapu, ze od vyvojarskyho stolu se zkusenosti z realneho provozu nahani dost blbe... protoze to byste takovou ptakovinu, jak dlouho trva kontrola zrovna tech signatur kernelovych modulu neresil.
Takže evidentně se zabezpečení dá řešit i tak, že se nesnažíte útočníkovi zabránit v útoku, ale snažíte se útok detekovat a útočníkovi zabránit v pokračování útoku.
Z pohledu optimalizace procesu bootu co resi RH se resi naprosta marginalnost, kde zpozdeni je minimalni.
Jasně, v RedHatu o tom nic neví, zapomněli se vás zeptat.
Kde trva start hodinu? Treba u velkych databazi. Ale chapu, ze od vyvojarskyho stolu se zkusenosti z realneho provozu nahani dost blbe... protoze to byste takovou ptakovinu, jak dlouho trva kontrola zrovna tech signatur kernelovych modulu neresil.
Běžte s tím trollením už do háje. Psal jste, že hodinu trvá, než se start systému dostane do userspace. Vám se databáze startuje v kernelu? Na to jste přišel v reálném provozu?
Resit kyberbezpecnost timhle zpusobem je tak trosku diletanstvi. Zvlast pokud se bavime o par usetrenych milisekundach. A ano, ze v korporatech sedi spousta lidi, co u podobnych ptakovin vykazuje cinnost neni nic duverneho. A to, ze ve velkem korporatu neco vymysli opravdu neimplikuje, ze to je spravny postup.
Ona ta kontrola behem uz natazeni ma svuj padny duvod.... nejdriv cely kod s plnou paradou spustit a pak nekdy s odstupem casu prekontrolovat kontrolni soucty je proste blbost uz v samotnem navrhu.
Máte pořád pocit, že tohle se nutně dělá pro serverový trh.
Nenapadlo Vás třeba, že existují i jiná nasazení?
Embedded, automotive, Telco. Tam ta kontrola nemusí být pár milisekund (nižší výkon, chybějící akcelerace), secure boot je často zapnutý a restart po výpadku musí být co nejrychlejší, aby (v extrémním případě) fungovaly třeba blinkry.
Od té doby co jsem viděl plnotučný linux v GPS přijímači ve formě SMD čipu, včetně nožičky s funkcí ATX power tlačítka, mě takové nápady nijak nepřekvapují.
Ono je jedno, v cem to nasazujete. Tenhle pristup "jupi, usetril tady jsem par milisekund" bude presne misto, na ktere se utocnici pak zameri a tehle slabiny nalezite vyuziji ve svuj prospech. Jen proto, ze nekdo nedomyslel dusledky...
A zrovna automotive je oblast, kde s bezpecnosti na stiru jsou. Vytvaret nove problemy namisto reseni tech, co tam uz dnes jsou je cesta do pekel... zkratkou.
U modernich cipu pro embedded uz nizsi vykon neni argument. Tim spis ze pro embedded je jadro i s moduly hodne osekane. A klidne si obcas muzete dovolit postavit jadro bez modulu jako monolit.
Kolikrat vam takovy linux taky bude bootovat? Nebude treba v deep sleep a neprovede se plny boot jen kdyz treba vymenite baterku v aute?
Ten GPS prijimac... linux asi nebyl primo v GPS casti radia ze? Tam musel byt aspon nejaky hardRTOS.
Jasne, takove tlumeni tocny v kloubovem autobusu se muze restartovat kdykoliv si vzpomene... no to by to vypadalo... :-)
Jistě, že může. Klasická průmyslová smyčka má reakční dobu cca 1 ms nebo více. Pokud minimalizujete dobu restartu, tak si toho to zařízení ani nemusí všimnout.
Krom toho, tlumení točny asi nebude ovládáno primární řídící jednotkou napřímo.
Viděl jste někdy co dělá elektrická síť v autě při startu? Tam rozhodně není regulovaných 12 V.
Vsak samotny linuxovy kernel vam za 1ms nenabootuje... ani omylem... :-) Ohanet se timhle pri obhajobe toho nesmyslu z RH je tak trosku chucpe... Za ridici jednotku tocny v autobuse si muzete zamenit treba ridici jednotku airbagu - to je jedno, jsou mista kde restart "behem jizdy" je zcela nemyslitelna vec, narozdil od nejakeho infotainmentu. Co dela napeti v palubni siti vim, ale zrovna osetrit tohle je trivialni task, co zvladne i zacinajici elektronik a zvladne to i levna cinska nabijecka, co vam posila 5V do telefonu kvuli nabijeni. Mimochodem, jak byste se tvaril, kdyby v pripade kolize airbagy nebouchly jen proto, ze se palubni napeti zrovna zhouplo, kernel zpanikaril a system znovu startoval....? ;-) No mozna by vam to uz bylo pak jedno, ono v hrobe uz toho clovek moc neresi, ze...?
Resit kyberbezpecnost timhle zpusobem je tak trosku diletanstvi.
Není, je to jeden z běžných způsobů.
Zvlast pokud se bavime o par usetrenych milisekundach.
To tvrdíte vy.
Ona ta kontrola behem uz natazeni ma svuj padny duvod.... nejdriv cely kod s plnou paradou spustit a pak nekdy s odstupem casu prekontrolovat kontrolni soucty je proste blbost uz v samotnem navrhu.
Tak nám ten důvod vysvětlete pro scénář, který je uveden v e-mailu s commitem – tedy v prostředí secure bootu.
Pokud má být zachován provoz služeb, tak ano. A těžko by si někdo pořizoval 10000 serverů, aby je pak všechny najednou vypnul.
Každopádně je to jedno, za startují postupně, nebo najednou – v obou případech je start serveru neproduktivní doba. Představte si to třeba tak, že provozujete ty servery a někdo jiný vám platí za služby, které na tom serveru běží. Za dobu, kdy server startuje, nedostanete zaplaceno nic.
asi ti uniklo na co sem reagoval a i unikl tvuj argument vejs...
Ratbatcat psal ze par sekund je u 10000 server par hodin
- to by bylo jen pokud se startovali postupne vsechny
- sam pises ze najednou je nebude vypinat, tzn. je najednou nebude ani zapinat
- navic nahore "navrhujes" ze nez se moduly opozdene zkontroluji nemuseli by mit dostupnou sit, disky, sluzby = kde je pak to zrychleni kdyz sluzby bydou dostupne po stejne dobe jako kdyz se moduly kontroluji rovnou?
shrnuto: mozna je nekde schovana vyhoda, ale na prvni pohled zadna neni, aby odlozeni bylo bezpecne musi se odlozit nasledne veci, takze se cas neusetri
to by bylo jen pokud se startovali postupne vsechny
Ale Ratbatcat nepsal, že je to pár hodin souvislé doby. Je to pár hodin výpočetního výkonu serverů, kdy ty servery mohly dělat něco, proč se jejich provoz platí.
kde je pak to zrychleni kdyz sluzby bydou dostupne po stejne dobe jako kdyz se moduly kontroluji rovnou?
Nebudou dostupné po stejné době. Ta opožděná kontrola podpisů se evidentně dělá proto, aby neblokovala start, ale bylo ji možné provést ji paralelně s jinými činnostmi. Je to stejný princip, jako když se služby po startu nespouštějí jedna po druhé, ale spouštějí se paralelně v závislosti na tom, když mají splněné své závislosti. Doba startu jedné služby se tím nezmění, ale zkrátí se tím doba mezi startem userspace a spuštěním všech služeb – protože start některých služeb běží paraleleně, jejich start se tedy časově překrývá.
Neusetrite tym ziadny strojovy cas. To ze sa tie moduly skontroluju az v userspace tiez zaberie nejaky strojovy cas, ktory bude vecsi nez keby sa to kontrolovalo v kernel space. Ak si myslite ze v userspace ta kontrola prebehne rychlejsie, nez v kernel space, tak chodte edukovat vyvojarov samby v kernel space... A ak uz tolko chcete usetrit peniaze zakaznikov za spaleny strojovy cas, tak radsej rozjimajte nad tym kolko sa na mnohych servroch zbytocne premrha strojoveho casu a pamati, pretoze nejake pako tu servrovu aplikaciu napisalo v jave alebo v dotnet, ci v inom interpretri...
Ak si myslite ze v userspace ta kontrola prebehne rychlejsie, nez v kernel space, tak chodte edukovat vyvojarov samby v kernel space...
Tam je trochu jiná situace a v jádře to opravdu může být efektivnější, protože odpadne režie syscallů. U ověření podpisu modulu není žádný důvod, proč by měla být jedna nebo druhá varianta výrazně rychlejší, pokud není výrazně efektivnější jedna nebo druhá implementace kryptografických algoritmů.
Za cenu podstatneho snizeni bezpecnosti. Kontrolni podpis tam neni pro srandu kralikum, ale prave proto aby se zamezilo spusteni kodu, ktery se spustit nema. Jirsakuv pristup "jejky, se spustilo neco co nemelo, panika" za tech par usetrenych milisekund fakt nestoji. Ono v tom mezicase, nez se neco spusti a nez probehne ta userspace kontrola se muze s vyuzitim nejakych technik stat i to, ze takto spusteny kod uz tak snadno nedetekujete.
Ak si myslite ze v userspace ta kontrola prebehne rychlejsie, nez v kernel space, tak chodte edukovat vyvojarov samby v kernel space...
Nemyslím. Jasně jsem napsal, že výhoda toho odložení je paralelizace. Už jsem to tu vysvětloval dvakrát, potřetí už to vysvětlovat nebudu.
A ak uz tolko chcete usetrit peniaze zakaznikov za spaleny strojovy cas, tak radsej rozjimajte nad tym kolko sa na mnohych servroch zbytocne premrha strojoveho casu a pamati, pretoze nejake pako tu servrovu aplikaciu napisalo v jave alebo v dotnet, ci v inom interpretri...
Provozovateli cloudových serverů je jedno, že zákaznický software mrhá strojovým časem – naopak je rád, dostane to zaplaceno. Naopak ale není rád, když tím strojovým časem mrhá při bootu a žádný zákazník mu za to nezaplatí.
Mimochodem, strojový čas a paměť jsou mnohem levnější, než práce programátora a než oprava chyb. Takže to, že je to napsané v interpretovaných jazycích, to zlevňuje (resp. to vůbec umožňuje, aby ty aplikace vznikly – věci jako Google nebo cloud by v assembleru nikdo nenapsal). Mimochodem, ten interpretovaný kód může ve výsledku běžet i rychleji, než nativní kód – protože interpretovaný kód se často za běhu překládá do nativního kódu, a přeloží se přímo pro danou architekturu a pro daný typ zátěže, tedy může být lépe optimalizovaný, než generický překlad.
Jasne, kazdy prevadzkovatel checkuje server (virtual) ci uz nabehol do userspace a az od toho okamihu zacne uctovat :D
Zamyslel ste sa niekedy nad tym, kolko casu zbytocne stravite ohybanim svojho virtualneho vesmiru tak aby sa mohol ostatnym zdat realny? Nadany clovek by ten cas pretavil na nieco uzitocne...
Jasne, kazdy prevadzkovatel checkuje server (virtual) ci uz nabehol do userspace a az od toho okamihu zacne uctovat :D
Samozřejmě. Protože provozovatel třeba SaaS účtuje za dobu, kdy běží nějaká služba, třeba databáze. Provozovatel kontejnerových služeb účtuje za dobu, kdy běží kontejnery. Provozovatel virtualizace účtuje za dobu, kdy běží virtuální počítače. Všechny tyhle věci se spouští na serveru provozovatele až z userspace.
Zamyslel ste sa niekedy nad tym, kolko casu zbytocne stravite ohybanim svojho virtualneho vesmiru tak aby sa mohol ostatnym zdat realny?
Já doufám, že to vám a případně ostatním pomůže, když se dozvíte, jak to funguje v reálném světě.
Z reakcii ostatnych uzivatelov na vase prispevky usudzujem, ze si myslite ze ste jediny kto zije v realite, ostatny podla vas nemaju ani tucha jak to v realite vyzera, vsak... nezufajte dnesny doktori by si mali vediet poradit...
Este raz, pomaly a naposledy: ak sa bude kontrola modulov riesit az v userspace, tak ju spomalia syscaly, overenie opravneni, znovunacitanie modulov len koli kontrole a dalsie zalezitosti ktore pri kontrole v kernel space odpadaju. Vo vysledku teda budete mat o malo rychlejsi boot ale spomalite si tym nabeh stroja do produkcneho stavu. Na paralelizaciu nespoliehajte. Systemd nabieha paralelne, takze tazko najdete jadro procesoru ktore by len tak lezalo ladom... K tomu si pridajte bezpecnostne problemy, secure boot vam zaruci len podpisane initrd, tam vsak mate len zakladnu sadu modulov, takze nie vsetky moduly ktore jadro nacita budu podpisane v ramci secure bootu. A infikovany modul moze zkreslit kontrolu z userspace tak, ze sa bude vzdat vsetko v poriadku.
Z reakcii ostatnych uzivatelov na vase prispevky usudzujem, ze si myslite ze ste jediny kto zije v realite, ostatny podla vas nemaju ani tucha jak to v realite vyzera, vsak... nezufajte dnesny doktori by si mali vediet poradit...
Ne, v realitě žije většina lidí. Ale je tady pár lidí, kteří si myslí, že realita je pár jejich serverů a nic jiného neexistuje.
Este raz, pomaly a naposledy: ak sa bude kontrola modulov riesit az v userspace, tak ju spomalia syscaly, overenie opravneni, znovunacitanie modulov len koli kontrole a dalsie zalezitosti ktore pri kontrole v kernel space odpadaju. Vo vysledku teda budete mat o malo rychlejsi boot ale spomalite si tym nabeh stroja do produkcneho stavu.
Nemusíte to vysvětlovat ještě jednou, když už jsem vám to vyvrátil. Vysvětloval jsem tu několikrát, že jádro na to ověření podpisů čeká a nic jiného dělat nemůže, zatímco v userspace se to ověření může provádět paralelně s jinými operacemi.
Navíc je nesmysl to vaše tvrzení o syscalech a kontrole podpisů z userspace. Asi jste nepochopil, co ten patch vlastně dělá. Ten patch dělá to, že (když je aktivován příslušný příznak) nebude jádro kontrolovat podpisy modulů. Userspace pak zápisem do /proc tu kontrolu podpisů v jádře zapne. Takže jediný přechod navíc mezi jádrem a uživatelským prostorem je ten jeden zápis příznaku, který v jádru aktivuje ověřování podpisů, které bylo vypnuto. To fakt není něco, co by start systému zpomalilo.
Na paralelizaciu nespoliehajte.
Já na ní spoléhám. Spoléhá se na ni ve spoustě jiných případů a pomáhá to.
Systemd nabieha paralelne, takze tazko najdete jadro procesoru ktore by len tak lezalo ladom...
Při startu služeb nejde jen o CPU, ale také o čtení z disku, ze sítě… Při ověřování podpisů nejde jen o CPU, ale také o čtení z disku. Vaše představa, že při startu userspace jedou všechna jádra na plno, se ve většině případů nebude shodovat s realitou. Tipoval bych, že většinou se bude čekat na disk nebo na síť.
Tak, a teď můžete společně s Dannym mudrovat nad tím, kde tam je ta díra umožňující nahrát nepodepsaný modul. Jasně, je možné kroky 3 a 4 omylem prohodit. Ale není tak těžké spustit je ve správném pořadí a s krokem 4 počkat až na okamžik, kdy byl proveden krok 3.
"start serveru neproduktivní doba."
Co cekat od Jirsaka, ten totiz nikdy zadny server nevidel ani z rychliku. Jirsaku, jen kontrola HW a jeho inicializace muze trvat klidne 1/2 hodiny. Jestli bude kernel startovat o sekundu rychlejs je uplne irelevantni.
Nemluve o tom, ze se ty servery klidne i najednou vypnou, presne v okamziku, kdy zafunguji ty veci o kterych nemas paru, jako treba vypadek napajeni a UPS.
jen kontrola HW a jeho inicializace muze trvat klidne 1/2 hodiny. Jestli bude kernel startovat o sekundu rychlejs je uplne irelevantni.
Tady řádí nějaká nemoc postihující logické uvažování? Už několikátý člověk tady argumentuje „existují případy, kdy to nepomůže, tudíž je to k ničemu“. Takže zrušíme v autech pásy a airbagy, protože jsou případy, kdy nepomůžou? Zrušíme zámky na dveřích, protože někdy nefungují?
Takže znovu – podstatné není to, že to někde nepomůže, podstatné je to, že to někde pomůže. Třeba v embedded zařízeních inicializace hardware proběhne rychle; naopak tam není velký výkon, takže výpočet hashů může trvat poměrně déle.
Nemluve o tom, ze se ty servery klidne i najednou vypnou
To je z hlediska doby startu serveru relevantní zhruba jak?
Jenze vy tady naopak sam klidne akceptujete stav, kdy airbag je na chvili zcela vypnuty jen proto, abyste teoreticky mohl byt v cili o par milisekund driv ;-) Kdyz uz jste u tech primeru...
...a kdyz jedna zena porodi dite za devet mesicu, tak devet zen to zvladne za mesic? :-) Ne, tyhle casy se nedaji uplne scitat...
Nehlede na to, ze u tech serveru casto stravite nejdelsi cas nikoliv u bootu systemu a natahovani kernelovych modulu... ale u inicializace pred tim, nez se nacte zavadec... a pripadne pak u startu samotnu aplikace.
Jak dlouho trvá start zavaděče asi RedHat moc ovlivnit nemůže, kontrolu podpisů modulů ovlivnit může. A z hlediska zrychlování startu není zajímavé to, že někde start zavaděče trvá dlouho, podstatné je to, kde to je rychlé. Vaše argumenty znějí, jako kdybyste psal, že je zbytečné, aby Linux podporoval víceprocesorové systémy, protože existují i jednoprocesorové systémy. Ano, existují, ty z podpory více procesorů těžit nebudou. Ale ty víceprocesorové systémy ano. Takže pokud provozujete nějaký enterprise hardware, kde se počítá na minuty nebo desítky minut doba studeného startu, než se vůbec spustí zavaděč systému ze systémového disku, tam tohle vylepšení zajímavé nebude. Tam, kde je tenká virtualizace a prakticky se spouští jenom nové jádro, a v userspace se pak třeba spustí jenom jedna služba, tam to zajímavé být může. Ve vaší praxi se to třeba nebude hodit k ničemu, tak to prostě nebudete používat. Tak jednoduché to je.
I pokud inicializace samotneho enterprise hardware trva hodiny, tak tech par milisekund navic pri kontrole natazeneho modulu, co to ovlada to fakt nevytrhne. A tam kde se pousti jenom jadro a jenom sluzba se nemusi ani natahovat ty moduly.
Ostatne vetsinu balastu si natahuji ruzne auto-detekcni mechanismy, kdy realne pri startu natahujete i moduly co na danem systemu vubec nepotrebujete. Ale ono slepit initrd tak, aby tam ten zbytecny balast nebyl je uz moc prace, tak se vymejsli blbosti okolo, ze? :-)
Dobre. Tak v druhe casti spektra v embedded mi to taky smysl nedava... kde to tedy smysl dava?
A pokud bych byl kernel vyvojarem tak tam uz tim tuplem ne kdyz mam uplnou kontrolu nad systemem.
Nesnazi se nam nahodou nekdo dostat do systemu hriste pro backdoor?
Tohle zasvinovani systemu coby kdyby .. mozna to pouzijeme nema pri vyvoji operacnich systemu co delat.
kde to tedy smysl dava?
Přečtěte si diskusi, bylo tu to napsáno mnohokrát.
A pokud bych byl kernel vyvojarem tak tam uz tim tuplem ne kdyz mam uplnou kontrolu nad systemem.
Jenže ten systém tam není proto, aby tam byl samotný kernel. Kernel jenom poskytuje služby něčemu dalšímu, co je ten důvod, proč se ten počítač vůbec provozuje. Kdyby Linux používal přístup „my si tady v jádru děláme, co chceme, a userspace nás nezajímá“, nikdo by ho nepoužíval.
Mě překvapuje, že to vůbec něco ušetří. Představoval jsem si, že to funguje tak, že to spočítá nějaké SHA-256 z modulu (kolik máte modulů? pár mega? tak to je za pár ms) a pak se ověří ECDSA podpis, což je prej desítky mikrosekund na podpis na dnešní poměry už dost starém procesoru, takže zase pokud máte desítky modulů tak to jsou jednotky ms maximálně.
Hmm, secure boot.
Takze ochranka skontroluje dav ako celok, ci splna urcite ktriteria. Nasledne ho vpusti dnu. A dodatocne, pocas dna skontroluje kluce, pristupove karty, alebo cedulky a tych co nemaju validny kluc (kartu, cedulku) vyhodi?
Nefunguje vacsina firiem tak ze kontroluje kazdeho individualne a az potom ho pusti dnu? I napriek tomu, ze to predstavuje urcite zdrzanie.
Jasne, a ono nikdy v secure bootu nebyla zadna chyba a muzeme tomu na 100% verit... tak moc, ze nekterou kontrolu prohlasime uz za zbytecnou... :-) Vase duvera v to, ze vyrobce desky to udela skutecne bezchybne je zabavna... kdepak se bere?
Vypujcil bych si od klasiku :-) Takove chyby vyloucit proste nejde. A odlozenim nekterych kontrol se jen poskytne prostor pro utocnika. A nebojte, on se nekdo dostatecne kreativni vzdycky najde. Cesta do pekel je vzdy dlazdena dobrym umyslem - tady tim dobrym umyslem je o chlup zrychlit boot za cenu, ze se potencialne vytvori novy vektor utoku. Problemum se ma predchazet a ne je vytvaret - bohuzel to ne kazdy vyvojar zvladne... ono prave tohleto "a tohle je zbytecny" uz v minulosti bylo mnohokrat zdrojem prusvihu.
"Zapomínáte na secure boot"
Ani ne ... ty zjevne netusis, ze zdaleka ne vsechny moduly nutne musi byt v initu. Tam musi byt jen ty, ktere potrebjes k bootu, a dalsi hromada se jich muze spustit az potom.
Takze to spis vypada tak, ze tobe prijde k vratum dav, ty nahodne vylosujes 5 lidi, ti kontrolou projdou atak pustis dovnitr cely dav.
A teprve expost budes po arealu honit jedlotlivce, i kterych si najednou zjistil, ze je snima neco spatne, ale oni ti uz mezi tim barak podpalili.
Ani ne ... ty zjevne netusis, ze zdaleka ne vsechny moduly nutne musi byt v initu. Tam musi byt jen ty, ktere potrebjes k bootu, a dalsi hromada se jich muze spustit az potom.
Zjevně netušíte vy. Právě proto dává smysl při načítání modulů z initrd ověřování podpisů odložit, ale zapnout ho před tím, než se začnou načítat ostatní moduly.
To jste rekl vy, ja nic o neprustrelnosti netvrdil. Ale system, kde se kontrola na chvili vypne s tim, ze se to "doufejme" casem dozene rozhodne je podstatne vice zranitelny, a to uz v navrhu. V tech vasich paralelach s airbagy ad vyse - to je jak kdybyste zapinal airbag (nebo i jen bezpecnostni pas) az na dalnici s tim, ze na vyjezdu ze sidliste se prece nemuze nic stat... jenze presne takhle uvazujete s tim docasnym vypnutim kontroly kernelovych modulu, i kdyz si to odmitate pripustit.
Preklopeno k diskutovanemu problemu, bootne kernel, nejakym zpusobem se natahne nepodepsany a malwarem infikovany modul, ten pozmeni i chovani sysfs tak, ze userspace dodatecne zapnuti kontrol zdanlive jakoze projde a nebude zaregistrovane... :-) To se podle vas nemuze stat, co? :D Usetrite par milisekund vymenou za to, ze pootevrete utocnikovi vratka...
V čem přesně se vaše situace liší od toho, že bootne kernel, nějakým způsobem se operace ověření podpisů modulů nahradí za no-op, natáhne se nepodepsaný a malwarem infikovaný modul, ten pozmění chování kernelu tak, že ověřování podpisů modulů zdánlivě jakože projde… :-) To se podle vás nemůže stát, co? :D Ušetříte pár milisekund výměnou za to, že pootevřete útočníkovi vrátka… Čím víc smajlíků, tím víc Adidas :-P
Psal jste o nic vyse a soucasne tu u toho obhajujete jejich nepouzivani ve meste. Aneb sam si nevidite do vlastnich ust... :-)
Odlozeni kontroly u natahovanych kernelovych modulu jde prirovnat k tomu nepoutani se za jizdy po meste :P
20. 9. 2023, 13:08 editováno autorem komentáře
Já jsem se na něco ptal, vy se odpovědi stále vyhýbáte.
Nepoužívání pásů ve městě neobhajuju. Stále se tváříte, jako kdybyste nevěděl o mechanismu secure bootu, který zajistí jiný způsob ochrany načítaných modulů. Takže v tom příkladu s pásy v autě vám tam pořád chybí jiná ochrana srovnatelná s pásy, která by se používala v době, kdy dotyčný pásy nemá zapnuté. Není tak těžké to pochopit, tak ze sebe pořád nedělejte hlupáka, který to nechápe.
Ja vim o mechanismu secure bootu a jeho slabostech, taky jsem si postudoval zpusob fungovani patche - kdy se kontrola proste vypne do chvile, nez ji neco opet zapne. V tom mezicase je proste okno, kdy se muze stat neco hodne skaredeho - a secure boot tomu sam o sobe uz nezabrani... a jak toho vyuzije utocnik je ciste na jeho kreativite.
Prirovnani s pasy je prilehave - to je stejne jako se poutat az po dosazeni rychlosti 40km/h s tim, ze do te doby me ochrani kastle auta. Hlupaka delate ze sebe vy - bezpecnost systemu neni o jedne izolovane funkci, k tem pasum mate krom te kastle taky airbag a ty funkce se vzajemne doplnuji.
Ponechme teď chybnou implementaci. Chybně implementováno může být cokoli, včetně ověřování podpisů modulů v jádře. A výše uvedený proces není nic složitého, co by bylo nějak náchylné k chybné implementaci.
Mezi body 2 a 3. Protoze kdy se tak stane je pouhy dohad. Muze tak byt obratem (ihned, jak se to snazite navliknout vy), ale take treba az pote, co systemd vyhlasi, ze je vse running... Prave tady je ta faze, kdy nekteri honi ty milisekundy, aby se mohli chlubit o chlup rychlejsim startem (analogie jde hledat i u windows service). Vy sva tvrzeni o bezpecnosti celeho prcesu stavite na necem, co jeste implementovane neni, nebo jsem to ja minimalne nenasel. Existuje pouze kernelovy patch, co to vypne a co doufa, ze to nekdy nekdo zase zapne. Ale komu vadi tech par milisekund pri modprobe to asi nezapne jako prvni vec, protoze tim by ten boot sam zdrzel - to je zas muj odhad.
Tak jeste presneji, kdyz mate problem chapat psany text v nejakem kontextu. Poradi, ktere uvadite je ciste vase spekulace. Vas bod tri muze klidne nastat treba az po vasem bodu pet. A nebo uz nekde mate implementaci, o kterou byste sva tvrzeni mohl oprit? ;-) Mate leda tak kulovy a mozna rizika plynouci z nevhodne implementace hodnotite jako Hurvinek.
Danny: Nebo také můžete použít jádro, které podpisy modulů vůbec neověřuje. Jenže pro implementaci nové funkcionality není podstatné, zda je možné ji použít špatně, ale to, zda je možné ji použít správně. To, jestli to má implementovaná správně, si holt bude muset ověřit ten, kdo tu odloženou kontrolu zapne.
Tyhle kecy jsou z kategorie "musim jet po meste aspon kilo, abych byl v cili o chlup rychleji". Obcas to ma ponekud fatalni konce. A zrovna programatori jsou lidi, co skarede chyby produkuji pomerne casto - takze je jen otazka casu, kdy ty vase teorie budou v praxi seriozni bezpecnostni problem... kvuli zdanlive usetrene chvilce.
Kdyby to byl cerv, tak je uz stejne pozde, a i kdyz to nebude cerv, tak bych jaksi rek, ze rozbijes spoustu dalsich veci, protoze treba to, ze se modul uspesne nacte, spusti nejakou dalsi akci, a to, ze ten modul nasledne odtrelis muze klidne i neco cestou znicit, protoze uz nastartovala akce ktera cekala na modul.
Nerekl bych, ze by jakykoli vyvojar cehokoli ocekaval, ze uspesne nacteny modul znicehoz nic zmizi.