Vydanie modulu LKRG 0.8 na ochranu pred zneužitím zraniteľností v jadre Linuxu

Projekt Openwall publikovaný vydanie modulu jadra LKRG 0.8 (Linux Kernel Runtime Guard), určený na detekciu a blokovanie útokov a narušenia integrity štruktúr jadra. Modul môže napríklad chrániť pred neoprávnenými zmenami spusteného jadra a pokusmi o zmenu oprávnení používateľských procesov (zisťovanie používania exploitov). Modul je vhodný ako na organizáciu ochrany proti už známym exploitom pre jadro Linuxu (napríklad v situáciách, keď je ťažké aktualizovať jadro v systéme), tak aj na boj proti exploitom pre zatiaľ neznáme zraniteľnosti. Kód projektu distribuovaný pod licenciou GPLv2.

Medzi zmeny v novej verzii:

  • Zmenilo sa umiestnenie projektu LKRG, ktorý už nie je rozdelený na samostatné podsystémy na kontrolu integrity a určovanie použitia exploitov, ale je prezentovaný ako kompletný produkt na identifikáciu útokov a rôznych porušení integrity;
  • Kompatibilita je zabezpečená s linuxovými jadrami od 5.3 do 5.7, ako aj s jadrami kompilovanými s agresívnymi optimalizáciami GCC, bez možností CONFIG_USB a CONFIG_STACKTRACE alebo s možnosťou CONFIG_UNWINDER_ORC, ako aj s jadrami, ktoré nemajú funkcie LKRG, ak môžu. obísť sa;
  • Pri zostavovaní sa kontrolujú niektoré povinné nastavenia jadra CONFIG_*, aby sa namiesto nejasných pádov generovali zmysluplné chybové hlásenia;
  • Pridaná podpora pohotovostného režimu (ACPI S3, pozastavenie na RAM) a režimu spánku (S4, pozastavenie na disk);
  • Pridaná podpora DKMS do Makefile;
  • Bola implementovaná experimentálna podpora pre 32-bitové platformy ARM (testované na Raspberry Pi 3 Model B). Doteraz dostupná podpora AArch64 (ARM64) bola rozšírená, aby poskytovala kompatibilitu s doskou Raspberry Pi 4;
  • Boli pridané nové háčiky vrátane schopnej obsluhy hovorov () na lepšiu identifikáciu exploitov, ktoré manipulujú "možnosti", nespracúva ID (poverovacie listiny);
  • Bola navrhnutá nová logika na detekciu pokusov uniknúť obmedzeniam menného priestoru (napríklad z kontajnerov Docker);
  • Na systémoch x86-64 sa kontroluje a aplikuje bit SMAP (Supervisor Mode Access Prevention), ktorý je navrhnutý tak, aby blokoval prístup k údajom používateľského priestoru z privilegovaného kódu spusteného na úrovni jadra. Ochrana SMEP (Supervisor Mode Execution Prevention) bola implementovaná skôr;
  • Počas prevádzky sú nastavenia LKRG umiestnené na pamäťovej stránke, ktorá je zvyčajne len na čítanie;
  • Zapisovanie informácií, ktoré môžu byť najužitočnejšie pri útokoch (napríklad informácie o adresách v jadre), je obmedzené na režim ladenia (log_level=4 a vyšší), ktorý je štandardne vypnutý.
  • Zvýšila sa škálovateľnosť databázy sledovania procesov – namiesto jedného RB stromu chráneného jedným spinlockom je použitá hašovacia tabuľka 512 RB stromov chránených 512 zámkami na čítanie a zápis;
  • Štandardne je implementovaný a povolený režim, v ktorom sa integrita identifikátorov procesov často kontroluje len pre aktuálnu úlohu a voliteľne aj pre aktivované (budiace) úlohy. Pri iných úlohách, ktoré sú v režime spánku alebo pracujú bez prístupu k kernel API riadenému LKRG, sa kontrola vykonáva menej často.
  • Pridané nové parametre sysctl a modulu pre jemné doladenie LKRG, ako aj dva sysctl pre zjednodušenú konfiguráciu výberom zo sád nastavení (profilov) jemného doladenia pripravených vývojármi;
  • Predvolené nastavenia boli zmenené, aby sa dosiahla vyváženejšia rovnováha medzi rýchlosťou odhaľovania porušení a efektívnosťou reakcie na jednej strane a vplyvom na výkon a rizikom falošných poplachov na strane druhej;
  • Súbor systemd unit bol prerobený tak, aby načítal modul LKRG na začiatku zavádzania (možnosť príkazového riadku jadra sa dá použiť na vypnutie modulu);

Berúc do úvahy optimalizácie navrhnuté v novom vydaní, zníženie výkonu pri použití LKRG 0.8 sa odhaduje na 2.5 % v predvolenom režime („ťažký“) a 2 % v ľahkom režime („ľahký“).

V nedávno uskutočnenom študovať efektívnosť balíkov na detekciu rootkitov LKRG ukázal najlepšie výsledky identifikujú 8 z 9 testovaných rootkitov pracujúcich na úrovni jadra bez falošných pozitív (boli identifikované rootkity Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit a Sutekh, ale Keysniffer, čo je ker modul, chýbal s keyloggerom, nie rootkitom v doslovnom zmysle). Pre porovnanie, balíky AIDE, OSSEC a Rootkit Hunter detekovali 2 z 9 rootkitov, zatiaľ čo Chkrootkit nezistil žiadny. LKRG zároveň nepodporuje detekciu rootkitov umiestnených v užívateľskom priestore, takže najväčšia efektivita je dosiahnutá pri použití kombinácie AIDE a LKRG, čo umožnilo identifikovať 14 z 15 rootkitov všetkých typov.

Okrem toho možno poznamenať, že vývojár distribúcie Whonix začal som tvorenie hotové balíky s DKMS pre Debian, Whonix, Qubes a Kicksecure a balík pre Arch Linux už aktualizované na verziu 0.8. Balíky s LKRG sú dostupné aj v ruštine alt linux и AstraLinux.

Kontrola integrity v LKRG sa vykonáva porovnaním skutočného kódu a dát jadra a modulov, niektorých dôležitých dátových štruktúr a nastavení CPU s uloženými hashmi alebo kópiami zodpovedajúcich pamäťových oblastí, dátových štruktúr alebo registrov. Kontroly sa aktivujú periodicky pomocou časovača a pri výskyte rôznych udalostí.

Určenie možného použitia exploitov a blokovanie útokov sa vykonáva vo fáze predtým, ako jadro poskytne prístup k zdrojom (napríklad pred otvorením súboru), ale potom, čo proces získal neoprávnené povolenia (napríklad zmena UID). Keď sa zistí neoprávnené správanie, procesy sú štandardne nútené ukončiť, čo je dostatočné na zablokovanie mnohých exploitov.

Zdroj: opennet.ru

Pridať komentár