LKRG 0.8 moduļa izlaišana, lai aizsargātu pret Linux kodola ievainojamību izmantošanu

Openwall projekts publicēti kodola moduļa izlaišana LKRG 0.8 (Linux Kernel Runtime Guard), kas paredzēts, lai atklātu un bloķētu uzbrukumus un kodola struktūru integritātes pārkāpumus. Piemēram, modulis var aizsargāt pret nesankcionētām izmaiņām darbošajā kodolā un mēģinājumiem mainīt lietotāja procesu atļaujas (konstatējot ļaunprātīgu izmantošanu). Modulis ir piemērots gan aizsardzības organizēšanai pret jau zināmiem Linux kodola izvarojumiem (piemēram, situācijās, kad sistēmā ir grūti atjaunināt kodolu), gan arī cīņai pret ekspluatācijām vēl nezināmu ievainojamību gadījumā. Projekta kods izplata licencēts saskaņā ar GPLv2.

Starp izmaiņām jaunajā versijā:

  • Mainīts LKRG projekta pozicionējums, kas vairs nav sadalīts atsevišķās apakšsistēmās integritātes pārbaudei un exploitu izmantošanas noteikšanai, bet tiek pasniegts kā pilnīgs produkts uzbrukumu un dažādu integritātes pārkāpumu identificēšanai;
  • Saderība tiek nodrošināta ar Linux kodoliem no 5.3 līdz 5.7, kā arī ar kodoliem, kas kompilēti ar agresīvu GCC optimizāciju, bez opcijām CONFIG_USB un CONFIG_STACKTRACE vai ar opciju CONFIG_UNWINDER_ORC, kā arī ar kodoliem, kuriem nav LKRG funkciju, ja tie ir piesaistīti. iztikt bez;
  • Veidojot, tiek pārbaudīti daži obligātie CONFIG_* kodola iestatījumi, lai radītu jēgpilnus kļūdu ziņojumus, nevis neskaidras avārijas;
  • Pievienots gaidstāves (ACPI S3, apturēt uz RAM) un miega (S4, apturēt uz disku) režīmu atbalsts;
  • Pievienots DKMS atbalsts Makefile;
  • Ir ieviests eksperimentāls atbalsts 32 bitu ARM platformām (testēts uz Raspberry Pi 3 Model B). Iepriekš pieejamais AArch64 (ARM64) atbalsts ir paplašināts, lai nodrošinātu saderību ar Raspberry Pi 4 plati;
  • Ir pievienoti jauni āķi, tostarp spējīgs () zvanu apstrādātājs, lai labāk identificētu ļaunprātīgas darbības, kas manipulē "iespējas", nevis apstrādes ID (akreditācijas dati);
  • Ir ierosināta jauna loģika, lai noteiktu mēģinājumus izvairīties no nosaukumvietas ierobežojumiem (piemēram, no Docker konteineriem);
  • Sistēmās x86-64 tiek pārbaudīts un lietots SMAP (Supervisor Mode Access Prevention) bits, kas paredzēts, lai bloķētu piekļuvi lietotāja vietas datiem no priviliģētā koda, kas darbojas kodola līmenī. SMEP (Supervisor Mode Execution Prevention) aizsardzība tika ieviesta iepriekš;
  • Darbības laikā LKRG iestatījumi tiek ievietoti atmiņas lapā, kas parasti ir tikai lasāma;
  • Reģistrācijas informācija, kas var būt visnoderīgākā uzbrukumiem (piemēram, informācija par adresēm kodolā), ir ierobežota ar atkļūdošanas režīmu (log_level=4 un augstāks), kas pēc noklusējuma ir atspējots.
  • Procesu izsekošanas datu bāzes mērogojamība ir palielināta - viena RB koka vietā, kas aizsargāts ar vienu spinlock, tiek izmantota 512 RB koku jaucēj tabula, kas aizsargāta ar 512 lasīšanas-rakstīšanas slēdzenēm;
  • Pēc noklusējuma ir ieviests un iespējots režīms, kurā procesa identifikatoru integritāte bieži tiek pārbaudīta tikai pašreizējam uzdevumam un pēc izvēles arī aktivizētiem (pamošanās) uzdevumiem. Citiem uzdevumiem, kas ir miega stāvoklī vai darbojas, nepiekļūstot kodola API, ko kontrolē LKRG, pārbaude tiek veikta retāk.
  • Pievienoti jauni sysctl un moduļa parametri LKRG precizēšanai, kā arī divi sysctl vienkāršotai konfigurācijai, izvēloties no izstrādātāju sagatavotajām precizējošo iestatījumu (profilu) kopām;
  • Noklusējuma iestatījumi ir mainīti, lai panāktu līdzsvarotāku līdzsvaru starp pārkāpumu noteikšanas ātrumu un reakcijas efektivitāti, no vienas puses, un ietekmi uz veiktspēju un viltus pozitīvu rezultātu risku, no otras puses;
  • Systemd vienības fails ir pārveidots, lai ielādētu LKRG moduli sāknēšanas sākumā (moduļa atspējošanai var izmantot kodola komandrindas opciju);

Ņemot vērā jaunajā laidienā piedāvātās optimizācijas, veiktspējas samazinājums, izmantojot LKRG 0.8, tiek lēsts par 2.5% noklusējuma režīmā ("smags") un 2% vieglajā režīmā ("viegls").

Nesen notikušajā Pētījumi pakotņu efektivitāte rootkit LKRG noteikšanai parādīja labākos rezultātus, identificējot 8 no 9 pārbaudītajiem sakņu komplektiem, kas darbojas kodola līmenī bez viltus pozitīviem rezultātiem (rootkit Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit un Sutekh, bet Keysniffer, kas ir kodols modulis, tika palaists garām ar keylogger, nevis rootkit tiešā nozīmē). Salīdzinājumam, AIDE, OSSEC un Rootkit Hunter pakotnes atklāja 2 no 9 sakņu komplektiem, bet Chkrootkit neatklāja nevienu. Tajā pašā laikā LKRG neatbalsta lietotāja telpā esošo sakņu komplektu noteikšanu, tāpēc vislielākā efektivitāte tiek sasniegta, izmantojot AIDE un LKRG kombināciju, kas ļāva identificēt 14 no 15 visu veidu sakņu komplektiem.

Turklāt var atzīmēt, ka izplatīšanas izstrādātājs Whonix sākās veidošana gatavas pakotnes ar DKMS priekš Debian, Whonix, Qubes un Kicksecure, kā arī pakotne priekš Arch Linux jau atjaunināts uz versiju 0.8. Pakas ar LKRG ir pieejamas arī krievu valodā ALT Linux и AstraLinux.

Integritātes pārbaude LKRG tiek veikta, salīdzinot kodola un moduļu faktisko kodu un datus, dažas svarīgas datu struktūras un CPU iestatījumus ar saglabātajiem jaucējkodiem vai atbilstošo atmiņas apgabalu, datu struktūru vai reģistru kopijām. Pārbaudes tiek aktivizētas gan periodiski ar taimera palīdzību, gan dažādu notikumu gadījumā.

Iespējamās ekspluatācijas izmantošanas un uzbrukumu bloķēšanas noteikšana tiek veikta posmā, pirms kodols nodrošina piekļuvi resursiem (piemēram, pirms faila atvēršanas), bet pēc tam, kad process ir saņēmis nesankcionētas atļaujas (piemēram, mainot UID). Ja tiek atklāta neatļauta darbība, procesi pēc noklusējuma ir spiesti pārtraukt, un tas ir pietiekami, lai bloķētu daudzas ekspluatācijas.

Avots: opennet.ru

Pievieno komentāru