Výskumníci z firmy ARMO predviedli možnosť vytvárania rootkitov, ktoré nevyžadujú špecifické systémové volania na vykonávanie bežných operácií, ako je čítanie/zápis súborov a prijímanie príkazov z externého servera. Namiesto systémových volaní na vykonávanie sieťových a súborových operácií je navrhnuté používať rozhranie asymetrického vstupu/výstupu io_uring, podporované od jadra Linux 5.1.
Podstata metódy spočíva v tom, že namiesto samostatných systémových volaní na prístup k súborom a vykonávanie sieťových operácií (read/write, recv/send/connect/bind/listen) je možné použiť spoločné systémové volania io_uring (io_uring_enter, io_uring_setup, io_uring_register a pod.), ktoré nie sú analyzované bežnými nástrojmi na zisťovanie škodlivých aktivít. Rozhranie io_uring podporuje približne 60 rôznych operácií. Na vývoji je funkcia, ktorá umožňuje spúšťanie nových procesov prostredníctvom io_uring.
Na demonštráciu fungovania metódy bol pripravený prototyp rootkitu Curing, ktorý vykonáva také akcie, ako je prijímanie príkazov z externého servera a odosielanie/zmena súborov. V demonštrácii bola použitá požiadavka na TCP port 8888 externého hostiteľa a odoslanie obsahu súboru „/etc/shadow“. Predpokladá sa, že po úspešnej kompromitácii systému a získaní práv root útočník nainštaluje rootkit na zabezpečenie svojej prítomnosti v napadnutom systéme.
V uskutočnenom experimente bola činnosť rootkitu Curing pre nástroje na sledovanie Falco a Tetragon, používané na identifikáciu bezpečnostných anomálií na hostiteľoch a v kontajneroch (podporuje integráciu s infraštruktúrou založenou na Kubernetes), nezaznamenaná. Tieto nástroje využívajú zachytávanie systémových volaní na analýzu takých udalostí, ako je spúšťanie procesov, sieťová aktivita a práca so súbormi, ale neberú do úvahy možnosť využitia subsystému io_uring na takéto operácie. Väčšina dostupných komerčných systémov na Linuxe na detekciu a reakciu na bezpečnostné incidenty sa tiež zakladá na zachytávaní systémových volaní.
Na vylúčenie obchádzania nástrojov na sledovanie sieťovej a súborovej aktivity sa namiesto zachytávania systémových volaní odporúča použiť mechanizmus KRSI (Kernel Runtime Security Instrumentation), ktorý vznikol v jadre Linux 5.7 a umožňuje pripojiť BPF programy k akýmkoľvek LSM háčikom. Napríklad, KRSI na úrovni LSM háčikov umožňuje sledovať operácie so súbormi, sieťový prístup a spúšťanie procesov, bez ohľadu na to, či sú tieto operácie iniciované prostredníctvom špecifických systémových volaní alebo cez io_uring.
Predtým bola subsystém io_uring objektom kritiky kvôli pravidelne sa objavujúcim závažným zraniteľnostiam. V reakcii na želania užívateľov, ktorí si priali jednoduchý nástroj na vypnutie io_uring bez prekompilovania jadra, bola do jadra Linux 6.6 pridaná sysctl io_uring_disabled. Spoločnosť Google predvolene vypnula io_uring v ChromeOS, Android a vo svojich serveroch, vysvetľujúc, že zlý stav bezpečnosti v io_uring prevažuje nad výhodami použitia io_uring na zlepšenie výkonu.
Zdroj: opennet.ru
