Modul jádra

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 19. října 2018; kontroly vyžadují 4 úpravy .

Kernel module , loadable kernel module ( LKM ) je objektový  soubor obsahující kód, který rozšiřuje funkčnost běžícího nebo tzv. základního jádra OS . Moduly jádra se používají k přidání podpory pro nový hardware nebo souborové systémy nebo k přidání nových systémových volání . Když funkce poskytované modulem již nejsou potřeba, lze je uvolnit, aby se uvolnila paměť a další zdroje.

Většina moderních unixových systémů a Windows podporuje načítatelné moduly jádra, i když pro ně mohou používat různé názvy, jako například kernel loadable module ( kld ) na FreeBSD , rozšíření jádra ( kext ) na OS X. Někdy jsou označovány jako Kernel Loadable Modules ( KLM ) nebo Kernel Modules ( KMOD ).

Výhody

Bez zaváděcích modulů jádra by operační systémy musely mít všechny možné funkce v monolitickém jádře . Značná část kódu není využita a zabírá pouze paměť . Pokaždé, když uživatel potřebuje novou funkcionalitu, která ještě není zahrnuta v základním jádře, je vyžadována kompletní rekompilace základního jádra a restart. Použití zaváděcích modulů značně zjednodušuje změnu funkčnosti jádra a nevyžaduje kompletní rekompilaci (modul lze často sestavit odděleně od jádra nebo jej dodat v předkompilované podobě) ani restartovat.

Binární kompatibilita

Linux neposkytuje stabilní API ani ABI pro moduly jádra. To znamená, že existují rozdíly ve vnitřní struktuře a funkci mezi různými verzemi jádra, které mohou způsobit problémy s kompatibilitou. Ve snaze bojovat proti těmto problémům je symbol verzování dat umístěn v .modinfo v sekci zatížení modulu ELF . Tyto informace o verzi lze porovnat s informacemi o verzi spustitelného jádra před načtením modulu; pokud jsou verze nekompatibilní, modul se nenačte.

Jiné operační systémy jako Solaris , FreeBSD , Mac OS X , Windows udržují API a ABI pro moduly relativně stabilní, čímž se tomuto problému vyhýbají. Například moduly FreeBSD zkompilované pro jádro verze 6.0 budou fungovat bez rekompilace na jakékoli jiné verzi FreeBSD 6.x, jako je 6.4. Nejsou však kompatibilní s jinými hlavními vydáními a pro použití s ​​FreeBSD 7.x musí být překompilovány, protože kompatibilita API a ABI je zachována pouze v rámci stejné větve.

Zabezpečení

Načítatelné moduly jádra jsou pohodlným způsobem, jak upravit jádro. Útočník jej může použít v kompromitovaném systému, aby zabránil odhalení jeho procesů nebo souborů , což mu umožní udržet si kontrolu nad systémem. Proto mnoho rootkitů používá moduly jádra. [jeden]

Linux

Ve světě Linuxu se moduly načítají a uvolňují pomocí utility modprobe . Moduly jsou od Linuxu 2.6 uloženy v /lib/modules v souborech .ko („objekt jádra“). [2] Předchozí verze používaly příponu .o . Příkaz lsmod vypíše načtené moduly jádra a jejich závislosti.

Problémy s licencí

Podle správců Linuxu je LKM odvozeným dílem jádra. Funkce jádra mohou být označeny jako dostupné pouze pro moduly GPL .

Načítání proprietárních nebo GPL nekompatibilních modulů nastavuje v jádře příznak 'taint' (taint) [3] . Tento příznak znamená, že jakékoli problémy nebo chyby budou s menší pravděpodobností vyšetřovány správci jádra. [4] [5] Moduly se ve skutečnosti stávají součástí běžícího jádra a mohou poškodit vnitřní datové struktury, čímž vzniknou chyby, které nemohou reprodukovat ti, kteří nemohou načíst proprietární modul.

Případ Linuxant

V roce 2004 se Linuxant, poradenská společnost, která vydala proprietární modul ( ovladač zařízení ), pokusila obejít omezení „GPLONLY“ u některých funkcí jádra. K tomu byl v grafu ve zdrojovém kódu jeho modulu MODULE_LICENSEpoužit symbol NUL :

MODULE_LICENSE ("GPL\0pro soubory v adresáři \"GPL\"; pro ostatní platí pouze soubor LICENSE");

Určení licence linuxovým jádrem se provádí lexikografickým porovnáním řetězců ukončených NUL, takže porovnání zadaného řetězce bude ekvivalentní porovnání s řetězcem "GPL" , přičemž modul není licencován pod licencí GPL . [6]

FreeBSD

Moduly jádra FreeBSD jsou uloženy v /boot/kernel/ (moduly distribuované s distribucí) nebo /boot/modules/ pro moduly nainstalované z portů FreeBSD a dalších zdrojů. Moduly jádra FreeBSD mají obvykle příponu .ko . Moduly lze načíst pomocí kldload , uvolnit pomocí kldunload . Seznam modulů je viditelný pomocí příkazu kldstat . Některé moduly se načítají během počáteční fáze spouštění (uvedené v souboru /boot/loader.conf ).

Mac OS X

Některé načítatelné moduly jádra v Mac OS X mohou být načteny automaticky. Načítatelné moduly jádra lze také načíst pomocí příkazu kextload . Seznam lze zobrazit příkazem kextstat . Načítatelné moduly jádra jsou umístěny v softwarových balíčcích s příponou .kext . Moduly dodávané s operačním systémem jsou uloženy v adresáři /System/Library/Extensions , moduly od třetích stran jsou uloženy v jiných adresářích.

Windows

Samotné jádro Windows nepodporuje rozšíření prostřednictvím zaváděcích modulů. Jsou však podporovány ovladače ke stažení a modul navržený jako ovladač pro Windows není nutný pro práci s žádným externím zařízením. Díky tomu se „pseudoovladače“ široce používají ke změně a rozšíření funkčnosti jádra Windows — anti- rootkity , ladicí výstupní zachycovače , pomocní „agenti“ mnoha systémových programů vydaných společností Sysinternals atd.

Poznámky

  1. Využití načítatelných modulů jádra . Datum přístupu: 5. května 2012. Archivováno z originálu 4. února 2012.
  2. Linux Kernel Module Programming Guide, sekce 2.2 "Kompilace modulů jádra" . Získáno 14. října 2011. Archivováno z originálu dne 20. září 2012.
  3. Linus Torvalds a další. Documentation/oops-tracing.txt (downlink) . kernel.org (21. června 2011). Získáno 3. října 2011. Archivováno z originálu dne 20. září 2012. 
  4. Jonathan Corbet. Poskvrnění z uživatelského prostoru . LWN.net (24. března 2006). Získáno 3. října 2011. Archivováno z originálu 16. listopadu 2011.
  5. Dokumentace podpory Novell: Tainted kernel (26. července 2007). Získáno 3. října 2011. Archivováno z originálu dne 20. září 2012.
  6. Jonathan Corbet. Buďte k MODULE_LICENSE upřímní . LWN.net (27. srpna 2004). Získáno 4. června 2012. Archivováno z originálu dne 20. září 2012.

Odkazy