首页 > 安全 > 网络安全 > 正文
“神起”僵尸网络的诱捕与反击(上)
2017-07-17 09:29:26       个评论      
收藏    我要投稿

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集群” 软件进行分析,从逆向工程的角度分析被控端木马的行为以及被控端木马是如何与主控端进行通信的。
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 攻击方式和攻击线程数量

 

偏移 0×184 处是攻击方式,表示本次攻击要发送什么样的数据包,根据这个值在随后的 switch 分支中调用不同的函数。
偏移 0×188 处是攻击线程数量,表示本次攻击需要启动多少个线程来同时攻击目标。
4.2.2.3.2   攻击时间

图 4.2.16 攻击时间
偏移 0×194 处是攻击持续时间。在指定时间段内持续攻击,到点就停止。
4.2.2.3.3    是否 伪 造源 ip
上面几处信息基本就够 DealwithDDoS 函数识别任务的配置情况,并根据指示来启动相应的线程。但是在某些攻击方式中,根据需求可能要伪造 ip ,所以对于一些特殊标志,需要在具体函数里处理。

图 4.2.17 是否伪造 ip
这个代码片段取自 udp_flood 函数,该函数根据是否伪造 ip 的标志而进行不同的处理。
4.2.2.3.4    其他字段的作用

图 4.2.18 主控端配置信息
和明文信息对比分析可以知道:
在数据包中的偏移
代表意义
0×0
IP 地址
0×80
域名
0×180
攻击端口
0x18c
包体长度
通过以上的分析,我们可以对 “ 神起 ddos 集群 ” 的通信协议做一个总结如下:

图 4.2.19 DDoS 攻击任务的配置数据格式
5    未完待续
好奇的你是不是很想知道, “ 神起 ” 僵尸网络的幕后操控者到底是谁,他是一孤独的黑客还是一个老练的团伙?还记得文章开始部分的那个打了马赛克的截图吗?

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

 

 

点击复制链接 与好友分享!回本站首页
上一篇:使用深度学习检测DGA(域名生成算法)
下一篇:如何使用黑盒方式检测弱密码散列算法(基于碰撞哈希算法)
相关文章
图文推荐
文章
推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站