Release av LKRG 0.8-modulen för att skydda mot exploatering av sårbarheter i Linux-kärnan

Openwall-projekt publicerade version av kärnmodulen LKRG 0.8 (Linux Kernel Runtime Guard), utformad för att upptäcka och blockera attacker och kränkningar av integriteten hos kärnstrukturer. Modulen kan till exempel skydda mot obehöriga ändringar av den körande kärnan och försök att ändra behörigheterna för användarprocesser (upptäcka användningen av utnyttjande). Modulen lämpar sig både för att organisera skydd mot redan kända exploateringar för Linux-kärnan (till exempel i situationer där det är svårt att uppdatera kärnan i systemet), och för att motverka exploateringar för ännu okända sårbarheter. Projektkod levererad av licensierad under GPLv2.

Bland ändringarna i den nya versionen:

  • Placeringen av LKRG-projektet har ändrats, som inte längre är uppdelat i separata delsystem för kontroll av integritet och bestämning av utnyttjande, utan presenteras som en komplett produkt för att identifiera attacker och olika integritetskränkningar;
  • Kompatibilitet tillhandahålls med Linux-kärnor från 5.3 till 5.7, såväl som med kärnor kompilerade med aggressiva GCC-optimeringar, utan alternativen CONFIG_USB och CONFIG_STACKTRACE eller med alternativet CONFIG_UNWINDER_ORC, såväl som med kärnor som inte har LKRG-anslutna funktioner, om de kan undvaras;
  • När du bygger, kontrolleras vissa obligatoriska CONFIG_* kärninställningar för att generera meningsfulla felmeddelanden istället för obskyra krascher;
  • Tillagt stöd för standby-läge (ACPI S3, avstängning till RAM) och viloläge (S4, avstängning till disk);
  • Lade till DKMS-stöd till Makefile;
  • Experimentellt stöd för 32-bitars ARM-plattformar har implementerats (testat på Raspberry Pi 3 Model B). Tidigare tillgängligt stöd för AArch64 (ARM64) har utökats för att ge kompatibilitet med Raspberry Pi 4-kortet;
  • Nya krokar har lagts till, inklusive en capable() anropshanterare för att bättre identifiera utnyttjande som manipulerar "kapacitet", inte process-ID:n (Referenser);
  • Ny logik har föreslagits för att upptäcka försök att undkomma namnutrymmesbegränsningar (till exempel från Docker-behållare);
  • På x86-64-system kontrolleras och tillämpas SMAP-biten (Supervisor Mode Access Prevention), utformad för att blockera åtkomst till användarutrymmesdata från privilegierad kod som körs på kärnnivå. SMEP-skydd (Supervisor Mode Execution Prevention) implementerades tidigare;
  • Under drift placeras LKRG-inställningarna på en minnessida som vanligtvis är skrivskyddad;
  • Loggningsinformation som kan vara mest användbar för attacker (till exempel information om adresser i kärnan) är begränsad till felsökningsläge (log_level=4 och högre), vilket är inaktiverat som standard.
  • Skalbarheten för processspårningsdatabasen har ökats - istället för ett RB-träd skyddat av ett spinlock, används en hashtabell med 512 RB-träd skyddade av 512 läs- och skrivlås;
  • Ett läge har implementerats och aktiverats som standard, där integriteten för processidentifierare ofta kontrolleras endast för den aktuella uppgiften, och även valfritt för aktiverade (vakna) uppgifter. För andra uppgifter som är i viloläge eller som fungerar utan åtkomst till kärn-API:t som kontrolleras av LKRG, utförs kontrollen mindre ofta.
  • Lade till nya sysctl- och modulparametrar för finjustering av LKRG, samt två sysctl för förenklad konfiguration genom att välja från uppsättningar av finjusteringsinställningar (profiler) förberedda av utvecklarna;
  • Standardinställningarna har ändrats för att uppnå en mer balanserad balans mellan hastigheten för upptäckt av överträdelser och effektiviteten av svaret, å ena sidan, och påverkan på prestanda och risken för falska positiva, å andra sidan;
  • Systemd-enhetsfilen har omdesignats för att ladda LKRG-modulen tidigt i uppstarten (ett kommandoradsalternativ för kärnan kan användas för att inaktivera modulen);

Med hänsyn till de optimeringar som föreslås i den nya utgåvan uppskattas prestandaminskningen vid användning av LKRG 0.8 till 2.5 % i standardläge ("tungt") och 2% i lättläge ("lätt").

I en nyligen hållen studie effektiviteten hos paket för att upptäcka rootkits LKRG visade bästa resultat, identifierande 8 av 9 testade rootkits som fungerar på kärnnivå utan falska positiva (rootkits Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit och Sutekh identifierades, men Keysniffer, som är en kärna modul, missades med en keylogger, inte ett rootkit i bokstavlig mening). Som jämförelse upptäckte paketen AIDE, OSSEC och Rootkit Hunter 2 av 9 rootkits, medan Chkrootkit inte upptäckte några. Samtidigt stöder LKRG inte detektering av rootkits som finns i användarutrymmet, så den största effektiviteten uppnås när man använder en kombination av AIDE och LKRG, vilket gjorde det möjligt att identifiera 14 av 15 rootkits av alla typer.

Dessutom kan det noteras att distributionsutvecklaren Whonix satte igång bildning färdiga paket med DKMS för Debian, Whonix, Qubes och Kicksecure, och ett paket för Arch Linux redan uppdaterad till version 0.8. Paket med LKRG finns även på ryska ALT-Linux и AstraLinux.

Integritetskontroll i LKRG utförs genom att jämföra den faktiska koden och data för kärnan och modulerna, några viktiga datastrukturer och CPU-inställningar med lagrade hash eller kopior av motsvarande minnesområden, datastrukturer eller register. Kontroller aktiveras både periodiskt av timer och vid uppkomsten av olika händelser.

Att fastställa möjlig användning av exploateringar och blockering av attacker utförs i skedet innan kärnan ger åtkomst till resurser (till exempel innan en fil öppnas), men efter att processen har fått obehöriga behörigheter (till exempel byte av UID). När obehörigt beteende upptäcks, tvingas processer att avslutas som standard, vilket är tillräckligt för att blockera många utnyttjande.

Källa: opennet.ru

Lägg en kommentar