LKM Rootkit
Windows平台木马使用各种各样的rootkit功能来实现自身目的已经很长时间了。这些木马之中就有不少是用来进行洪水攻击的(从2006年开始,各种此类木马的源代码已经陆续公开),在之前Botconf 2014时,我们就提交过一份关于此类木马的分析报告:《中国鸡:雄鸡中的战斗鸡》(《中国肉鸡:多平台DDoS僵尸网络》),在这篇报告中,老外详细分析了一款国产木马,墙裂建议阅读。而我们目前分析的这款木马主要功能就是在实现目的的同时隐藏自身的行踪:
木马会创建一个 rs_dev进程来检查rootkit,并且通过ioctl函数来调用这些请求。
请求包含两个参数:一个是rootkit执行任务的值,另一个则是需要隐藏的端口的值。下面是一个木马隐藏TCP连接的实例(注意任务序列值为3):
我们从木马的名称来猜测,极有可能木马的作者是受到开源项目Suterusu(https://github.com/mncoppola/suterusu)的启发,而且还借鉴了部分该项目的代码(进程注入部分)。该项目的描述是这么说的:针对于 Linux 2.6/3.x on x86(_64), and ARM平台的LKM rootkit。关于该项目的的分析可以戳这里:http://poppopret.org/2013/01/07/suterusu-rootkit-inline-kernel-function-hooking-on-x86-and-arm/
C&C通信分析
通信是双向加密的,使用的是相同的XOR加密方式的硬编码方式,秘钥为BB2FA36AAA9541F0。通信过程中,/var/run/sftp.pid文件中包含一个唯一的长度为32位的字符串以识别不同的僵尸机器。下图是一个C&C通信的命令列表,我们可以看到僵尸机器所监听的命令:开始洪水攻击,结束洪水攻击,下载文件,更新升级,发送进程md5值,杀死指定进程
在shell脚本中,C&C服务器列表是存储在一个__remote__变量中的,该木马首先将运行系统的参数发送给C&C服务器,而回复则是以一个命令的形式返回的。命令的报头是一个长度为0x1C的字符串,该字符串存储于Header变量中。第一个命令首先是停止所有攻击,同时下达一个列表中的命令(命令重置)。下图表示了整个命令,其中高亮圈出来的分别是:返回命令总长度(0x102C),任务序列值(0×3,这里对照上面的列表知道是_cmd_start)和洪水任务值(0xF):
小编推荐阅读