Kernel modul

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. október 19-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

Kernelmodul , betölthető kernelmodul ( LKM ) egy olyan kódot tartalmazó objektumfájl  , amely kiterjeszti egy futó vagy úgynevezett alap operációs rendszer kernelének funkcionalitását . A kernelmodulok új hardver- vagy fájlrendszerek támogatására, illetve új rendszerhívások hozzáadására szolgálnak . Ha a modul által biztosított funkciókra már nincs szükség, a memória és egyéb erőforrások felszabadítása érdekében ki lehet tölteni.

A legtöbb modern Unix rendszer és a Windows támogatja a betölthető kernel modulokat, bár eltérő elnevezéseket használhatnak ezekre, mint például a kernel betölthető modulja ( kld ) FreeBSD -n , vagy kernelkiterjesztés ( kext ) OS X -en . Néha Kernel Loadable Modules ( KLM ) vagy Kernel Modules ( KMOD ) néven is hivatkoznak rájuk.

Előnyök

Betölthető kernelmodulok nélkül az operációs rendszereknek minden lehetséges funkcióval rendelkezniük kell egy monolitikus kernelben . A kód jelentős része nincs használatban, csak a memóriát foglalja el . Minden alkalommal, amikor a felhasználónak olyan új funkcióra van szüksége, amely még nem szerepel az alap kernelben, az alap kernel teljes újrafordítása és újraindítás szükséges. A betölthető modulok használata nagymértékben leegyszerűsíti a kernel funkcionalitásának megváltoztatását, és nem igényel teljes újrafordítást (egy modul gyakran a kerneltől külön is felépíthető, vagy előre lefordított formában szállítható) vagy újraindításra.

Bináris kompatibilitás

A Linux nem biztosít stabil API -t vagy ABI -t a kernelmodulokhoz. Ez azt jelenti, hogy a különböző kernelverziók belső felépítésében és működésében eltérések vannak, amelyek kompatibilitási problémákat okozhatnak. A problémák leküzdése érdekében az adatverziós szimbólumot a .modinfo fájlba helyezték el az ELF modul betöltése szakaszában. Ez a verzióinformáció összehasonlítható a végrehajtható kernel verzióinformációival a modul betöltése előtt; ha a verziók nem kompatibilisek, akkor a modul nem töltődik be.

Más operációs rendszerek, például a Solaris , a FreeBSD , a Mac OS X , a Windows viszonylag stabilan tartják a modulok API -ját és ABI -ját, elkerülve ezt a problémát. Például a 6.0-s kernelverzióhoz fordított FreeBSD modulok újrafordítás nélkül működnek a FreeBSD 6.x bármely más verzióján, például a 6.4-en. Azonban nem kompatibilisek más nagyobb kiadásokkal, és újra kell fordítani őket a FreeBSD 7.x-hez való használathoz, mivel az API és az ABI kompatibilitás csak ugyanazon az ágon belül marad fenn.

Biztonság

A betölthető kernelmodulok kényelmes módot jelentenek a kernel módosítására, ezt használhatja a támadó egy feltört rendszerben, hogy megakadályozza folyamatainak vagy fájljainak észlelését , lehetővé téve számára, hogy megtartsa az irányítást a rendszer felett. Ezért sok rootkit használ kernelmodulokat. [egy]

Linux

A Linux világában a modulokat a modprobe segédprogram tölti be és tölti ki . A modulokat a / lib/modules .ko ("kernel objektum") fájlokban tárolja a Linux 2.6 óta. [2] A korábbi verziók a .o kiterjesztést használták . Az lsmod parancs felsorolja a betöltött kernelmodulokat és azok függőségeit.

Engedélyezési problémák

A Linux őrzői szerint az LKM a kernel származékos munkája . Előfordulhat, hogy a kernelfunkciók csak a GPL - modulokhoz használhatók.

A saját vagy GPL-lel nem kompatibilis modulok betöltése beállítja a 'taint' (tajt) jelzőt [3] a kernelben. Ez a jelző azt jelenti, hogy a kernel őrzői kisebb valószínűséggel vizsgálnak ki bármilyen problémát vagy hibát . [4] [5] A modulok tulajdonképpen a futó kernel részévé válnak, és megrongálhatják a belső adatstruktúrákat, olyan hibákat hozva létre, amelyeket nem reprodukálhatnak azok, akik nem tudnak saját modult betölteni.

A Linuxant esete

2004-ben a Linuxant, egy tanácsadó cég, amely egy saját modult ( eszközillesztőt ) adott ki, megpróbálta megkerülni a „GPLONLY” korlátozásokat egyes kernelfunkciókra vonatkozóan. Ehhez a NULMODULE_LICENSE szimbólumot használták a gráfban a modul forráskódjában :

MODULE_LICENSE ("GPL\0a \"GPL\" könyvtárban lévő fájlok esetén; másokra csak a LICENC fájl vonatkozik");

A licenc meghatározása a Linux kernel által a NUL-végződésű karakterláncok lexikográfiai összehasonlításával történik, így a megadott karakterlánc összehasonlítása egyenértékű a "GPL" karakterlánccal való összehasonlítással , míg a modul nem licencelt a GPL licenc alatt . [6]

FreeBSD

A FreeBSD rendszermag moduljai a /boot/kernel/ (a disztribúcióval együtt terjesztett modulok) vagy a /boot/modules/ könyvtárban vannak tárolva a FreeBSD portokról és más forrásokból telepített modulok esetén . A FreeBSD kernelmoduljai általában .ko kiterjesztéssel rendelkeznek . A modulok kldload - al tölthetők , kldunload -al kirakhatók . A modulok listája a kldstat paranccsal látható . Egyes modulok a kezdeti rendszerindítási fázisban töltődnek be ( a /boot/loader.conf fájlban megadva ).

Mac OS X

Előfordulhat, hogy a Mac OS X egyes betölthető kernelmoduljai automatikusan betöltődnek. A betölthető kernelmodulok a kextload paranccsal is betölthetők . A lista a kextstat paranccsal jeleníthető meg . A betölthető kernelmodulok .kext kiterjesztésű szoftvercsomagokban találhatók . Az operációs rendszerrel szállított modulok a /System/Library/Extensions könyvtárban , a harmadik féltől származó modulok pedig más könyvtárakban tárolódnak.

Windows

Maga a Windows kernel nem támogatja a betölthető modulokon keresztüli bővítményeket. A letölthető illesztőprogramok azonban támogatottak , és a Windows-illesztőprogramnak tervezett modul nem szükséges ahhoz, hogy külső eszközzel működjön. Emiatt a „pszeudo-illesztőprogramokat” széles körben használják a Windows kernel funkcionalitásának megváltoztatására és kiterjesztésére – anti - rootkitek , hibakereső kimeneti elfogók , a Sysinternals által kiadott számos rendszerprogram kiegészítő „ügynökei” stb.

Jegyzetek

  1. Betölthető kernelmodulok kihasználása . Hozzáférés dátuma: 2012. május 5. Az eredetiből archiválva : 2012. február 4.
  2. A Linux kernelmodulok programozási útmutatója, 2.2. szakasz "Kernelmodulok fordítása" . Letöltve: 2011. október 14. Az eredetiből archiválva : 2012. szeptember 20..
  3. Linus Torvalds és mások. Documentation/oops-tracing.txt (lefelé hivatkozás) . kernel.org (2011. június 21.). Letöltve: 2011. október 3. Az eredetiből archiválva : 2012. szeptember 20.. 
  4. Jonathan Corbet. Beszennyeződés a felhasználói térből . LWN.net (2006. március 24.). Letöltve: 2011. október 3. Az eredetiből archiválva : 2011. november 16..
  5. Novell támogatási dokumentáció: Tainted kernel (2007. július 26.). Letöltve: 2011. október 3. Az eredetiből archiválva : 2012. szeptember 20..
  6. Jonathan Corbet. Legyen őszinte a MODULE_LICENSE . LWN.net (2004. augusztus 27.). Letöltve: 2012. június 4. Az eredetiből archiválva : 2012. szeptember 20..

Linkek