Istraživači iz kompanije ARMO demonstrirali su mogućnost stvaranja rootkita koji ne koristi specifične sistemske pozive za izvršavanje tipičnih operacija, kao što su čitanje/pisanje datoteka i primanje komandi s vanjskog poslužitelja. Umjesto sistemskih poziva za izvršavanje mrežnih i datotečnih operacija, predlaže se korištenje sučelja asinkronog ulaza/izlaza io_uring, koje je podržano od jezgre Linux 5.1.
Bit metode je u tome da umjesto pojedinačnih sistemskih poziva za pristup datotekama i izvršavanje mrežnih operacija (read/write, recv/send/connect/bind/listen) možete koristiti zajedničke sistemske pozive io_uring (io_uring_enter, io_uring_setup, io_uring_register itd.), koji se ne analiziraju tipičnim alatima za otkrivanje zlonamjernih aktivnosti. Sučelje io_uring podržava oko 60 različitih operacija. U razvoju je mogućnost koja omogućava pokretanje novih procesa putem io_uring.
Za demonstraciju rada metode pripremljen je prototip rootkita Curing, koji izvršava takve radnje kao primanje komandi od vanjskog poslužitelja i prijenos/izmjena datoteka. U demonstraciji je korišteno slanje zahtjeva na TCP-port 8888 vanjskog domaćina i slanje sadržaja datoteke "/etc/shadow". Podrazumijeva se da, nakon uspješne kompromise sustava i stjecanja prava root, napadač instalira rootkit kako bi učvrstio svoje prisustvo na hakiranom sustavu.
U provedenom eksperimentu aktivnost rootkita Curing nije primijećena alatima za nadzor Falco i Tetragon, koji se koriste za određivanje povezanih s sigurnošću anomalija na hostovima i u kontejnerima (podržava se integracija s infrastrukturom na bazi Kubernetes). Spomenuti alati koriste presretanje sistemskih poziva za analizu takvih događaja kao što su pokretanje procesa, mrežna aktivnost i rad s datotekama, ali ne uzimaju u obzir mogućnost korištenja podsustava io_uring za slične operacije. Većina komercijalnih sustava za Linux za otkrivanje i reagiranje na sigurnosne incidente također se temelji na presretanju sistemskih poziva.
Kako bi se spriječilo zaobilaženje alata za praćenje mrežne i datotečne aktivnosti, umjesto presretanja sistemskih poziva, preporučuje se upotreba mehanizma KRSI (Kernel Runtime Security Instrumentation), koji je uveden u jezgru Linux 5.7 i omogućuje priključenje BPF programa na bilo koje LSM udice. Na primjer, KRSI na razini LSM udica omogućuje praćenje operacija s datotekama, mrežnog pristupa i pokretanja procesa, neovisno o tome jesu li te operacije inicirane putem specifičnih sistemskih poziva ili putem io_uring.
Ranije je podsustav io_uring bio predmet kritika zbog redovitog pojavljivanja ozbiljnih ranjivosti. Kao odgovor na želje korisnika za jednostavnim alatom za onemogućavanje io_uring bez ponovne izrade jezgre, u jezgru Linux 6.6 dodan je sysctl io_uring_disabled. Tvrtka Google je po defaultu onemogućila io_uring u ChromeOS-u, Androidu i na svojim poslužiteljima, objašnjavajući da katastrofalna situacija s sigurnošću u io_uring nadmašuje prednosti korištenja io_uring za poboljšanje performansi.
Izvor: opennet.ru
