通过从proc文件系统入手,来检测可能的ptrace进程注入
探究
根据man proc
的结果,在 /proc/[pid]/status
的字段描述有这么一段
* TracerPid: PID of process tracing this process (0 if not being traced).
说明可以从进程的status
文件这个字段得到该进程的跟踪进程。
看一下对进程使用ptrace
是否会设置这个字段。
由于gdb
是基于ptrace
实现的,可以使用gdb
来检查一下效果。
可以下载
gdb
代码搜索ptrace
验证
选用oseec-remoted
进程做例子
[root@localhost code]# ps aux|grep remoted
ossecr 2238 0.1 0.3 1254156 14188 ? Sl Aug09 2:27 /var/ossec/bin/ossec-remoted
它的pid
是2238。可以看到它的TracerPid
的值是0
[root@localhost code]# grep "TracerPid" /proc/2238/status
TracerPid: 0
在另外一个窗口使用gdb
附加到2238进程
[root@localhost buckxu]# gdb -p 2238 -q
Attaching to process 2238
[New LWP 2265]
这时,它的TracerPid
的值变了
[root@localhost code]# grep "TracerPid" /proc/2238/status
TracerPid: 18669
看一下18669这个进程是哪个
[root@localhost code]# cat /proc/18669/cmdline
gdb-p2238-q
可见,TracerPid
字段确实可以知道哪个进程对另外一个进程使用ptrace
。
那么,接下来的检测的思路就非常简单了。
检测思路
对/proc
下的进程进行扫描:
-
读取进程的 status
文件TracerPid
字段 -
如果字段为0,则跳过,否则就看 /proc/<TracerPid>/cmdline
,获取程序信息 -
把程序信息上报
分析端获取到上报数据后,就对照白名单,如果使用ptrace
的程序不在白名单,那么就有可能是可疑程序,需要进一步分析了。
扫描的程序需要静态编译,使用
-static
,因为这样扫描出那些使用/etc/ld.so.preload
来隐藏自身的进程。
缺点
一般ptrace
注入过程时间非常短,而遍历/proc
的时间会比较长,往往会错过那些快速注入的恶意进程。而把扫描频次调高,又会引起对系统性能的占用。
暗号:94c89
原文始发于微信公众号(奶牛安全):检测linux进程注入1:proc方式
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论