Singularity – Wie moderne Linux-Rootkits funktionieren und warum sie so schwer zu erkennen sind
Stellen Sie sich folgendes Szenario vor: Sie melden sich auf einem Server an, führen ps aux aus, und alles sieht perfekt normal aus. Sie überprüfen Netzwerkverbindungen mit ss – sauber. Sie prüfen die Logs dmesg – keine verdächtigen Einträge. Aber in diesem Moment läuft ein versteckter Root-Prozess im System, der Ihre Aktionen abfängt und Daten direkt im Kernel-Speicher filtert.
Klingt wie aus Hacker-Filmen? In der Realität ist dies die Gegenwart moderner LKM-Rootkits (Linux Kernel Modules). Heute werden wir uns das Projekt Singularity vom Entwickler MatheuZSecurity ansehen – ein fortschrittliches Tool zur Erforschung von Stealth-Fähigkeiten in Linux 6.x-Kernels.
Was ist Singularity und warum braucht ein Forscher es?
Singularity ist nicht nur ein weiteres Spielzeug zum Ändern der Benutzer-UID. Es ist ein vollwertiges Forschungsprojekt, das entwickelt wurde, um die Grenzen moderner Sicherheitssysteme zu testen. Der Autor stellte sich die Frage: „Wie weit kann ein Rootkit gehen, wenn es bereits in den Kernel eingedrungen ist?“
Das Projekt zielt auf moderne Kernel (6.x-Branch) ab und nutzt ftrace-Infrastruktur für Systemaufruf-Interception. Dies macht es äußerst interessant für Systemprogrammierer und Spezialisten für Informationssicherheit (DFIR), da es das Umgehen von Sicherheitsgiganten wie eBPF (Falco, Tracee) und LKRG (Linux Kernel Runtime Guard) demonstriert.
Hauptfunktionen: Die Kunst, unsichtbar zu bleiben
Singularity ist ein echtes Schweizer Taschenmesser für verdeckte Operationen. Lassen Sie uns die beeindruckendsten Fähigkeiten durchgehen.
1. Geisterhafte Tarnung
Das Rootkit versteckt nicht nur Dateien oder Prozesse – es tut dies systematisch:
- Prozesse: Jede PID kann für
ps,topund sogar/procunsichtbar gemacht werden. Darüber hinaus verfolgt und versteckt Singularity automatisch alle Kindprozesse. - Dateien: Das Verstecken funktioniert nach Mustern. Wenn Sie ein Verzeichnis mit einem „geheimen“ Namen erstellt haben, verschwindet es aus der Ausgabe von
lsundfind, obwohl Sie weiterhin auf die Dateien darin zugreifen können, wenn Sie den Pfad kennen. - Netzwerk: Verbindungen auf bestimmten Ports (z.B. Ihre Reverse Shell) werden weder von
netstatnoch vontcpdumpgesehen.
2. Umgehung von eBPF und modernen EDR-Lösungen
Dies ist wahrscheinlich der technisch komplexeste Teil. Die meisten modernen Überwachungssysteme (wie Falco) verlassen sich auf eBPF für Echtzeit-Ereignisverfolgung. Singularity blockiert eBPF nicht (das wäre zu auffällig), sondern filtert sorgfältig die Daten, die eBPF-Programme an den Benutzerraum übertragen. Es ersetzt Ergebnisse in Buffern und macht versteckte Ressourcen für die überwachenden „Augen“ unsichtbar.
3. Berechtigungsmanipulation über Signale
Komplexe Exploits vergessen. Singularity implementiert einen eleganten Mechanismus:
kill -59 $$
Das Senden eines bestimmten Signals (in diesem Fall 59) an den aktuellen Prozess erhöht seine Berechtigungen sofort auf Root. Einfach, effektiv und in den falschen Händen sehr gefährlich.
4. Kampf den Forensikern (Forensik-Umgehung)
Das Projekt kann sogar Low-Level-Disk-Analyse-Tools täuschen, wie z.B. debugfs. Es fängt Lese-/Schreib-Systemaufrufe ab und „im Flug“ löscht es Erwähnungen von sich selbst aus Ausgabepuffern und ersetzt sie durch Leerzeichen. Dies ermöglicht die Aufrechterhaltung der Dateisystem-Integrität (Prüfsummen brechen nicht), während die Präsenz von bösartigem Code verborgen bleibt.
Wie funktioniert es intern?
Singularitys Architektur basiert auf einem modularen System. Im Repository finden Sie separate Dateien für jede Aufgabe: hiding_tcp.c für Netzwerk, bpf_hook.c für eBPF-Gegenmaßnahmen, lkrg_bypass.c für Kernel-Schutz-Umgehung.
Die Logging-Implementierung ist interessant. Das Rootkit fängt die do_syslog-Funktion ab und ermöglicht so das Filtern des Kernel-Ring-Puffers. Wenn das System versucht, eine Meldung über Kernel-Taint durch das Laden eines Drittanbieter-Moduls auszugeben, schneidet Singularity diese Zeichenkette einfach heraus.
Praktischer Wert für Entwickler
Warum sollte ein Entwickler Rootkit-Code studieren?
- Verständnis der Linux-Interna: Der Projektcode ist ein ausgezeichnetes Lehrbuch für die Arbeit mit Systemaufrufen,
task_struct-Strukturen, dem Netzwerk-Stack und demftrace-Subsystem. - Entwicklung von Sicherheitssystemen: Um eine starke Festung zu bauen, muss man wissen, wie Belagerungswaffen funktionieren. Durch das Studium von eBPF-Umgehungsmethoden in Singularity können Sie Ihre Regeln in Falco oder Tracee besser konfigurieren.
- Kernel-Entwicklung: Dies ist ein praxisnahes Beispiel für das Schreiben von LKM (Linux Kernel Modules) für moderne Kernel-Versionen unter Berücksichtigung von API-Änderungen.
Sicherheitsvorkehrungen
Wichtig: Singularity ist ein mächtiges Tool, das sich nach dem Laden selbst versteckt (lsmod zeigt es nicht an). Es hat keine Entladefunktion, da dies einen zusätzlichen Erkennungsvektor schaffen würde. Um es loszuwerden, ist ein Neustart erforderlich.
Der Autor empfiehlt nachdrücklich, das Projekt nur in virtuellen Maschinen zu testen. Und natürlich, es ausschließlich für Bildungs- und Forschungszwecke zu verwenden.
Singularity ist ein beeindruckendes Beispiel dafür, wie ausgereift Linux-Stealth-Methoden geworden sind. Das Projekt zeigt, dass selbst die modernsten Sicherheitstools kein Allheilmittel sind, wenn der Angreifer auf Kernel-Ebene einen Fuß gefasst hat.
Für diejenigen, die tiefer eintauchen möchten, empfehle ich, sich include/core.h anzusehen und zu sehen, wie die Hooks implementiert sind. Diese Lektüre könnte fesselnder sein als jeder Krimi.
Testen Sie es (in einer VM!): GitHub MatheuZSecurity/Singularity
Übrigens, was denken Sie – ist die Verwendung von eBPF für Sicherheit ein aussichtsloser Weg, wenn Rootkits gelernt haben, es zu umgehen? Teilen Sie Ihre Gedanken in den Kommentaren!
Ähnliche Projekte