Az ARMO cég kutatói bemutatták, hogy lehetséges olyan rootkitek létrehozása, amelyek nem használnak speciális rendszerhívásokat tipikus műveletek, például fájlok olvasása/írása és parancsok fogadása külső szerverekről való végrehajtására. A rendszerhívások helyett javasolták az io_uring aszinkron I/O interfész használatát, amely a Linux 5.1-től kezdve támogatott.
A módszer lényege abban rejlik, hogy a fájlhozzáférés és a hálózati műveletek (read/write, recv/send/connect/bind/listen) külön rendszerhívásai helyett általános rendszerhívásokat (io_uring_enter, io_uring_setup, io_uring_register stb.) lehet használni, amelyeket a hagyományos rosszindulatú tevékenységek azonosítására szolgáló eszközök nem elemeznek. Az io_uring interfész körülbelül 60 különböző műveletet támogat. Fejlesztés alatt áll egy lehetőség, amely lehetővé teszi új folyamatok indítását io_uring-on keresztül.
A módszer működésének bemutatására egy Curing nevű rootkit prototípust készítettek, amely végrehajt ilyen műveleteket, mint parancsok fogadása külső a szerver és fájlok átvitele/módosítása. A bemutató során egy TCP-port 8888-ra irányuló kérés küldését alkalmazták egy külső gazdagép felé, amely a „/etc/shadow” fájl tartalmát küldte. Feltételezhető, hogy a rendszer sikeres kompromittálása és root jogok megszerzése után a támadó telepíti a rootkit-et a meghekkelhető rendszerben való jelenlét megerősítése érdekében.
A végrehajtott kísérlet során a Curing rootkit aktivitása nem volt észlelhető a Falco és Tetragon monitoring eszközök által, amelyek a biztonsági anomáliák azonosítására használatosak hosztokon és konténereken (Kubernetes alapú infrastruktúrával való integráció támogatott). Ezek az eszközök a rendszerhívások elfogásával elemzik az olyan eseményeket, mint a folyamatok indítása, hálózati aktivitás és fájlkezelés, de nem veszik figyelembe az io_uring alrendszer használatának lehetőségét ilyen műveletekhez. A Linux számára elérhető kereskedelmi biztonsági események és incidensek észlelésére és kezelésére szolgáló rendszerek többsége szintén a rendszerhívások elfogására alapoz.
A hálózati és fájlaktivitás követésére szolgáló eszközök megkerülésének elkerülése érdekében javasolt a KRSI (Kernel Runtime Security Instrumentation) mechanizmus használata, amely a Linux 5.7 kernelben jelent meg, és lehetővé teszi BPF-programok csatolását bármely LSM-horogra. Például a KRSI az LSM-horog szintjén lehetőséget ad a fájlokkal kapcsolatos műveletek, a hálózati hozzáférés és a folyamatok indításának nyomon követésére, függetlenül attól, hogy ezek a műveletek specifikus rendszerhívásokon vagy io_uringon keresztül lettek kezdeményezve.
Korábban az io_uring alrendszer kritikák kereszttüzébe került, mert rendszeresen komoly sebezhetőségek bukkantak fel. A felhasználók kérésére, akik egyszerű eszközt kívántak az io_uring letiltására anélkül, hogy a kernelt újra kellene építeni, a Linux 6.6 kernelbe bekerült az io_uring_disabled sysctl. A Google alapértelmezés szerint letiltotta az io_uring-ot a ChromeOS-ben, Androidon és az szervereken, magyarázva, hogy az io_uring biztonsági helyzete annyira siralmas, hogy felülmúlja az io_uring alkalmazásának teljesítménynövelő előnyeit.
Forrás: opennet.ru
