Rootkit“偷天换日”大法:你敲的ls其实是黑客的刀
文章描述了团队在处理恶意远控地址应急取证时发现的Rootkit问题。通过分析netstat与busybox结果不一致的现象,排查库文件劫持、DNS告警及文件完整性后,确认恶意进程隐藏于替换的netstat文件中,并通过MD5校验和rpm -Va检测定位到被替换的文件及恶意域名连接。最终通过替换netstat文件清除恶意进程。 2025-10-5 00:30:0 Author: www.freebuf.com(查看原文) 阅读量:11 收藏

以前团队小伙伴在给某个客户做常规的应急取证,事件就是连接到恶意远控地址:wio2lo1n3.pw,这种事情很常规,处置起来应该问题不大: 图片

但是在实际处置过程中却发现还是有些需要深入分析与处置的,一个表现是通过常规的netstat命令和使用busybox看到的结果不一致,初步分析使用busybox命令可以看到有java进程相关的连接,但是单纯使用netstat命令看不到: 图片

但是使用busybox可以看到,怀疑被植入了Rootkit: 图片

2.1 库文件劫持排查

其实现的时候主要是劫持两个地方:

环境变量:$LD_PRELOAD配置文件:/etc/ld.so.preload

所以需要对这两处进行排查,但是都没有排查出来,所以排除了库文件劫持的可能性: 图片

2.2 DNS告警分析

前面我们看到相关的告警如下,是一个DNS的告警,并且只有查询,无响应: 图片

DNS的告警,我们的目的是想捕捉到相关的进程从而进行处置,但是DNS流量是基于UDP的,UDP非同于TCP,其是无状态、无连接的,这样的话是无法通过netstat来定位相关的PID的,相关UDP的连接信息如下: 图片

针对这种场景,这里面有个比较不错的小思路:

受害机器一般在DNS解析成功以后都会使用TCP的方式进行连接其C2地址,这样我们就可以手工指定恶意域名的C2,然后再去捕捉TCP相关的连接就可以定位到相关的进程了

这种方法一直在使用,虽然小巧但是很实用,具体实现如下:

直接在受控主机的/etc/hosts文件中配置静态IP(这里面为团队小伙伴的VPS地址),这样就绕过了DNS的动态查询在本地写个循环来过滤相关的TCP连接:whiletrue;do netstat -anltp | grep x.x.x.x;done另外,如果为Windows系统,可以使用下面的命令来查找:for /l %a in (0,0,1) do netstat -anto | findstr x.x.x.x

具体实现后的效果如下所示: 图片

这样就定位到了本地的进程PID和进程名,到这里面就好办了,直接使用下面命令来清除相关的进程:

kill -9 7294

2.3 文件完整性分析

前面我们看到相关的netstat命令和busybox netstat命令看到的不一致,前面排除了库文件劫持的可能,后面就两种可能性了:

命令替换Ring 0或Ring 3级别的Rootkit

如果是Rootkit那就非常麻烦,这种对抗目前还没有比较好的产品来检测,大多数是依赖于安全专家的能力来检测;如果是命令替换的话是非常好检测的,这里面有两个实现的方式:

使用MD5Sum来针对关键或可疑的文件进行校验,并将MD5放到沙箱中检测使用rpm -Va来检测,基本质上也是对比文件的MD5值

关于rpm -Va的检测,其本身是有个MD5的库,校验的时候会把取本地文件的MD5值,然后和库里面的值进行校验,如果有改变则判断为变化。相关输出参数的含义如下:

S 表示文件长度发生了变化M 表示文件的访问权限或文件类型发生了变化5 表示MD5校验和发生了变化D 表示设备节点的属性发生了变化L 表示文件的符号链接发生了变化U 表示文件/子目录/ 设备节点的owner 发生了变化G 表示文件/子目录/ 设备节点的group 发生了变化T 表示文件最后一次的修改时间是发生了变化

这里面为了方便,我们直接使用rpm -Va来检测,检测后的结果如下所示: 图片

可以看到很多文件的MD5值已经发生了变化,为了定位到源文件,我们也把部分被替换的文件的MD5值取了下来,如下所示:

e05747461650ae6688fe0ed2b1104f0e  /bin/psd22ab8c48feb03baccb460b7842140a4  /usr/bin/tope05747461650ae6688fe0ed2b1104f0e  /usr/sbin/lsof7e78010c6505d3009bfc36e1009c31c3  /usr/sbin/ss7e78010c6505d3009bfc36e1009c31c3  /bin/netstat

3.1 netstat

3.1.1 文件替换

这个就是我们前面看到的恶意文件,这个是把/usr/bin/netstat替换掉:

7e78010c6505d3009bfc36e1009c31c3

图片

通过分析,发现其存在修改命令的行为: 图片

3.1.2 开启端口/服务

图片

3.1.3 行为隐藏

图片

3.1.4 网络连接

发现有DNS解析,解析的域名为前面监测到的域名: 图片

e05747461650ae6688fe0ed2b1104f0ed22ab8c48feb03baccb460b7842140a4e05747461650ae6688fe0ed2b1104f0e7e78010c6505d3009bfc36e1009c31c3

文章来源: https://www.freebuf.com/articles/451574.html
如有侵权请联系:admin#unsafe.sh