Завантажуваний модуль ядра (loadable kernel module чи LKM) — об'єктний файл, який містить код, що розширює працююче ядро, або так сказати базове ядро, операційної системи. LKM-и використовуються в основному для додавання підтримки нового апаратного забезпечення та/чи файлових систем, чи додавання системних викликів.
Найбільш сучасні Unix-подібні системи та Microsoft Windows підтримують завантажувані модулі ядра, хоча вони можуть використовувати інші назви для цього, такі як kernel loadable module (kld) в FreeBSD, kernel extension (kext) в OS X та kernel-mode driver в Windows NT. Вони також знані як Kernel Loadable Modules (or KLM), або просто як Kernel Modules (KMOD).
Переваги
Операційна система без завантажуваних модулів ядра могла б мати увесь можливо-очікуваний функціонал вже вбудований в базове ядро. Багато цього функціоналу було б даремно завантажено в пам'ять, тому що не використовувалося б, а просто витрачало б пам'ять, та б потребувало, щоб користувачі перезбирали та перевантажували базове ядро кожен раз, коли їм потрібен новий функціонал. Більшість операційних систем підтримуючи завантажувані модулі ядра включають тільки більш затребуваний функціонал.
Недоліки
Один маленький недолік переваги модульного ядра над статичним — так звана проблема фрагментації. Базове ядро завжди незапаковане в реальну суміжну пам'ять за своєю налаштовуючою процедурою, таким чином базовий код ядра є завжди нефрагментованим. Як тільки система в стані коли модулі можуть бути завантажені — наприклад, змонтували файлову систему, що міститься в модулі — це імовірно, що будь-який новий код ядра спричинить фрагментацію ядра та внесе маленьку деградацію продуктивності.
Реалізації в інших операційних системах
Linux
Завантажувані модулі ядра в Linux — це завантажені (або вивантажені) за допомогою команди . Вони розміщені в /lib/modules та мають розширення .ko («kernel object») з версії 2.6 (в попередніх версіях використовувалося розширення .o). Команда [en] показує список завантажених модулів ядра. В аварійних ситуаціях, коли система не може завантажитися через наприклад зіпсуті модулі, спеціальні модулі можуть бути включені або виключені за допомогою зміни завантажуваних параметрів ядра (наприклад якщо використовується GRUB, натискаєте 'e' в стартовому меню GRUB та редагуєте стрічку параметрів ядра).
Ліцензійні спірні питання
На думку Linux розробників, LKM — це похідний твір ядра. Лінукс розробники дозволяють розповсюдження пропріетарних модулів но символи мають бути марковані як такі які є тільки доступними для GNU General Public License (GPL) модулів.
Під чам завантаження пропріетарного або не GPL-сумісного LKM буде ставитися прапорець 'taint' в працюючому ядрі — це значить що будь-яка проблема чи помилка буде досліджена розробниками з менш імовірністю. LKM-и оперативно стали частиною працюючого ядра, вони можуть пошкодити структуру даних ядра та принести дефекти в роботі програми, що можуть не бути дослідженими, якщо модуль справді пропріетарний.
Linuxant суперечка
В 2004, Linuxant— консультуюча компанія, що реалізовувала пропріетарні драйвера пристроїв як завантажувані модулі ядра — спробувала зловжити [en] в MODULE_LICENSE
, як видно в наступному уривку коду:
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
Код порівняння стрічок, який використовується ядром для виявлення ліцензій відмінних від GPL, в момент визначення ліцензії, досяг NULL символу(\0), що, в свою чергу, призвело до зупинки процесу перевірки ліцензії, визначивши її як ліцензію «GPL».
FreeBSD
Модулі ядра для FreeBSD , які розповсюджуються з ОС, зберігаються в /boot/kernel/, а в /boot/modules/ зазвичай встановлені з [en] or FreeBSD packages, або є пропріетарними. В іншому випадку тільки двійкові модулі. Модулі ядра FreeBSD мають розширення .ko. Як тільки машина готова, вони можуть бути завантажені за допомогою команди kldload, вивантажені - kldunload, та перечислені — kldstat. Модулі можуть також бути завантажені з завантаєувача перед стартом ядра, або автоматично (через /boot/loader.conf) або вручну.
OS X
Деякі завантажувані модулі ядра в OS X можуть бути завантаженими автоматично. Завантажувані модулі ядра можуть також бути завантаженими з допомогою команди kextload, перечислені — kextstat. Вони розміщені в [en]-ів з розширенням .kext. Модулі, які постачаються з операційною системою зберігаються в директорії /System/Library/Extensions; модулі, які постачаються третьою стороною — в різних інших.
NetWare
Модуль ядра NetWare — називають [en] (NLM). NLM — вставляються в NetWare ядро командою LOAD, та видаляються командою UNLOAD; команда modules показує всі завантажені на даний момент модулі. NLM можуть розміщуватися в будь-якому пошуковому місці, що прив'язані до NetWare сервера, також вони мають .NLM розширення файла.
Двійкова сумісність
Лінукс не забезпечує стабільний API чи ABI для модулів ядра. Це означає що є різниця у внутрішній структурі та функції між різними версіями ядра, які можуть спричиняти проблеми сумісності. Спробою побороти ці проблеми стало розміщення мітки даних про версію в .modinfo секцію ELF модулів. Ця інформація про версію може бути порівняна з тією, яку має працююче ядро перед завантаженням модуля; Якщо версії несумісні — модуль не буде завантажений.
Інші операційні системи, такі як Solaris, FreeBSD, OS X, та Windows підтримують API та ABI ядра відносно стабільними, що дозволяє уникнути таких проблем. Для прикладу, модулі ядра FreeBSD, які скомпільовані для версії ядра 6.0 будуть працювати без компіляції на будь-якій іншій версії FreeBSD 6.x, наприклад 6.4. Однак вони несумісні з іншими мажорними версіями та повинні бути перезібрані для використання з FreeBSD 7.x, так як API і ABI сумісність підтримується тільки в межах гілки.
Безпека
Так як завантажувані модулі ядра — зручний спосіб зміни працюючого ядра, це може використовуватись нападниками для своїх цілей на скопроментованій системі. Наприклад, щоб уникнути виявлення їхніх процесів та файлів, що дозволяє таким чином підтримувати контроль над системою. Багато руткітів використовують LKM для цього. Запам'ятайте, що на більшості операційних систем модулі не допомагають , оскільки підвищені привілеї потрібні для самого завантаження модуля ядра; вони просто полегшують процес приховування слідів нападника.
Лінукс
Лінукс дозволяє забороняти завантаження модулів через sysctl параметр /proc/sys/kernel/modules_disabled
. Система Initrd initramfs може завантажувати специфічні модулі, які потрібні для машини під час завантаження і потім забороняти завантаження модулів. Це робить систему безпеки безпеку дуже схожою до такої, яка властива монолітним ядрам. Якщо атакуючий може змінити initramfs, то він зможе змінити і двійковий код ядра.
OS X
На OS X, завантажуваний модуль ядра в ядровому розширеному bundle може бути завантаженим непривілейованим користувачем, якщо властивість OSBundleAllowUserLoad встановлено в True в в списку властивостей bundle. Однак, якщо будь-який з файлів в bundle, включаючи виконувач код, не приналежний root та групі wheel, чи не записаний групою «інші», спроба завантажити модуль ядра провалиться.
Див. також
Примітки
- «Kernel Extension Programming Topics: Introduction» [ 2 червня 2012 у Wayback Machine.].
- «What Determines When a Driver Is Loaded» [ 6 березня 2013 у Wayback Machine.].
- «The Linux Kernel Module Programming Guide, section 2.2 „Compiling Kernel Modules“» [ 2012-08-18 у Wayback Machine.].
- Linus Torvalds; et al. (2011-06-21).
- Jonathan Corbet (2006-03-24).
- «Novell support documentation: Tainted kernel» [ 2012-10-19 у Wayback Machine.]. 2007-07-26.
- Jonathan Corbet (April 27, 2004).
- . Архів оригіналу за 4 лютого 2012. Процитовано 27 жовтня 2015.
- «Sysctl/kernel.txt»[недоступне посилання з квітня 2019].
- Kees Cook (2012-11-28).
- «Info.plist Properties for Kernel Extensions» [ 4 травня 2013 у Wayback Machine.].
- Darwin and Mac OS X System Manager's Manual –
Посилання
- , IBM DeveloperWorks, July 16, 2008, archived from the original on July 26, 2008
- Online kext database for OSX / Hackintosh [ 19 грудня 2015 у Wayback Machine.]
- Ori Pomerantz, Linux Kernel Module Programming Guide [ 26 лютого 2018 у Wayback Machine.]
- , 2008, archived from the original on June 20, 2008
- «Kernel Extension Programming Topics» document for OS X [ 9 квітня 2010 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zavantazhuvanij modul yadra loadable kernel module chi LKM ob yektnij fajl yakij mistit kod sho rozshiryuye pracyuyuche yadro abo tak skazati bazove yadro operacijnoyi sistemi LKM i vikoristovuyutsya v osnovnomu dlya dodavannya pidtrimki novogo aparatnogo zabezpechennya ta chi fajlovih sistem chi dodavannya sistemnih viklikiv Najbilsh suchasni Unix podibni sistemi ta Microsoft Windows pidtrimuyut zavantazhuvani moduli yadra hocha voni mozhut vikoristovuvati inshi nazvi dlya cogo taki yak kernel loadable module kld v FreeBSD kernel extension kext v OS X ta kernel mode driver v Windows NT Voni takozh znani yak Kernel Loadable Modules or KLM abo prosto yak Kernel Modules KMOD PerevagiOperacijna sistema bez zavantazhuvanih moduliv yadra mogla b mati uves mozhlivo ochikuvanij funkcional vzhe vbudovanij v bazove yadro Bagato cogo funkcionalu bulo b daremno zavantazheno v pam yat tomu sho ne vikoristovuvalosya b a prosto vitrachalo b pam yat ta b potrebuvalo shob koristuvachi perezbirali ta perevantazhuvali bazove yadro kozhen raz koli yim potriben novij funkcional Bilshist operacijnih sistem pidtrimuyuchi zavantazhuvani moduli yadra vklyuchayut tilki bilsh zatrebuvanij funkcional NedolikiOdin malenkij nedolik perevagi modulnogo yadra nad statichnim tak zvana problema fragmentaciyi Bazove yadro zavzhdi nezapakovane v realnu sumizhnu pam yat za svoyeyu nalashtovuyuchoyu proceduroyu takim chinom bazovij kod yadra ye zavzhdi nefragmentovanim Yak tilki sistema v stani koli moduli mozhut buti zavantazheni napriklad zmontuvali fajlovu sistemu sho mistitsya v moduli ce imovirno sho bud yakij novij kod yadra sprichinit fragmentaciyu yadra ta vnese malenku degradaciyu produktivnosti Realizaciyi v inshih operacijnih sistemahLinux Zavantazhuvani moduli yadra v Linux ce zavantazheni abo vivantazheni za dopomogoyu komandi Voni rozmisheni v lib modules ta mayut rozshirennya ko kernel object z versiyi 2 6 v poperednih versiyah vikoristovuvalosya rozshirennya o Komanda en pokazuye spisok zavantazhenih moduliv yadra V avarijnih situaciyah koli sistema ne mozhe zavantazhitisya cherez napriklad zipsuti moduli specialni moduli mozhut buti vklyucheni abo viklyucheni za dopomogoyu zmini zavantazhuvanih parametriv yadra napriklad yaksho vikoristovuyetsya GRUB natiskayete e v startovomu menyu GRUB ta redaguyete strichku parametriv yadra Licenzijni spirni pitannya Na dumku Linux rozrobnikiv LKM ce pohidnij tvir yadra Linuks rozrobniki dozvolyayut rozpovsyudzhennya proprietarnih moduliv no simvoli mayut buti markovani yak taki yaki ye tilki dostupnimi dlya GNU General Public License GPL moduliv Pid cham zavantazhennya proprietarnogo abo ne GPL sumisnogo LKM bude stavitisya praporec taint v pracyuyuchomu yadri ce znachit sho bud yaka problema chi pomilka bude doslidzhena rozrobnikami z mensh imovirnistyu LKM i operativno stali chastinoyu pracyuyuchogo yadra voni mozhut poshkoditi strukturu danih yadra ta prinesti defekti v roboti programi sho mozhut ne buti doslidzhenimi yaksho modul spravdi proprietarnij Linuxant superechka V 2004 Linuxant konsultuyucha kompaniya sho realizovuvala proprietarni drajvera pristroyiv yak zavantazhuvani moduli yadra sprobuvala zlovzhiti en v MODULE LICENSE yak vidno v nastupnomu urivku kodu MODULE LICENSE GPL 0 for files in the GPL directory for others only LICENSE file applies Kod porivnyannya strichok yakij vikoristovuyetsya yadrom dlya viyavlennya licenzij vidminnih vid GPL v moment viznachennya licenziyi dosyag NULL simvolu 0 sho v svoyu chergu prizvelo do zupinki procesu perevirki licenziyi viznachivshi yiyi yak licenziyu GPL FreeBSD Moduli yadra dlya FreeBSD yaki rozpovsyudzhuyutsya z OS zberigayutsya v boot kernel a v boot modules zazvichaj vstanovleni z en or FreeBSD packages abo ye proprietarnimi V inshomu vipadku tilki dvijkovi moduli Moduli yadra FreeBSD mayut rozshirennya ko Yak tilki mashina gotova voni mozhut buti zavantazheni za dopomogoyu komandi kldload vivantazheni kldunload ta perechisleni kldstat Moduli mozhut takozh buti zavantazheni z zavantayeuvacha pered startom yadra abo avtomatichno cherez boot loader conf abo vruchnu OS X Deyaki zavantazhuvani moduli yadra v OS X mozhut buti zavantazhenimi avtomatichno Zavantazhuvani moduli yadra mozhut takozh buti zavantazhenimi z dopomogoyu komandi kextload perechisleni kextstat Voni rozmisheni v en iv z rozshirennyam kext Moduli yaki postachayutsya z operacijnoyu sistemoyu zberigayutsya v direktoriyi System Library Extensions moduli yaki postachayutsya tretoyu storonoyu v riznih inshih NetWare Modul yadra NetWare nazivayut en NLM NLM vstavlyayutsya v NetWare yadro komandoyu LOAD ta vidalyayutsya komandoyu UNLOAD komanda modules pokazuye vsi zavantazheni na danij moment moduli NLM mozhut rozmishuvatisya v bud yakomu poshukovomu misci sho priv yazani do NetWare servera takozh voni mayut NLM rozshirennya fajla Dvijkova sumisnistLinuks ne zabezpechuye stabilnij API chi ABI dlya moduliv yadra Ce oznachaye sho ye riznicya u vnutrishnij strukturi ta funkciyi mizh riznimi versiyami yadra yaki mozhut sprichinyati problemi sumisnosti Sproboyu poboroti ci problemi stalo rozmishennya mitki danih pro versiyu v modinfo sekciyu ELF moduliv Cya informaciya pro versiyu mozhe buti porivnyana z tiyeyu yaku maye pracyuyuche yadro pered zavantazhennyam modulya Yaksho versiyi nesumisni modul ne bude zavantazhenij Inshi operacijni sistemi taki yak Solaris FreeBSD OS X ta Windows pidtrimuyut API ta ABI yadra vidnosno stabilnimi sho dozvolyaye uniknuti takih problem Dlya prikladu moduli yadra FreeBSD yaki skompilovani dlya versiyi yadra 6 0 budut pracyuvati bez kompilyaciyi na bud yakij inshij versiyi FreeBSD 6 x napriklad 6 4 Odnak voni nesumisni z inshimi mazhornimi versiyami ta povinni buti perezibrani dlya vikoristannya z FreeBSD 7 x tak yak API i ABI sumisnist pidtrimuyetsya tilki v mezhah gilki BezpekaTak yak zavantazhuvani moduli yadra zruchnij sposib zmini pracyuyuchogo yadra ce mozhe vikoristovuvatis napadnikami dlya svoyih cilej na skopromentovanij sistemi Napriklad shob uniknuti viyavlennya yihnih procesiv ta fajliv sho dozvolyaye takim chinom pidtrimuvati kontrol nad sistemoyu Bagato rutkitiv vikoristovuyut LKM dlya cogo Zapam yatajte sho na bilshosti operacijnih sistem moduli ne dopomagayut oskilki pidvisheni privileyi potribni dlya samogo zavantazhennya modulya yadra voni prosto polegshuyut proces prihovuvannya slidiv napadnika Linuks Linuks dozvolyaye zaboronyati zavantazhennya moduliv cherez sysctl parametr proc sys kernel modules disabled Sistema Initrd initramfs mozhe zavantazhuvati specifichni moduli yaki potribni dlya mashini pid chas zavantazhennya i potim zaboronyati zavantazhennya moduliv Ce robit sistemu bezpeki bezpeku duzhe shozhoyu do takoyi yaka vlastiva monolitnim yadram Yaksho atakuyuchij mozhe zminiti initramfs to vin zmozhe zminiti i dvijkovij kod yadra OS X Na OS X zavantazhuvanij modul yadra v yadrovomu rozshirenomu bundle mozhe buti zavantazhenim neprivilejovanim koristuvachem yaksho vlastivist OSBundleAllowUserLoad vstanovleno v True v v spisku vlastivostej bundle Odnak yaksho bud yakij z fajliv v bundle vklyuchayuchi vikonuvach kod ne prinalezhnij root ta grupi wheel chi ne zapisanij grupoyu inshi sproba zavantazhiti modul yadra provalitsya Div takozhPrimitki Kernel Extension Programming Topics Introduction 2 chervnya 2012 u Wayback Machine What Determines When a Driver Is Loaded 6 bereznya 2013 u Wayback Machine The Linux Kernel Module Programming Guide section 2 2 Compiling Kernel Modules 2012 08 18 u Wayback Machine Linus Torvalds et al 2011 06 21 Jonathan Corbet 2006 03 24 Novell support documentation Tainted kernel 2012 10 19 u Wayback Machine 2007 07 26 Jonathan Corbet April 27 2004 Arhiv originalu za 4 lyutogo 2012 Procitovano 27 zhovtnya 2015 Sysctl kernel txt nedostupne posilannya z kvitnya 2019 Kees Cook 2012 11 28 Info plist Properties for Kernel Extensions 4 travnya 2013 u Wayback Machine a rel nofollow class external text href developer apple com documentation Darwin Reference ManPages man8 kextload 8 html kextload 8 a Darwin and Mac OS X System Manager s ManualPosilannya IBM DeveloperWorks July 16 2008 archived from the original on July 26 2008 Online kext database for OSX Hackintosh 19 grudnya 2015 u Wayback Machine Ori Pomerantz Linux Kernel Module Programming Guide 26 lyutogo 2018 u Wayback Machine 2008 archived from the original on June 20 2008 Kernel Extension Programming Topics document for OS X 9 kvitnya 2010 u Wayback Machine