一个全面的 Linux 进程注入技术合集,演示了向运行中进程注入代码的各种方法。这些示例仅供教育、安全研究以及理解底层 Linux 进程操作之用。
进程注入是一种在另一个进程的上下文中运行代码的技术。虽然通常与恶意软件相关联,但这些技术也具有以下重要价值:
目录:ptrace/
经典的进程注入方法,使用 ptrace() 系统调用直接将 shellcode 写入进程内存并重定向执行流。
主要特性:
适用场景:理解底层进程控制和直接代码注入
目录:ld_preload/
利用 LD_PRELOAD 环境变量在其他任何库之前加载恶意库,从而进行函数插入。
主要特性:
适用场景:函数挂钩、API 监控、行为修改
目录:proc_mem/
通过 /proc/<pid>/mem 文件系统接口直接写入内存,并结合 ptrace 进行进程控制。
主要特性:
适用场景:快速批量内存注入,绕过传统 ptrace 的局限性
目录:dlopen_inject/
一种复杂的技术,通过劫持执行流调用 dlopen(),强制运行中的进程加载共享库。
主要特性:
适用场景:高级持久注入、运行时库操作
# 构建 ptrace 注入
cd ptrace && make all
# 构建 LD_PRELOAD 注入
cd ../ld_preload && make all
# 构建 /proc/mem 注入
cd ../proc_mem && make all
# 构建 dlopen 注入
cd ../dlopen_inject && make all
每种技术都遵循类似模式:
启动目标进程:
cd <technique>/victim-process
./sample
记下显示的 PID
执行注入:
cd <technique>
sudo ./<injector> <PID> [additional args]
观察结果:检查目标进程输出中注入代码的执行情况
有关各技术的具体说明,请参阅各自的 README 文件。
Yama ptrace_scope:将 ptrace 限制为特权用户
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
SELinux/AppArmor:强制访问控制
监控:使用 auditd 记录 ptrace 和进程注入尝试
auditctl -a exit,always -F arch=b64 -S ptrace
运行时完整性检查:定期验证进程内存
代码签名:验证库签名
/proc/<pid>/maps 中是否存在意外的内存区域或库lsof、pmap 等工具以及进程监控工具重要提示:这些技术只能在授权环境中使用:
本仓库仅用于教育和研究目的。 作者不对这些技术的滥用负责。在对任何系统进行测试前,务必获得适当的授权。
权限被拒绝错误:
sudo 运行/proc/sys/kernel/yama/ptrace_scope注入静默失败:
段错误:
有关具体技术的故障排查指导,请参阅各技术的 README。
欢迎贡献!可能的补充内容:
man 2 ptrace - 进程跟踪系统调用man 5 proc - /proc 文件系统文档man 3 dlopen - 动态库加载详见 LICENSE.txt。
本软件“按原样”提供,仅供教育目的使用。请负责任且合乎道德地使用。在对你不拥有的任何系统上测试安全技术之前,务必获得适当的授权。
| 技术 | 复杂度 | 隐蔽性 | 持久性 | 速度 | 适用于运行中进程 |
|---|
| ptrace | 中等 | 低 | 否 | 中等 | 是 |
| LD_PRELOAD | 低 | 非常低 | 否 | 快 | 否 |
| /proc/mem | 中等 | 低 | 否 | 快 | 是 |
| dlopen | 高 | 中等 | 是 | 中等 | 是 |