Kärnmodul

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 19 oktober 2018; kontroller kräver 4 redigeringar .

Kärnmodul , loadable kernel module ( LKM ) är en objektfil  som innehåller kod som utökar funktionaliteten hos en körande eller så kallad bas OS-kärna . Kärnmoduler används för att lägga till stöd för ny hårdvara eller filsystem, eller för att lägga till nya systemanrop . När funktionen som tillhandahålls av en modul inte längre behövs, kan den laddas ur för att frigöra minne och andra resurser.

De flesta moderna Unix - system och Windows stöder laddningsbara kärnmoduler, även om de kan använda olika namn för dem, som laddningsbar kärnmodul ( kld ) på FreeBSD , kärntillägg ( kext ) på OS X . De kallas ibland för Kernel Loadable Modules ( KLM ) eller Kernel Modules ( KMOD ).

Fördelar

Utan laddningsbara kärnmoduler skulle operativsystemen behöva ha all möjlig funktionalitet i en monolitisk kärna . En betydande del av koden används inte och tar bara upp minne . Varje gång användaren behöver ny funktionalitet som ännu inte ingår i baskärnan, krävs en fullständig omkompilering av baskärnan och en omstart. Användningen av laddningsbara moduler förenklar kraftigt att ändra kärnans funktionalitet och kräver inte en fullständig omkompilering (en modul kan ofta byggas separat från kärnan eller levereras i en förkompilerad form) eller omstarter.

Binär kompatibilitet

Linux tillhandahåller inte ett stabilt API eller ABI för kärnmoduler. Det betyder att det finns skillnader i intern struktur och funktion mellan olika kärnversioner som kan orsaka kompatibilitetsproblem. I ett försök att bekämpa dessa problem placeras dataversionssymbolen i .modinfo i ELF -modulens laddningssektion. Denna versionsinformation kan jämföras med versionsinformationen för den körbara kärnan innan modulen laddas; om versionerna är inkompatibla kommer modulen inte att laddas.

Andra operativsystem som Solaris , FreeBSD , Mac OS X , Windows håller API och ABI för moduler relativt stabila och undviker detta problem. Till exempel kommer FreeBSD -moduler kompilerade för kärnversion 6.0 att fungera utan omkompilering på någon annan version av FreeBSD 6.x, såsom 6.4. De är dock inte kompatibla med andra större utgåvor och måste kompileras om för användning med FreeBSD 7.x, eftersom API- och ABI-kompatibilitet endast upprätthålls inom samma gren.

Säkerhet

Laddbara kärnmoduler är ett bekvämt sätt att modifiera kärnan, detta kan användas av en angripare i ett komprometterat system för att förhindra upptäckt av hans processer eller filer , vilket gör att han kan behålla kontrollen över systemet. Därför använder många rootkits kärnmoduler. [ett]

Linux

I Linux -världen laddas och avlastas moduler av modprobe- verktyget . Moduler lagras i /lib/ modules i .ko ("kärnobjekt") filer sedan Linux 2.6. [2] Tidigare versioner använde tillägget .o . Kommandot lsmod listar laddade kärnmoduler och deras beroenden.

Licensfrågor

Enligt Linux-hållarna är LKM ett härlett verk av kärnan. Kärnfunktioner kan markeras som tillgängliga endast för GPL -moduler.

Att ladda proprietära eller GPL-inkompatibla moduler ställer in flaggan för 'smuts' (smuts) [3] i kärnan. Den här flaggan betyder att eventuella problem eller buggar är mindre sannolikt att undersökas av kärninnehavarna. [4] [5] Moduler blir faktiskt en del av den körande kärnan och kan korrumpera interna datastrukturer, skapa buggar som inte kan reproduceras av de som inte kan ladda en proprietär modul.

Linuxant-fallet

2004 försökte Linuxant, ett konsultföretag som släppte en proprietär modul ( enhetsdrivrutin ), komma runt "GPLONLY"-begränsningar för vissa kärnfunktioner. För att göra detta användes NUL-MODULE_LICENSE symbolen i grafen i källkoden för dess modul :

MODULE_LICENSE ("GPL\0för filer i \"GPL\"-katalogen; för andra gäller endast LICENS-filen");

Bestämningen av licensen av Linux-kärnan görs genom lexikografisk jämförelse av NUL-terminerade strängar, så att jämföra den specificerade strängen kommer att motsvara en jämförelse med strängen "GPL" , medan modulen inte är licensierad under GPL-licensen . [6]

FreeBSD

FreeBSD -kärnmoduler lagras i /boot/kernel/ (moduler distribuerade med distributionen) eller /boot/modules/ för moduler installerade från FreeBSD-portar och andra källor. FreeBSD-kärnmoduler har vanligtvis tillägget .ko . Moduler kan laddas med kldload , lossas med kldunload . Listan över moduler är synlig med kommandot kldstat . Vissa moduler laddas under den inledande uppstartsfasen (anges i filen /boot/loader.conf ).

Mac OS X

Vissa laddningsbara kärnmoduler i Mac OS X kan laddas automatiskt. Laddbara kärnmoduler kan också laddas med kommandot kextload . Listan kan visas med kommandot kextstat . Laddbara kärnmoduler finns i programvarupaket med tillägget .kext . Moduler som levereras med operativsystemet lagras i katalogen /System/Library/Extensions , moduler från tredje part lagras i andra kataloger.

Windows

Själva Windows -kärnan stöder inte tillägg via laddningsbara moduler. Däremot stöds nedladdningsbara drivrutiner , och en modul designad som en Windows-drivrutin krävs inte för att fungera med någon extern enhet. På grund av detta används "pseudodrivrutiner" i stor utsträckning för att ändra och utöka funktionaliteten hos Windows-kärnan - anti- rootkits , debug- utgångsinterceptorer , extra "agenter" för många systemprogram som släppts av Sysinternals , etc.

Anteckningar

  1. Utnyttjande av laddningsbara kärnmoduler . Tillträdesdatum: 5 maj 2012. Arkiverad från originalet 4 februari 2012.
  2. Programmeringsguiden för Linux Kernel Module, avsnitt 2.2 "Kompilera kärnmoduler" . Hämtad 14 oktober 2011. Arkiverad från originalet 20 september 2012.
  3. Linus Torvalds, med flera. Documentation/oops-tracing.txt (nedlänk) . kernel.org (21 juni 2011). Hämtad 3 oktober 2011. Arkiverad från originalet 20 september 2012. 
  4. Jonathan Corbet. Nedsmutsning från användarutrymme . LWN.net (24 mars 2006). Hämtad 3 oktober 2011. Arkiverad från originalet 16 november 2011.
  5. Novell supportdokumentation: Tainted kernel (26 juli 2007). Hämtad 3 oktober 2011. Arkiverad från originalet 20 september 2012.
  6. Jonathan Corbet. Att vara ärlig med MODULE_LICENSE . LWN.net (27 augusti 2004). Hämtad 4 juni 2012. Arkiverad från originalet 20 september 2012.

Länkar