Můj custom kernel vůbec nemá AF_ALG zakompilovanou.
To nepíšu jako plácnutí, že bych se jako chlubil, ale jako upozornění, že "kernel kompilují jen blázni, autisté a uživatelé Gentoo což jsou blázni a autisté, normální člověk to nechá na distribuci" je z pohledu bezpečnosti pěkně hloupý koncept, který pro trochu pohodlí zcela nepřiměřeně zvyšuje attack surface.
Vzpomene si někdo ještě na nedávný RCE na AF_SCTP? Lessons not learned.
Právě. Navíc když povypínám, co mi přijde zbytečné, mohu též snížit bezpečnost. Například mohu vypnout ASLR, nebo mohu vypnout něco, co je potřeba k lepšímu sandboxu.
Zkompilovat kernel do nějak funkčního stavu oproti tomu není až taková výzva, ostatně používal jsem Gentoo. Snad jediný nebootovatelný kernel byl, když jsem podporu root FS zkompiloval jako modul.
Tak to s tím ASLR je argument stylu, že když někdo přezouvá doma auto, tak mu může spadnout z heveru, nebo může urvat brzdovou hadičku.
Ten zbytek, ono je to věc priorit. Tvůrce distribucí, pochopitelně, obvykle usiluje o to, aby "to fungovalo na první dobrou", což je pravý opak "nemít tam kód, který se nepoužívá". Jeden pohled je "někdo tam strčil nějaké obskurní zařízení do USB, tak rychle modprobnout driver ať to funguje", něco jiného "někdo tam strčil obskurní zařízení, o něm nevím, takže asi jde o pokus o exploit a budu ho ignorovat, jen to lognu (což dělá kernel standardně)"
Právě.
> A nejspíš se to pořádně naučíš až když to několikrát pojebeš.
A možná ani to ne. Poučit se z toho, že mi kernel nenabootuje, je snadné. Poučit se z toho, že mám v něčem horší defense-in-depth, je už těžší. A i když bych se měl poučit z průniku, může si to vyžádat docela náročnou analýzu.
OK, možná vyjít z distribučního kernelu a ořezat jej o zbytečnosti by nějak ještě šlo. A pak mergovat konfigurace při každé aktualizaci.
Jop s tím distro kernelem za základ a odebírat (a někde i dost důrazně, typicky v různých net* subsystémech) máte svatou pravdu.
Projít komplet konfiguraci a volit přesně jen nutné šlo v době 2.4 až 2.6 kernelů, v dnešní době už je krajně netriviální z nuly dojít i do bashe v textovém režimu, navíc to i omezuje případné chyby tím, že o vypnutí věci člověk obvykle ví, co dělá, což rozhodně neplatí pro nezapnutí jedné z tisíce voleb.
ad mergovat - no s vanila kernelem pak drtivou většinu pak už řeší zcat /proc/config.gz >.config && make menuconfig
> ad mergovat - no s vanila kernelem pak drtivou většinu pak už řeší zcat /proc/config.gz >.config && make menuconfig
To mi nepřijde jako dobré řešení – znamená to, že jakmile proběhne nějaká volba, už se k ní nevracíte. Tedy může nastat situace:
1. Do kernelu přibyde nějaká defense-in-depth volba (ve stylu ASLR)
2. Distribuce na to bude zpočátku opatrnější – budete mít volbu zpočátku vypnutou.
3. Později se v distribuci rozhodnou tuto volbu zapnout. Jenže zmíněným postupem si to nezapnete, pokud se tomu nebudete iniciativně věnovat.
když se tomu nevěnuješ, tak nemá smysl to diskutovat, jdi do placené podpory nebo vezmi distribuci jako default a spoléhej, pak tě ale čekají tyhle rychlá a nečekaná kolečka aktualizací.
Linux je dnes strašný nepořádek, ty spousty špatných rozhodnutí se postupně nabalovaly až dnes je těžké to držet v nějakém rozumném determistickém stavu.
nikoliv lépe, ale mnohem specifičtěji. Sníží se tím velikost i vektor útoku. Při automatizované infra to nemusí být takový zásah. Kernel od správců distribuce se snaží být co nejkompatibilnější na různém HW, proto i občas vydávají tenké obrazy jen s drivery pro pro běh jako VM.
Přesně proto si kernel kompilujeme, sníží se tím množství rozhraní, které je možné zneužít a je potřeba je hlídat.