Forskere fra virksomheden ARMO har demonstreret muligheden for at skabe rootkits, der ikke bruger specifikke systemopkald til udførelse af typiske operationer såsom læsning/skrivning af filer og modtagelse af kommandoer fra en ekstern server. I stedet for systemopkald til at udføre netværks- og filoperationer foreslås det at bruge grænsefladen for asynkron I/O io_uring, som er understøttet siden Linux-kernen 5.1.
Metodens essens er, at man i stedet for separate systemopkald til adgang til filer og udførelse af netværksoperationer (read/write, recv/send/connect/bind/listen) kan bruge de generelle systemopkald io_uring (io_uring_enter, io_uring_setup, io_uring_register osv.), som ikke analyseres af typiske værktøjer til at identificere ondsindet aktivitet. io_uring-grænsefladen understøtter omkring 60 forskellige operationer. Der arbejdes på en mulighed, der gør det muligt at starte nye processer via io_uring.
For at demonstrere metodens funktion er der udarbejdet en prototype af rootkit'et Curing, der udfører handlinger som modtagelse af kommandoer fra en ekstern server og overførsel/ændring af filer. I demonstrationen blev der sendt en forespørgsel til TCP-port 8888 på en ekstern vært og sendt indholdet af filen «/etc/shadow». Det antages, at efter en vellykket kompromittering af systemet og opnåelse af root-rettigheder, installerer angriberen rootkit'et for at sikre sin tilstedeværelse på det inficerede system.
I det gennemførte eksperiment blev aktiviteten af rootkit'et Curing ikke opdaget af overvågningsværktøjerne Falco og Tetragon, der anvendes til at identificere sikkerhedsrelaterede anomali på værter og i containere (der er understøttet integration med Kubernetes-baserede infrastrukturer). De nævnte værktøjer bruger opfangning af systemopkald til at analysere sådanne begivenheder som processer, netværksaktivitet og filhåndtering, men tager ikke højde for muligheden for at bruge io_uring-subsystemet til lignende operationer. Størstedelen af de tilgængelige kommercielle sikkerhedsovervågnings- og respons systemer til Linux er også baseret på opfangning af systemopkald.
For preventing the circumvention of network and file activity tracking tools, it is recommended to use the KRSI (Kernel Runtime Security Instrumentation) mechanism instead of intercepting system calls. This mechanism, which was introduced in Linux kernel 5.7, allows attaching BPF programs to any LSM hooks. For example, KRSI at the LSM hook level enables tracking file operations, network access, and process launches, regardless of whether these operations were initiated through specific system calls or via io_uring.
Previously, the io_uring subsystem faced criticism due to regularly emerging serious vulnerabilities. In response to user requests for a simple tool to disable io_uring without recompiling the kernel, Linux kernel 6.6 added the sysctl io_uring_disabled. Google has disabled io_uring by default in ChromeOS, Android, and on its servere, explaining that the dire security situation in io_uring outweighs the benefits of using io_uring to enhance performance.
Kilde: opennet.ru
