Forscher von ARMO haben gezeigt, dass es möglich ist, Rootkits zu erstellen, die keine spezifischen Systemaufrufe für die Durchführung typischer Operationen wie Datei-Lesen/Schreiben und den Empfang von Befehlen von einem externen Server verwenden. Stattdessen wird vorgeschlagen, für Netzwerk- und Dateioperationen die asynchrone Eingabe-/Ausgabeoberfläche io_uring zu verwenden, die seit dem Linux-Kernel 5.1 unterstützt wird.
Der Kern der Methode besteht darin, dass anstelle von einzelnen Systemaufrufen 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. Es wird an einer Möglichkeit gearbeitet, die es erlaubt, neue Prozesse über io_uring zu starten.
Zur Demonstration der Methodik wurde ein Prototyp des Rootkits Curing vorbereitet, das solche Aktionen ausführt wie den Empfang von Befehlen von externen Servern. Server und Übertragung/Änderung von Dateien. Bei der Demonstration wurde eine Anfrage an den TCP-Port 8888 eines externen Hosts gesendet und der Inhalt der Datei „/etc/shadow“ übertragen. Es wird angenommen, dass der Angreifer nach erfolgreicher Kompromittierung des Systems und Erlangung von Root-Rechten einen Rootkit installiert, um seine Präsenz im gehackten System zu festigen.
Im durchgeführten Experiment wurde die Aktivität des Curing-Rookits von den Überwachungstools Falco und Tetragon, die zur Erkennung sicherheitsrelevanter Anomalien auf Hosts und in Containern verwendet werden (unterstützt die Integration mit Kubernetes-basierter Infrastruktur), nicht bemerkt. Diese Tools verwenden die Abfangung von Systemaufrufen zur Analyse solcher Ereignisse wie dem Start von Prozessen, Netzwerkaktivitäten und Dateioperationen, berücksichtigen jedoch nicht die Möglichkeit, das io_uring-Subsystem für solche Operationen zu verwenden. Der Großteil der für Linux verfügbaren kommerziellen Systeme zur Erkennung und Reaktion auf Sicherheitsvorfälle basiert ebenfalls auf der Abfangung von Systemaufrufen.
Um zu vermeiden, dass die Tracking-Tools für Netzwerk- und Dateiaktivitäten umgangen werden, wird empfohlen, anstelle der Abfangung von Systemaufrufen den Mechanismus KRSI (Kernel Runtime Security Instrumentation) zu verwenden, der mit dem Linux-Kernel 5.7 eingeführt wurde und es ermöglicht, BPF-Programme an beliebige LSM-Hooks anzuhängen. Beispielsweise bietet KRSI auf LSM-Hook-Ebene die Möglichkeit, Dateioperationen, Netzwerkzugriffe und die Ausführung von Prozessen zu überwachen, unabhängig davon, ob diese Operationen über spezifische Systemaufrufe oder über io_uring initiiert werden.
Zuvor war das io_uring-Subsystem aufgrund regelmäßig auftretender schwerer Sicherheitsanfälligkeiten in der Kritik. Als Antwort auf die Wünsche der Benutzer, die ein einfaches Werkzeug zur Deaktivierung von io_uring ohne Neukompilierung des Kernels wünschten, wurde im Linux-Kernel 6.6 das sysctl io_uring_disabled hinzugefügt. Google hat io_uring standardmäßig in ChromeOS, Android und auf seinen Servern, deaktiviert und erklärt, dass die traurige Sicherheitslage in io_uring die Vorteile der Verwendung von io_uring zur Leistungssteigerung überwiegt.
Quelle: opennet.ru
