Ladattava ytimen moduuli - Loadable kernel module

In computing , joka on kuormitettavissa ytimen moduulin ( LKM ) on objekti tiedosto , joka sisältää koodin jatkaa käynnissä ytimen , tai ns alustaan ytimeen , sellaisen käyttöjärjestelmän . LKMs käytetään tyypillisesti lisätä tuki uusille laitteiston (kuten laiteajurit ) ja / tai tiedostojärjestelmien tai lisätä systeemikutsut . Kun LKM: n tarjoamaa toimintoa ei enää tarvita, se voidaan purkaa muistin ja muiden resurssien vapauttamiseksi .

Useimmat nykyiset Unixin kaltaisten järjestelmien ja Microsoft Windows tukea ladattavina ydinmoduuleita eri nimillä, kuten ytimen kuormitettavien moduuli ( kld ) vuonna FreeBSD , ytimen laajennus ( kext ) in MacOS (nyt vanhentunut), kernel laajennusmoduuli vuonna AIX , ydintilaohjaimen in Windows NT ja ladattavia ytimen moduulin ( DKM ) on VxWorks . Ne tunnetaan myös nimellä ytimen ladattavat moduulit (tai KLM ) ja yksinkertaisesti ytimen moduulit ( KMOD ).

Edut

Ilman ladattavia ytimen moduuleja käyttöjärjestelmän olisi sisällytettävä kaikki mahdolliset ennakoidut toiminnot, jotka on koottu suoraan perusytimeen. Suuri osa toiminnallisuudesta asuisi muistissa käyttämättä, tuhlaa muistia ja vaatisi, että käyttäjät rakentavat ja käynnistävät perusytimen aina, kun he tarvitsevat uutta toimintoa.

Haitat

Yksi pieni arvostellaan mieluummin modulaarista ydintä yli staattinen ydin on ns pirstoutuminen rangaistus . Perusydin puretaan aina todellisesta vierekkäisestä muistista sen asennusrutiinien avulla; siten ytimen ydinkoodi ei ole koskaan pirstoutunut. Kun järjestelmä on tilassa, johon moduuleja voidaan lisätä, esimerkiksi kun tiedostojärjestelmät on asennettu, jotka sisältävät moduulit, on todennäköistä, että kaikki uudet ydinkoodin lisäykset aiheuttavat ytimen pirstoutumisen ja siten pienen suorituskyvyn rangaistuksen käyttämällä enemmän TLB- merkintöjä, aiheuttaen enemmän TLB-puutteita.

Toteutukset eri käyttöjärjestelmissä

Linux

Linuxin ladattavat ytimen moduulit ladataan (ja puretaan) modprobe- komennolla. Ne sijaitsevat / lib / modules tai / usr / lib / modules ja niillä on ollut laajennus .ko ("kernel object") version 2.6 jälkeen (aiemmat versiot käyttivät .o- laajennusta). Lsmod komento luetteloi ladattu ytimen moduulit. Hätätapauksissa, kun järjestelmän käynnistys epäonnistuu esim. Rikkoutuneiden moduulien takia, tietyt moduulit voidaan ottaa käyttöön tai poistaa käytöstä muuttamalla ytimen käynnistysparametrien luetteloa (esimerkiksi jos käytät GRUB: ta , painamalla 'e' GRUB-aloitusvalikossa, sitten muokkaamalla ytimen parametririviä).

Lisenssiongelmat

Linux-ylläpitäjien mielestä LKM ovat johdettuja ytimen teoksia . Linux-ylläpitäjät sietävät omistettujen moduulien jakelua , mutta sallivat symbolien merkitsemisen saataville vain GNU General Public License (GPL) -moduuleille.

Omaan tai muuhun kuin GPL-yhteensopivaan moduuliin lataaminen asettaa 'taint' -merkinnän käynnissä olevaan ytimeen - mikä tarkoittaa, että ylläpitäjät eivät todennäköisesti tutki kaikkia havaittuja ongelmia tai virheitä. LKM: istä tulee tosiasiallisesti osa käynnissä olevaa ydintä, joten ne voivat vioittaa ytimen tietorakenteita ja tuottaa vikoja, joita ei ehkä voida tutkia, jos moduuli on todellakin oma.

Linuxant-kiista

Vuonna 2004 Linuxant, konsulttiyritys, joka julkaisee omat laiteajurit ladattavina ytimoduuleina, yritti väärinkäyttää null-terminaattoria niissä MODULE_LICENSE, mikä näkyy seuraavassa koodikatteessa:

MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");

Ytimen tuolloin käyttämä merkkijonojen vertailukoodi yritti selvittää, pysäytettiinkö moduuli GPLedillä, kun se saavutti tyhjän merkin ( \ 0 ), joten sitä huijataan ajattelemalla, että moduuli julisti lisenssin olevan vain "GPL" .

FreeBSD

FreeBSD: n ytimen moduulit tallennetaan hakemistoon / boot / kernel / käyttöjärjestelmän kanssa jaetuille moduuleille , tai yleensä / boot / modules / FreeBSD-portteista tai FreeBSD-paketeista asennetuille moduuleille tai omiin tai muuten vain binaarimoduuleihin. FreeBSD-ytimen moduuleilla on yleensä .ko- laajennus . Kun kone on käynnistynyt, ne voidaan ladata komennolla kldload , purkaa tiedostolla kldunload ja listata kldstat-tiedostolla . Moduulit voidaan ladata myös latauslaitteesta ennen ytimen käynnistymistä joko automaattisesti ( /boot/loader.conf: n kautta ) tai käsin.

Mac käyttöjärjestelmä

Jotkut macOS: n ladattavat ytimoduulit voidaan ladata automaattisesti. Ladattavat ytimen moduulit voidaan ladata myös kextload- komennolla. Ne voidaan listata kextstat- komennolla. Kuormitettavien ytimen moduulit sijaitsevat nippujen kanssa laajennus .kext . Käyttöjärjestelmän mukana toimitetut moduulit on tallennettu hakemistoon / System / Library / Extensions . kolmansien osapuolten toimittamat moduulit ovat useissa muissa hakemistoissa.

NetWare

NetWare-ytimen moduuliin viitataan nimellä NetWare Loadable Module (NLM). NLM: t lisätään NetWare-ytimeen LOAD-komennolla ja poistetaan UNLOAD-komennolla; moduulit komento luettelot tällä hetkellä ladattu ytimen moduulit. NLM-tiedostot voivat sijaita missä tahansa kelvollisessa hakupolussa, joka on määritetty NetWare-palvelimelle, ja niillä on .NLM tiedostonimen laajennuksena.

VxWorks

Ladattava kernel module (DKM) -tyyppinen projekti voidaan luoda luomaan ".out" -tiedosto, joka voidaan sitten ladata ydintilaan "ld" -komennolla. Tämä ladattava ytimen moduuli voidaan purkaa komennolla "unld".

Solaris

Solarisilla on konfiguroitava ytimen moduulin latauspolku, jonka oletusarvo on / platform / platform-name / kernel / kernel / usr / kernel . Suurin osa ytimen moduuleista asuu / kernel -alihakemistoissa ; ne, joita ei pidetä välttämättöminä järjestelmän käynnistämiseksi siinä määrin, että init voi aloittaa, löytyvät usein (mutta eivät aina) tiedostosta / usr / kernel . Kun suoritat DEBUG-ytimen koontia, järjestelmä yrittää aktiivisesti purkaa moduuleja.

Binaarinen yhteensopivuus

Linux ei tarjoa vakaa API: ta tai ABI : tä ytimen moduuleille. Tämä tarkoittaa, että sisäisissä rakenteissa ja toiminnoissa on eroja eri kerneliversioiden välillä, mikä voi aiheuttaa yhteensopivuusongelmia. Yritettäessä torjua näitä ongelmia symboleiden versiotiedot sijoitetaan ladattavien ELF- moduulien .modinfo- osioon . Tätä versiotietoa voidaan verrata käynnissä olevan ytimen tietoihin ennen moduulin lataamista; jos versiot eivät ole yhteensopivia, moduulia ei ladata.

Muut käyttöjärjestelmät, kuten Solaris , FreeBSD , macOS ja Windows, pitävät ytimen API: n ja ABI: n suhteellisen vakaina välttäen tämän ongelman. Esimerkiksi FreeBSD- ytimen moduulit, jotka on käännetty ytimen versioon 6.0 nähden, toimivat uudelleen kääntämättä missään muussa FreeBSD 6.x -versiossa, esim. 6.4. Ne eivät kuitenkaan ole yhteensopivia muiden pääversioiden kanssa ja ne on käännettävä uudelleen käytettäväksi FreeBSD 7.x: n kanssa, koska API- ja ABI-yhteensopivuus ylläpidetään vain haarassa.

Turvallisuus

Vaikka ladattavat ytimoduulit ovat kätevä tapa muokata käynnissä olevaa ydintä, hyökkääjät voivat väärinkäyttää järjestelmää vaarantuneessa järjestelmässä estääkseen prosessejaan tai tiedostojaan , jolloin he voivat ylläpitää järjestelmän hallintaa. Monet rootkitit käyttävät LKMs tällä tavalla. Huomaa, että useimmissa käyttöjärjestelmissä moduulit eivät auta millään tavalla etuoikeuksien korotusta , koska LKM: n lataamiseen vaaditaan korkeampi etuoikeus; ne vain helpottavat hyökkääjän piilottamista.

Linux

Linux sallii moduulien lataamisen poistamisen käytöstä sysctl- vaihtoehdon kautta /proc/sys/kernel/modules_disabled. Initramfs järjestelmä voi ladata erityisiä moduuleja tarvitaan koneen käynnistyksen ja sitten poista moduuli loading. Tämä tekee turvallisuudesta hyvin samanlaisen kuin monoliittinen ydin. Jos hyökkääjä voi muuttaa initramf-tiedostoja, he voivat muuttaa ytimen binaaria.

Mac käyttöjärjestelmä

Vuonna OS X Yosemite ja myöhemmin vapauttaa, ytimen laajennus on koodin allekirjoitettu kehittäjän kanssa todistus, joka pitää tietty "oikeus" tähän. Tällaisen kehittäjätodistuksen antaa Apple vain pyynnöstä, eikä sitä anneta automaattisesti Apple Developer -jäsenille. Tämä ominaisuus, nimeltään "kext signing", on oletusarvoisesti käytössä, ja se kehottaa ydintä lopettamaan käynnistämisen, jos allekirjoittamattomia ytimen laajennuksia on. Vuonna OS X El Capitan ja myöhemmin vapauttaa, se on osa System Integrity suojaus .

MacOS: n vanhemmissa versioissa tai jos kext-allekirjoitus on poistettu käytöstä, muut kuin root-käyttäjät voivat ladata ytimen laajennuspaketin ladattavan ytimen moduulin, jos OSBundleAllowUserLoad-ominaisuuden arvoksi on asetettu True paketin ominaisuusluettelossa. Jos jokin paketin tiedostoista, mukaan lukien suoritettava kooditiedosto, ei kuitenkaan ole juuri- ja ryhmäkiekon omistuksessa tai jos ryhmä tai "muu" voi kirjoittaa ne, yritys ladata ytimen ladattava moduuli epäonnistuu.

Solaris

Ytimen moduuleilla voi valinnaisesti olla salausallekirjoituksen ELF-osio, joka tarkistetaan kuormituksella Verified Boot -käytäntöasetusten mukaan. Ydin voi pakottaa, että moduulit on salattu allekirjoitettu joukolla luotettavia varmenteita; luotettavien varmenteiden luettelo on käyttöjärjestelmän ulkopuolella ILOMissa joillakin SPARC-pohjaisilla alustoilla. Userspace-aloitettu ytimen moduuli ladataan vain luotetulta polulta, kun järjestelmä on käynnissä, kun Immutable Global Zone -ominaisuus on käytössä.

Katso myös

Viitteet