dlinject是一款针对Linux进程安全的注入测试工具,在该工具的帮助下,广大研究人员可以在不使用ptrace的情况下,轻松向正在运行的Linux进程中注入一个共享代码库(比如说任意代码)。之所以开发该工具,是因为目前社区有非常多的反ptrace技术,而dlinject的功能并不基于ptrace实现,因此渗透测试的效果会更好。
1、该工具首先会向目标进程发送终止运行的信号,并定位_dl_open()方法。接下来,该工具将会通过/proc/[pid]/syscall获取RIT和RSP;
2、此时,工具将会利用/proc/[pid]/mem对部分堆栈数据 以及需要使用Shellcode重写的代码进行备份;
3、生成主要和次要Shellcode缓冲区;
4、工具会通过写入/proc/[pid]/mem将第一部分Shellcode代码注入到RIP;
5、第一部分Shellcode会做下列三件事情:将常见注册表项注入到堆栈;通过mmap()加载第二部分Shellcode;跳转到第二部分Shellcode;
6、第二部分Shellcode会做下列几件事情:将备份的堆栈信息和程序代码恢复成原始状态;调用_dl_open()以加载指定的代码库,所有的构造器都会正常加载和执行;还原注册表状态和堆栈状态,重新回到SIGSTOP设置的原始状态;
该工具基于Python开发,因此广大研究人员首先需要在本地设备上安装并配置好Python环境。
接下来,我们可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/DavidBuchanan314/dlinject.git
pid:待注入目标进程的进程ID;
/path/to/lib.so:需要注入(加载)的共享库路径,必须和目标进程的cwd关联;
-h, --help:显示工具帮助信息和退出;
--stopmethod {sigstop,cgroup_freeze,none}:设置在Shellcode执行之前终止目标进程,设置SIGSTOP(默认)可能会有一些副作用,而cgroup_freeze则需要root权限;
https://asciinema.org/a/290906
本项目的开发与发布遵循MIT开源许可证协议。
https://github.com/DavidBuchanan314/dlinject
https://github.com/AonCyberLabs/Cexigua
https://github.com/gaffe23/linux-inject
https://www.aldeid.com/wiki/Ptrace-anti-debugging
精彩推荐