Frigivelse af LKRG 0.8-modulet for at beskytte mod udnyttelse af sårbarheder i Linux-kernen

Openwall projekt опубликовал kernemoduludgivelse LKRG 0.8 (Linux Kernel Runtime Guard), designet til at opdage og blokere angreb og krænkelser af integriteten af ​​kernestrukturer. For eksempel kan modulet beskytte mod uautoriserede ændringer af den kørende kerne og forsøg på at ændre tilladelserne for brugerprocesser (detektere brugen af ​​udnyttelser). Modulet er velegnet både til at organisere beskyttelse mod allerede kendte exploits til Linux-kernen (f.eks. i situationer, hvor det er svært at opdatere kernen i systemet), og til at imødegå exploits for endnu ukendte sårbarheder. Projektkode distribueret af licenseret under GPLv2.

Blandt ændringerne i den nye version:

  • Placeringen af ​​LKRG-projektet er blevet ændret, som ikke længere er opdelt i separate undersystemer til kontrol af integritet og bestemmelse af brugen af ​​udnyttelser, men præsenteres som et komplet produkt til identifikation af angreb og forskellige integritetskrænkelser;
  • Kompatibilitet er tilvejebragt med Linux-kerner fra 5.3 til 5.7, såvel som med kerner kompileret med aggressive GCC-optimeringer, uden CONFIG_USB og CONFIG_STACKTRACE-indstillingerne eller med CONFIG_UNWINDER_ORC-indstillingen, såvel som med kerner, der ikke har LKRG-hooked-funktioner, hvis de kan undværes;
  • Når du bygger, kontrolleres nogle obligatoriske CONFIG_*-kerneindstillinger for at generere meningsfulde fejlmeddelelser i stedet for obskure nedbrud;
  • Tilføjet understøttelse af standby (ACPI S3, suspend til RAM) og dvale (S4, suspend til disk) tilstande;
  • Tilføjet DKMS-understøttelse til Makefile;
  • Eksperimentel understøttelse af 32-bit ARM-platforme er blevet implementeret (testet på Raspberry Pi 3 Model B). Tidligere tilgængelig AArch64 (ARM64)-understøttelse er blevet udvidet for at give kompatibilitet med Raspberry Pi 4-kortet;
  • Nye hooks er blevet tilføjet, inklusive en capable() call handler for bedre at identificere udnyttelser, der manipulerer "kapaciteter", ikke proces-id'er (Legitimationsoplysninger);
  • Ny logik er blevet foreslået til at opdage forsøg på at undslippe navnerumsbegrænsninger (for eksempel fra Docker-containere);
  • På x86-64-systemer kontrolleres og anvendes SMAP-bit (Supervisor Mode Access Prevention), designet til at blokere adgang til brugerrumsdata fra privilegeret kode, der kører på kerneniveau. SMEP-beskyttelse (Supervisor Mode Execution Prevention) blev implementeret tidligere;
  • Under drift placeres LKRG-indstillingerne på en hukommelsesside, der normalt er skrivebeskyttet;
  • Logoplysninger, der kan være mest nyttige til angreb (f.eks. oplysninger om adresser i kernen) er begrænset til fejlretningstilstand (log_level=4 og højere), som er deaktiveret som standard.
  • Skalerbarheden af ​​processporingsdatabasen er blevet øget - i stedet for et RB-træ beskyttet af en spinlock, bruges en hash-tabel med 512 RB-træer beskyttet af 512 læse-skrive-låse;
  • En tilstand er blevet implementeret og aktiveret som standard, hvor integriteten af ​​procesidentifikatorer ofte kun kontrolleres for den aktuelle opgave, og også valgfrit for aktiverede (vågne) opgaver. For andre opgaver, der er i dvaletilstand eller arbejder uden adgang til kerne-API'en styret af LKRG, udføres kontrollen sjældnere.
  • Tilføjet nye sysctl- og modulparametre til finjustering af LKRG, samt to sysctl til forenklet konfiguration ved at vælge fra sæt af finjusteringsindstillinger (profiler) udarbejdet af udviklerne;
  • Standardindstillingerne er blevet ændret for at opnå en mere afbalanceret balance mellem hastigheden af ​​opdagelse af overtrædelser og effektiviteten af ​​svaret på den ene side og indvirkningen på ydeevnen og risikoen for falske positiver på den anden side;
  • Systemd-enhedsfilen er blevet omdesignet til at indlæse LKRG-modulet tidligt under opstart (en kerne-kommandolinje kan bruges til at deaktivere modulet);

Under hensyntagen til de optimeringer, der foreslås i den nye udgivelse, er ydeevnereduktionen ved brug af LKRG 0.8 estimeret til 2.5 % i standardtilstand ("tung") og 2% i lystilstand ("let").

I en nylig afholdt undersøgelse effektiviteten af ​​pakker til at detektere rootkits LKRG viste bedste resultater, der identificerer 8 ud af 9 testede rootkits, der arbejder på kerneniveau uden falske positiver (rootkits Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit og Sutekh blev identificeret, men Keysniffer, som er en kerne modul, blev savnet med en keylogger, ikke et rootkit i bogstavelig forstand). Til sammenligning opdagede AIDE-, OSSEC- og Rootkit Hunter-pakkerne 2 ud af 9 rootkits, mens Chkrootkit ikke opdagede nogen. Samtidig understøtter LKRG ikke detektering af rootkits placeret i brugerrummet, så den største effektivitet opnås ved brug af en kombination af AIDE og LKRG, hvilket gjorde det muligt at identificere 14 ud af 15 rootkits af alle typer.

Derudover kan det bemærkes, at distributionsudvikleren Whonix påbegyndt formation færdige pakker med DKMS til Debian, Whonix, Qubes og Kicksecure, og en pakke til Arch Linux allerede opdateret til version 0.8. Pakker med LKRG er også tilgængelige på russisk alt linux и AstraLinux.

Integritetskontrol i LKRG udføres ved at sammenligne kernens og modulernes faktiske kode og data, nogle vigtige datastrukturer og CPU-indstillinger med gemte hashes eller kopier af de tilsvarende hukommelsesområder, datastrukturer eller registre. Checks aktiveres både periodisk af timer og ved forekomsten af ​​forskellige hændelser.

Bestemmelse af mulig brug af udnyttelser og blokering af angreb udføres på stadiet før kernen giver adgang til ressourcer (for eksempel før åbning af en fil), men efter at processen har modtaget uautoriserede tilladelser (for eksempel ændring af UID). Når uautoriseret adfærd opdages, tvinges processer til at afslutte som standard, hvilket er tilstrækkeligt til at blokere mange udnyttelser.

Kilde: opennet.ru

Tilføj en kommentar