Prototyp rootkitu pro Linux, který využívá io_uring k obcházení analytiků systémových volání.

Výzkumníci z firmy ARMO demonstrovali možnost vytváření rootkitů, které nevyužívají specifické systémové volání pro provádění obvyklých operací, jako je čtení/zapisování souborů a přijetí příkazů z externího serveru. Místo systémových volání pro provádění síťových a souborových operací bylo navrženo využití rozhraní asynchronního vstupu/výstupu io_uring, které je podporováno od jádra Linux 5.1.

Podstata metody spočívá v tom, že místo samostatných systémových volání pro přístup k souborům a provádění síťových operací (read/write, recv/send/connect/bind/listen) lze použít obecné systémové volání io_uring (io_uring_enter, io_uring_setup, io_uring_register atd.), které nejsou analyzována běžnými nástroji pro zjišťování škodlivé aktivity. Rozhraní io_uring podporuje přibližně 60 různých operací. V současnosti se vyvíjí možnost, která umožňuje spouštět nové procesy prostřednictvím io_uring.

Pro demonstraci funkce metody byl připraven prototyp rootkitu Curing, který provádí takové akce, jako je přijímání příkazů z externího serveru a přenos/změna souborů. V demonstraci byl použit požadavek na TCP port 8888 externího hostitele a odeslání obsahu souboru „/etc/shadow“. Předpokládá se, že po úspěšné kompromitaci systému a získání práv root útočník instaluje rootkit, aby potvrdil svou přítomnost na napadeném systému.

V provedeném experimentu aktivita rootkitu Curing zůstala bez povšimnutí nástroji monitorování Falco a Tetragon, které se používají k určení souvisejících bezpečnostních anomálií na hostitelích a v kontejnerech (podporována je integrace s infrastrukturou na bázi Kubernetes). Uvedené nástroje využívají zachycování systémových volání pro analýzu takových událostí, jako je spouštění procesů, síťová aktivita a práce se soubory, ale nezohledňují možnost využití subsystému io_uring pro podobné operace. Většina dostupných komerčních systémů pro Linux pro detekci a reakci na bezpečnostní incidenty také vychází ze zachycování systémových volání.

Pro vyloučení obcházení nástrojů pro sledování síťové a souborové aktivity se doporučuje použít mechanismus KRSI (Kernel Runtime Security Instrumentation), který se objevil v jádře Linux 5.7 a umožňuje připojení BPF programů k jakýmkoli LSM hookům. Například KRSI na úrovni LSM hooků umožňuje sledování operací se soubory, síťového přístupu a spouštění procesů, bez ohledu na to, zda jsou tyto operace iniciovány prostřednictvím specifických systémových volání nebo pomocí io_uring.

Dříve byla podsystem io_uring předmětem kritiky kvůli pravidelně se objevujícím vážným zranitelnostem. V reakci na přání uživatelů, kteří chtěli jednoduchý nástroj pro vypnutí io_uring bez nutnosti přeinstalace jádra, byl do jádra Linux 6.6 přidán sysctl io_uring_disabled. Společnost Google ve výchozím nastavení deaktivovala io_uring v ChromeOS, Androidu a na svých serverech, vysvětlující, že neuspokojivá situace s bezpečností v io_uring převažuje nad výhodami používání io_uring k zvýšení výkonu.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster