LKRG 0.8 -moduulin julkaisu suojaa Linux-ytimen haavoittuvuuksien hyödyntämiseltä

Openwall projekti julkaistu ydinmoduulin julkaisu LKRG 0.8 (Linux Kernel Runtime Guard), suunniteltu havaitsemaan ja estämään hyökkäykset ja ydinrakenteiden eheysrikkomukset. Moduuli voi esimerkiksi suojautua luvattomilta muutoksilta käynnissä olevaan ytimeen ja yrityksiltä muuttaa käyttäjän prosessien käyttöoikeuksia (havaitsee hyväksikäytön). Moduuli soveltuu sekä suojauksen järjestämiseen Linux-ytimen jo tunnettuja hyväksikäyttöjä vastaan ​​(esimerkiksi tilanteissa, joissa ytimen päivittäminen järjestelmään on vaikeaa) että vielä tuntemattomien haavoittuvuuksien hyväksikäyttöjen torjuntaan. Projektin koodi jakelija lisensoitu GPLv2:lla.

Uuden version muutoksista:

  • LKRG-projektin sijoittelua on muutettu, mikä ei ole enää jaettu erillisiin alijärjestelmiin eheyden tarkistamiseksi ja hyväksikäytön määrittämiseksi, vaan se esitetään kokonaisena tuotteena hyökkäysten ja erilaisten eheysloukkausten tunnistamiseen;
  • Yhteensopivuus tarjotaan Linux-ytimien 5.3-5.7 kanssa sekä ytimien kanssa, jotka on käännetty aggressiivisilla GCC-optimoinneilla, ilman CONFIG_USB- ja CONFIG_STACKTRACE-vaihtoehtoja tai CONFIG_UNWINDER_ORC-vaihtoehdolla, sekä ytimien kanssa, joissa ei ole LKRG-toimintoa, jos ne voivat olla kytkettyinä luopua;
  • Rakennettaessa jotkin pakolliset CONFIG_*-ytimen asetukset tarkistetaan, jotta ne luovat merkityksellisiä virheilmoituksia epäselvien kaatumisten sijaan;
  • Lisätty tuki valmiustilalle (ACPI S3, keskeytys RAM-muistiin) ja lepotilalle (S4, keskeytys levylle);
  • Lisätty DKMS-tuki Makefileen;
  • Kokeellinen tuki 32-bittisille ARM-alustoille on otettu käyttöön (testattu Raspberry Pi 3 Model B:llä). Aiemmin saatavilla oleva AArch64 (ARM64) -tuki on laajennettu yhteensopivuuden tarjoamiseksi Raspberry Pi 4 -levyn kanssa;
  • Uusia koukkuja on lisätty, mukaan lukien capable()-puhelunkäsittelijä, joka tunnistaa paremmin hyväksikäytöt, jotka manipuloivat "kyvyt", ei prosessitunnuksia (Valtakirjojen);
  • Uutta logiikkaa on ehdotettu tunnistamaan yritykset paeta nimiavaruuden rajoituksia (esimerkiksi Docker-säiliöistä);
  • x86-64-järjestelmissä tarkistetaan ja käytetään SMAP-bittiä (Supervisor Mode Access Prevention), joka on suunniteltu estämään pääsy käyttäjätilan tietoihin ytimen tasolla ajetusta etuoikeutetusta koodista. SMEP (Supervisor Mode Execution Prevention) -suojaus on otettu käyttöön aiemmin;
  • Käytön aikana LKRG-asetukset sijoitetaan muistisivulle, joka on yleensä vain luku -tilassa;
  • Lokitiedot, jotka saattavat olla hyödyllisimpiä hyökkäyksissä (esimerkiksi tiedot ytimen osoitteista), rajoittuvat virheenkorjaustilaan (log_level=4 tai uudempi), joka on oletuksena poistettu käytöstä.
  • Prosessinseurantatietokannan skaalautuvuutta on lisätty - yhden spinlockin suojatun yhden RB-puun sijasta käytetään 512 RB-puun hash-taulukkoa, joka on suojattu 512 luku-kirjoituslukolla;
  • Oletuksena on toteutettu ja otettu käyttöön tila, jossa prosessitunnisteiden eheys tarkistetaan usein vain kulloisenkin tehtävän osalta ja valinnaisesti myös aktivoitujen (herätys) tehtävien osalta. Muissa tehtävissä, jotka ovat lepotilassa tai toimivat ilman LKRG:n ohjaaman ytimen API:n käyttöä, tarkistus suoritetaan harvemmin.
  • Lisätty uudet sysctl- ja moduuliparametrit LKRG:n hienosäätöä varten sekä kaksi sysctl-parametria yksinkertaistettuun konfigurointiin valitsemalla kehittäjien valmistamien hienosäätöasetusten (profiilien) joukosta.
  • Oletusasetuksia on muutettu tasapainoisemman tasapainon saavuttamiseksi toisaalta rikkomusten havaitsemisnopeuden ja vastauksen tehokkuuden sekä toisaalta suorituskykyyn kohdistuvan vaikutuksen ja väärien positiivisten tulosten riskin välillä.
  • Systemd-yksikkötiedosto on suunniteltu uudelleen lataamaan LKRG-moduuli käynnistyksen alussa (ytimen komentorivivaihtoehtoa voidaan käyttää moduulin poistamiseen käytöstä);

Uudessa julkaisussa ehdotetut optimoinnit huomioiden suorituskyvyn heikkenemisen LKRG 0.8:aa käytettäessä arvioidaan oletustilassa 2.5 % ("raskas") ja 2% kevyessä tilassa ("kevyt").

Äskettäin pidetyssä tutkimus pakettien tehokkuus rootkittien LKRG havaitsemiseen hän osoitti parhaat tulokset tunnistamalla 8 yhdeksästä testatusta rootkitistä, jotka toimivat ydintasolla ilman vääriä positiivisia tuloksia (rootkitit Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk9 Gh3st, Puszek, Reptile, Rootfoo Linux Rootkit ja Sutekh tunnistettiin, mutta Keysniffer, joka on ydin moduuli, puuttui keyloggerista, ei rootkitistä kirjaimellisessa merkityksessä). Vertailun vuoksi AIDE-, OSSEC- ja Rootkit Hunter -paketit havaitsivat 0 rootkitista 2:stä, kun taas Chkrootkit ei havainnut yhtään. Samanaikaisesti LKRG ei tue käyttäjätilassa olevien rootkittien havaitsemista, joten suurin tehokkuus saavutetaan käytettäessä AIDE:n ja LKRG:n yhdistelmää, mikä mahdollisti 9 kaiken tyyppisen rootkitin 14:stä tunnistamisen.

Lisäksi voidaan huomata, että jakelun kehittäjä Whonix Aloitin muodostus valmiit paketit DKMS:llä Debianille, Whonixille, Qubesille ja Kicksecurelle sekä paketti Arch Linux on jo päivitetty versioon 0.8. LKRG-paketteja on saatavana myös venäjäksi ALT Linux и AstraLinux.

Eheystarkistus LKRG:ssä suoritetaan vertaamalla ytimen ja moduulien todellista koodia ja dataa, joitakin tärkeitä tietorakenteita ja CPU-asetuksia tallennettuihin hajautusarvoihin tai vastaavien muistialueiden, tietorakenteiden tai rekisterien kopioihin. Tarkistukset aktivoidaan sekä määräajoin ajastimella että erilaisten tapahtumien sattuessa.

Hyökkäysten mahdollisen käytön ja estohyökkäysten määrittäminen tehdään siinä vaiheessa, kun ydin antaa pääsyn resursseihin (esimerkiksi ennen tiedoston avaamista), mutta sen jälkeen, kun prosessi on saanut luvattomat luvat (esimerkiksi UID:n vaihtaminen). Kun luvaton toiminta havaitaan, prosessit pakotetaan lopettamaan oletusarvoisesti, mikä riittää estämään monet hyväksikäytöt.

Lähde: opennet.ru

Lisää kommentti