Forscher des Unternehmens ARMO haben die Möglichkeit demonstriert, Rootkits zu erstellen, die keine spezifischen Systemaufrufe zur Ausführung typischer Operationen wie dem Lesen/Schreiben von Dateien und dem Empfangen von Befehlen von einem externen Server nutzen. Statt spezifischer Systemaufrufe für Netzwerk- und Dateioperationen wird vorgeschlagen, die Schnittstelle für asynchrone Eingabe/Ausgabe io_uring zu verwenden, die seit dem Linux-Kernel 5.1 unterstützt wird.
Der Kern dieser Methode besteht darin, dass anstelle separater Systemaufrufe für den Zugriff auf Dateien und die Durchführung von Netzwerkoperationen (read/write, recv/send/connect/bind/listen) allgemeine Systemaufrufe von io_uring (io_uring_enter, io_uring_setup, io_uring_register usw.) verwendet werden können, die von typischen Werkzeugen zur Erkennung bösartiger Aktivitäten nicht analysiert werden. Die io_uring-Schnittstelle unterstützt etwa 60 verschiedene Operationen. In der Entwicklung befindet sich eine Möglichkeit, die es erlaubt, neue Prozesse über io_uring zu starten.
Zur Demonstration der Funktionsweise der Methode wurde ein Prototyp des Rootkits Curing vorbereitet, das solche Aktionen ausführt wie das Empfangen von Befehlen von externen Server und das Übertragen/Ändern von Dateien. In der Demonstration wurde eine Anfrage an den TCP-Port 8888 eines externen Hosts gesendet sowie der Inhalt der Datei „/etc/shadow“ übermittelt. Es wird angenommen, dass der Angreifer nach erfolgreicher Kompromittierung des Systems und Erlangung der Root-Rechte das Rootkit installiert, um seine Anwesenheit im gehackten System zu festigen.
Im durchgeführten Experiment wurde die Aktivität des Rootkits Curing von den Überwachungstools Falco und Tetragon, die zur Erkennung sicherheitsrelevanter Anomalien auf Hosts und in Containern verwendet werden (die Integration mit Kubernetes-basierten Infrastrukturen wird unterstützt), nicht bemerkt. Diese Werkzeuge nutzen das Abfangen von Systemaufrufen zur Analyse solcher Ereignisse wie der Prozessausführung, Netzwerkaktivität und Dateioperationen, berücksichtigen jedoch nicht die Möglichkeit, die io_uring-Subsystem zur Durchführung ähnlicher Operationen zu verwenden. Der Großteil der für Linux verfügbaren kommerziellen Systeme zur Erkennung und Reaktion auf Sicherheitsvorfälle basiert ebenfalls auf dem Abfangen von Systemaufrufen.
Um das Umgehen von Tools zur Überwachung der Netzwerk- und Dateiaktivität auszuschließen, wird empfohlen, anstelle der Abfangung von Systemaufrufen den KRSI-Mechanismus (Kernel Runtime Security Instrumentation) zu verwenden, der in Linux-Kernel 5.7 eingeführt wurde und es ermöglicht, BPF-Programme an beliebige LSM-Hooks anzuhängen. Zum Beispiel ermöglicht KRSI auf der Ebene von LSM-Hooks die Überwachung von Dateioperationen, Netzwerkzugriff und Prozessstart, unabhängig davon, ob die Operationen über spezifische Systemaufrufe oder über io_uring initiiert wurden.
Früher war das io_uring-Untersystem wegen regelmäßig auftretender schwerer Sicherheitsanfälligkeiten in der Kritik. Als Antwort auf die Wünsche der Benutzer, die ein einfaches Tool zum Deaktivieren von io_uring ohne Neukompilierung des Kernels wünschten, wurde im Linux-Kernel 6.6 der sysctl io_uring_disabled hinzugefügt. Google hat io_uring in ChromeOS, Android und eigenen Systemen standardmäßig deaktiviert. Servern, und erklärte, dass die kritische Sicherheitslage in io_uring die Vorteile der Nutzung von io_uring zur Leistungssteigerung überwiegt.
Quelle: opennet.ru
