Kernemodul

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 19. oktober 2018; checks kræver 4 redigeringer .

Kernel modul , loadable kernel module ( LKM ) er en objektfil  , der indeholder kode, der udvider funktionaliteten af ​​en kørende eller såkaldt basis OS-kerne . Kernelmoduler bruges til at tilføje understøttelse af ny hardware eller filsystemer eller til at tilføje nye systemkald . Når funktionaliteten fra et modul ikke længere er nødvendig, kan den aflæses for at frigøre hukommelse og andre ressourcer.

De fleste moderne Unix - systemer og Windows understøtter indlæsbare kernemoduler, selvom de kan bruge forskellige navne til dem, såsom kerneindlæsbart modul ( kld ) på FreeBSD , kerneudvidelse ( kext ) på OS X . De omtales nogle gange som Kernel Loadable Modules ( KLM ) eller Kernel Modules ( KMOD ).

Fordele

Uden indlæsbare kernemoduler ville operativsystemer skulle have al mulig funktionalitet i en monolitisk kerne . En væsentlig del af koden bruges ikke og optager kun hukommelse . Hver gang brugeren har brug for ny funktionalitet, der endnu ikke er inkluderet i basiskernen, kræves en komplet omkompilering af basiskernen og en genstart. Brugen af ​​indlæsbare moduler forenkler i høj grad ændring af kernens funktionalitet og kræver ikke en komplet rekompilering (et modul kan ofte bygges separat fra kernen eller leveres i en prækompileret form) eller genstart.

Binær kompatibilitet

Linux giver ikke en stabil API eller ABI til kernemoduler. Det betyder, at der er forskelle i intern struktur og funktion mellem forskellige kerneversioner, som kan forårsage kompatibilitetsproblemer. I et forsøg på at bekæmpe disse problemer er dataversioneringssymbolet placeret i .modinfo i ELF - modulets indlæsningssektion. Denne versionsinformation kan sammenlignes med versionsinformationen for den eksekverbare kerne, før modulet indlæses; hvis versionerne er inkompatible, vil modulet ikke blive indlæst.

Andre operativsystemer såsom Solaris , FreeBSD , Mac OS X , Windows holder API'en og ABI for moduler relativt stabile, hvilket undgår dette problem. For eksempel vil FreeBSD - moduler kompileret til kerneversion 6.0 fungere uden genkompilering på nogen anden version af FreeBSD 6.x, såsom 6.4. De er dog ikke kompatible med andre større udgivelser og skal genkompileres til brug med FreeBSD 7.x, da API- og ABI-kompatibilitet kun opretholdes inden for samme gren.

Sikkerhed

Indlæsbare kernemoduler er en bekvem måde at ændre kernen på. Dette kan bruges af en angriber i et kompromitteret system for at forhindre opdagelse af hans processer eller filer , hvilket giver ham mulighed for at bevare kontrollen over systemet. Derfor bruger mange rootkits kernemoduler. [en]

Linux

I Linux -verdenen indlæses og aflæses moduler af modprobe -værktøjet . Moduler er gemt i /lib/modules i .ko ("kerneobjekt") filer siden Linux 2.6. [2] Tidligere versioner brugte .o- udvidelsen . lsmod - kommandoen viser indlæste kernemoduler og deres afhængigheder.

Licensproblemer

Ifølge brugerne af Linux er LKM et afledt værk af kernen. Kernefunktioner kan markeres som kun tilgængelige for GPL- moduler.

Indlæsning af proprietære eller GPL-inkompatible moduler sætter 'taint' (taint) flag [3] i kernen. Dette flag betyder, at eventuelle problemer eller fejl er mindre tilbøjelige til at blive undersøgt af kerneholderne. [4] [5] Moduler bliver faktisk en del af den kørende kerne og kan ødelægge interne datastrukturer, hvilket skaber fejl, der ikke kan reproduceres af dem, der ikke kan indlæse et proprietært modul.

Linuxant-sagen

I 2004 forsøgte Linuxant, et konsulentfirma, der udgav et proprietært modul ( enhedsdriver ), at omgå "GPLONLY"-begrænsninger på nogle kernefunktioner. For at gøre dette blev NULMODULE_LICENSE - symbolet brugt i grafen i kildekoden til dets modul :

MODULE_LICENSE ("GPL\0for filer i \"GPL\"-mappen; for andre gælder kun LICENS-filen");

Bestemmelsen af ​​licensen af ​​Linux-kernen sker ved leksikografisk sammenligning af NUL-terminerede strenge, så sammenligning af den specificerede streng vil svare til sammenligning med strengen "GPL" , mens modulet ikke er licenseret under GPL-licensen . [6]

FreeBSD

FreeBSD -kernemoduler er gemt i /boot/kernel/ (moduler distribueret med distributionen) eller /boot/modules/ for moduler installeret fra FreeBSD-porte og andre kilder. FreeBSD-kernemoduler har normalt .ko- udvidelsen . Moduler kan indlæses med kldload , losses med kldunload . Listen over moduler er synlig med kommandoen kldstat . Nogle moduler indlæses under den indledende opstartsfase (specificeret i filen /boot/loader.conf ).

Mac OS X

Nogle indlæsbare kernemoduler i Mac OS X indlæses muligvis automatisk. Indlæsbare kernemoduler kan også indlæses med kommandoen kextload . Listen kan vises med kommandoen kextstat . Indlæsbare kernemoduler er placeret i softwarepakker med en .kext- udvidelse . Moduler, der leveres med operativsystemet, er gemt i mappen /System/Library/Extensions , moduler fra tredjeparter gemmes i andre mapper.

Windows

Selve Windows -kernen understøtter ikke udvidelser gennem indlæsbare moduler. Drivere , der kan downloades, understøttes dog , og et modul, der er designet som en Windows-driver, er ikke påkrævet for at fungere med nogen ekstern enhed. På grund af dette er "pseudo-drivere" i vid udstrækning brugt til at ændre og udvide funktionaliteten af ​​Windows-kernen - anti- rootkits , debug output- interceptorer , hjælpe-"agenter" af mange systemprogrammer udgivet af Sysinternals osv.

Noter

  1. Udnyttelse af indlæsbare kernemoduler . Dato for adgang: 5. maj 2012. Arkiveret fra originalen 4. februar 2012.
  2. Programmeringsvejledningen til Linux Kernel Module, afsnit 2.2 "Kompilering af Kernel Modules" . Hentet 14. oktober 2011. Arkiveret fra originalen 20. september 2012.
  3. Linus Torvalds, et alle. Documentation/oops-tracing.txt (downlink) . kernel.org (21. juni 2011). Hentet 3. oktober 2011. Arkiveret fra originalen 20. september 2012. 
  4. Jonathan Corbet. Smag fra brugerens plads . LWN.net (24. marts 2006). Hentet 3. oktober 2011. Arkiveret fra originalen 16. november 2011.
  5. Novell supportdokumentation: Tainted kernel (26. juli 2007). Hentet 3. oktober 2011. Arkiveret fra originalen 20. september 2012.
  6. Jonathan Corbet. At være ærlig med MODULE_LICENSE . LWN.net (27. august 2004). Hentet 4. juni 2012. Arkiveret fra originalen 20. september 2012.

Links