“神起”僵尸网络的诱捕与反击(上)

2017-06-30 19:55:55 罐罐 水滴安全实验室

2017年5月中旬,蜜罐系统监测到了一起攻击事件,引起了我们的注意,小伙伴们迅速跟进分析,并通过技术手段拿下黑客控制端服务器,发现黑客使用了一款名为“神起ddos集群”的软件,控制了3000+的僵尸网络肉鸡,经分析发现该僵尸网络主要利用路由器、摄像头等设备,且规模数量在持续增加。

下面来看看我们是如何一步步发现并溯源该僵尸网络的。

1    蜜罐告警

首先,2017年5月16日15:47分收到蜜罐一条告警信息,发现有黑客入侵了我们部署的蜜罐系统,日志如下: 

图 1.1 蜜罐日志


通过日志可以看到,黑客入侵后执行的动作很简单,从远程服务器下载远控木马后执行。通过分析,发现该服务器是用HFS服务搭建,有三个样本,其中,样本666是针对ARM架构设备的,下载量是3000+;样本s360,s361是针对x86架构的ELF(linux系统)文件,下载量各在200+。


图 1.2 HFS服务器


2    攻击反制


通过技术手段反渗透到黑客HFS服务器(具体细节不做透露,你懂的),获取了进一步的信息,以下截图为黑客服务器桌面,发现黑客使用的是腾讯微云主机,该主机不仅是下载服务器而且是远程控制主机。


图 2.1 黑客服务器桌面

3    黑客行为剖析

拿下黑客服务器后,服务器上的一些文件引起了我们的注意,一起来看看这个“专业”的小黑客是如何一步一步控制属于自己的僵尸网络的。

3.1     信息收集

图 3.1.1 IP段收集


从服务器上的文件来看,小黑客还是做了很多准备工作的,包括整理各种活跃ip端,比如开放3306、1433端口的活跃ip:

 

图 3.1.2 活跃IP段


黑客不仅仅收集了上述IP数据,在“珍藏IP段“这个文件夹里面发现了更多(包含国内各个省份的IP段):


图 3.1.3 省份IP段


IP信息收集比较广泛,不仅有国内各个省份包括IDC机房的IP段,还有国外多个国家、地区的IP段:


图 3.1.4 国外服务器IP段


图 3.1.5 国外IP段


3.2     密码字典

有了上面的IP信息收集后,黑客还需要一个强大的字典来完成后面的攻击行为,在服务器上找到了这些密码字典:

图 3.2.1 密码字典


发现这些字典还是很具有针对性的,有通用字典,有专门针对数据库、操作系统的字典,还有专门针对国外服务器的字典:


图 3.2.2字典示例

3.3     攻击工具

“工欲善其事必先利其器”,有了前面两步的信息之后,就需要有一个高效的自动化攻击工具去完成爆破和植马,该黑客使用了下面这款工具:


图 3.3.1 SSH爆破工具

下图是爆破成功后执行的命令,可以看到跟我们蜜罐捕获到的日志是一致的:

图 3.3.2 执行命令


看到这里,你可能会想,这只是一个简单的SSH爆破,真的能有什么效果吗?看一看黑客正在执行的扫描任务便知道了:


图 3.3.3 实时日志


通过实时的日志可以看到,黑客对某一个网段(10000左右数量的主机)进行爆破,目前扫描进度为51.98%,入侵成功的数量有64个,之前也看到了黑客整理的活跃IP段,如果他的时间足够多,入侵成功的主机数量可想而知,接下来的发现也进一步验证了这一结论。


4    “神起“僵尸网络


在服务器上发现了僵尸网络的控制端软件“神起ddos集群”,截图如下:


图 4.1神起ddos集群

软件最上方的区域展示僵尸网络被控端操作系统信息,包括IP地址、操作系统类型、CPU信息、内存信息、网速等;左下角是设置发起DDoS攻击的目标信息,包括IP地址、端口、线程数、攻击包大小、是否伪造源IP、采用哪种攻击模式等;右下角是该僵尸网络支持的攻击模式配置,包括SYN_Flood、UDP_Flood、TCP_Flood、UDP碎片、CC攻击、蜗牛(慢速攻击)等。

经过一个多月的跟踪,发现该僵尸网络的规模增长迅速,由最初的400+被控主机增长到3000+,下面我们将对该僵尸网络进行进一步的分析。

4.1     “神起“僵尸网络规模

对获取的僵尸网络ip进行统计,发现受控端ip主要分布在欧洲、亚洲

图 4.1.1 受控IP全球分布

同时对分布在国内的僵尸网络ip进行统计,发现受控主机主要分布在北京、广东、浙江、上海

图 4.1.2 受控IP国内分布


4.2     “神起ddos集群”逆向分析

接下来对“神起ddos集群”软件进行分析,从逆向工程的角度分析被控端木马的行为以及被控端木马是如何与主控端进行通信的。

4.2.1  行为分析

被控端木马的执行流程如下图所示:

图 4.2 木马执行流程

接下来将对每一个步骤进行分析。

4.2.1.1 添加自启动项

autoreboot函数中,执行如下命令:


图 4.2.1 添加自启动项


其中dir是僵尸程序所在的文件夹路径,程序首先将rc.local中包含exit、Linux2.9reboot和空行都删除掉,然后加入/dir/Linux2.9 reboot和/dir/Linux2.9 rebootstart,以图下次启动该程序依然能运行起来。

4.2.1.2 生成子进程

生成子进程,然后主进程退出,可以有点反调试作用。

4.2.1.3  创建线程

图 4.2.2 启动后门线程


线程SendInfo:向后门183.*.*.199和主控端发送感染主机信息。

线程backdoorA:与183.*.*.199建立连接,并接收其控制指令。

线程backdoorM:尝试和一个域名建立连接,该域名加密处理过,但是在调试过程中程序并没有成功解析出这个加密后的域名。SendInfo是专门用来发送心跳包的线程,避免和主控端断开连接。

4.2.1.4 初始化ip池

后门线程和发送信息的线程生成后,程序会初始化一个ip池,随机生成配对的ip和port信息,保存到相应的数组里面。当主控端要求进行伪造源ip进行攻击的时候,伪造的ip和port从ip_pool中提取。

图 4.2.3 初始化IP池


4.2.1.5 向主控端发起连接请求

准备工作做完后,程序进入死循环,尝试和主控端建立连接。_ConnectServer函数负责连接主控端并接收指令。

_ConnectServer调用ServerConnectCli函数与主控端建立连接


图 4.2.4 连接主控端


图 4.2.5 主控端IP和port

由上图可以看到,生成僵尸程序时候配置的ip和port都写在程序的固定地址上。

4.2.1.6 发送感染主机的信息

僵尸程序在和主控端建立连接后,会将感染主机的信息发送给主控端。

图 4.2.6 发送感染主机信息

程序会获取机器的cpu、系统版本、内存、网速等信息,然后发送给主控端。然后进入循环,等待主控端的数据到达。

4.2.1.7 等待主控端指令

僵尸程序在发送感染主机信息后,会调用select等待主控端的指令。当MainSocket有数据可读,也就是主控端发送指令过来了,跳出循环,开始处理数据。

图 4.2.7 等待主控端下发指令

4.2.1.8 接收指令并执行

主控端发送的数据最开始的四个字节表示本次数据要执行的动作。

如果接收到的数据最开始的四个字节等于5,那么表示主控端要僵尸程序执行命令。最后会直接调用system函数执行命令。

图 4.2.8 执行命令


4.2.1.9 接收DDoS攻击的指令

如果接收到的数据最开始的四个字节等于6,那么表示主控端要僵尸程序开始DDoS攻击。


图 4.2.9 接收DDoS攻击指令

DDoS攻击的配置数据是经过AES加密处理过的,可以看到,key_0变量就是密钥

图 4.2.10 密钥

再看密文(后文有密文图片),有很多地方的数据都是一样的,这样基本就确定了加密算法是AES的ECB模式,因为ECB模式下每个块的加密密钥都是一样的,只有这样密文很多数据是相同的。

解密出数据后,将数据传给DelwithDDoS函数处理,4.2.2小节会分析。

4.2.1.10  停止DDoS攻击

如果接收到的数据最开始的四个字节等于7,那么表示主控端要僵尸程序停止当前DDoS攻击线程。pid是个全局变量,当生成攻击线程的时候,会将线程的id记录到pid里面,等到要暂停攻击时候,只需要kill掉相应的pid就可以了。

图 4.2.11 停止DDoS攻击

4.2.2      协议分析

主控端对感染主机下达DDoS攻击指令后,僵尸程序对接收到的数据解密处理,然后DealwithDDos函数来解析解密后的数据。

4.2.2.1  解密前后流量对比

图 4.2.12 解密前的指令数据


图 4.2.13 解密后的指令数据

4.2.2.2 解密

图 4.2.14 解密

提供key,生成AES对象,然后用AES成员函数InvCiper对密文进行解密,将解密后的明文传递给DealwithDDos函数来解析。

4.2.2.3 DealwithDDoS解析流程

通过分析DealwithDDoS函数,来确定数据包中有效字段的作用。

4.2.2.3.1  攻击方式和攻击线程数量

图 4.2.15 攻击方式和攻击线程数量

偏移0x184处是攻击方式,表示本次攻击要发送什么样的数据包,根据这个值在随后的switch分支中调用不同的函数。

偏移0x188处是攻击线程数量,表示本次攻击需要启动多少个线程来同时攻击目标。

4.2.2.3.2  攻击时间

图 4.2.16 攻击时间

偏移0x194处是攻击持续时间。在指定时间段内持续攻击,到点就停止。

4.2.2.3.3   是否伪造源ip

上面几处信息基本就够DealwithDDoS函数识别任务的配置情况,并根据指示来启动相应的线程。但是在某些攻击方式中,根据需求可能要伪造ip,所以对于一些特殊标志,需要在具体函数里处理。


图 4.2.17 是否伪造ip

这个代码片段取自udp_flood函数,该函数根据是否伪造ip的标志而进行不同的处理。

4.2.2.3.4   其他字段的作用

图 4.2.18 主控端配置信息

和明文信息对比分析可以知道:

数据包中的偏移

代表意义

0x0

IP地址

0x80

域名

0x180

攻击端口

0x18c

包体长度

通过以上的分析,我们可以对“神起ddos集群”的通信协议做一个总结如下:

图 4.2.19 DDoS攻击任务的配置数据格式


5    未完待续

好奇的你是不是很想知道,“神起”僵尸网络的幕后操控者到底是谁,他是一孤独的黑客还是一个老练的团伙?还记得文章开始部分的那个打了马赛克的截图吗?

图 5.1 QQ号码

是的,粗心的黑客在微云登录界面留下了一个QQ(76*****99)号码,能否利用这个QQ号码追踪到幕后操纵者的真实身份呢?在该系列的下篇,你将看到一个精彩的社会工程学案例,敬请期待~



『水滴安全实验室』—— 致力于僵尸网络的发现与监测,以及黑产溯源。我们会持续跟踪僵尸网络的后续进展。

长按二维码,即可关注!