Onderzoekers van ARMO hebben gedemonstreerd dat het mogelijk is om rootkits te creƫren zonder gebruik te maken van specifieke systeemoproepen voor het uitvoeren van standaardoperaties, zoals het lezen/schrijven van bestanden en het ontvangen van commando's van een externe server. In plaats van systeemoproepen voor netwerk- en bestandsoperaties wordt er voorgesteld om de interface voor asynchrone invoer/uitvoer, io_uring, te gebruiken, die wordt ondersteund sinds Linux-kernel 5.1.
De kern van de methode is dat in plaats van aparte systeemoproepen voor toegang tot bestanden en het uitvoeren van netwerkoperaties (read/write, recv/send/connect/bind/listen) echter de algemene systeemoproepen io_uring (io_uring_enter, io_uring_setup, io_uring_register, enz.) kunnen worden gebruikt, die niet worden geanalyseerd door standaardtools voor het detecteren van kwaadaardige activiteit. De io_uring-interface ondersteunt ongeveer 60 verschillende operaties. Er wordt gewerkt aan de mogelijkheid om nieuwe processen te starten via io_uring.
Voor de demonstratie van de methode is een prototype rootkit Curing ontwikkeld, die acties uitvoert zoals het ontvangen van commando's van extern de server en het verzenden/wijzigen van bestanden. Tijdens de demonstratie werd een verzoek verzonden naar TCP-poort 8888 van een externe host en werd de inhoud van het bestand ā/etc/shadowā verzonden. Het wordt verondersteld dat, na een succesvolle compromittering van het systeem en het verkrijgen van root-rechten, de aanvaller de rootkit installeert om zijn aanwezigheid op het gehackte systeem te verankeren.
In het uitgevoerde experiment werd de activiteit van de rootkit Curing niet opgemerkt door de monitoringtools Falco en Tetragon, die worden gebruikt voor het detecteren van beveiligingsgerelateerde anomalieƫn op hosts en in containers (integratie met infrastructuren gebaseerd op Kubernetes wordt ondersteund). De genoemde tools maken gebruik van het onderscheppen van systeemoproepen om dergelijke gebeurtenissen te analyseren, zoals het starten van processen, netwerkactiviteit en bestandsbeheer, maar houden geen rekening met het gebruik van de io_uring-subsysteem voor dergelijke operaties. Het grootste deel van de commerciƫle detectie- en responsystemen voor beveiligingsincidenten die beschikbaar zijn voor Linux is ook gebaseerd op het onderscheppen van systeemoproepen.
Om het omzeilen van tools voor het volgen van netwerk- en bestandsactiviteit te voorkomen, wordt aanbevolen om het KRSI-mechanisme (Kernel Runtime Security Instrumentation) te gebruiken in plaats van het onderscheppen van systeemaanroepen. Dit mechanisme, beschikbaar sinds Linux-kernel 5.7, stelt gebruikers in staat om BPF-programma's aan elke LSM-hook te koppelen. Bijvoorbeeld, KRSI op LSM-hookniveau maakt het mogelijk om bestandsoperaties, netwerktoegang en procesuitvoeringen te volgen, ongeacht of deze operaties zijn geĆÆnitieerd via specifieke systeemaanroepen of via io_uring.
Eerder werd de io_uring-subspecie bekritiseerd vanwege regelmatig opduikende ernstige kwetsbaarheden. Als reactie op de wensen van gebruikers die een eenvoudige manier zochten om io_uring uit te schakelen zonder de kernel opnieuw te moeten samenstellen, is er in Linux-kernel 6.6 een sysctl io_uring_disabled toegevoegd. Google heeft io_uring standaard uitgeschakeld in ChromeOS, Android en op zijn servers, waarbij het opmerkt dat de bedroevende veiligheidssituatie met io_uring de voordelen van het gebruik van io_uring voor prestatieverbetering overschaduwt.
Bron: opennet.ru
