黑雀攻击:深度分析并溯源Dofloo僵尸物联网背后的“黑雀”
发布时间 2019-05-31
2019年4月开始,启明星辰ADLab观察到Confluence远程代码执行漏洞CVE-2019-3396被Dofloo僵尸网络家族用于攻占设备资源,Confluence 是一个专业的企业知识管理与协同软件,常用于构建企业wiki。本次漏洞是由于Confluence Server 和Confluence Data中的Widget Connector存在服务端模板注入漏洞,攻击者构造特定请求可远程遍历服务器任意文件,甚至实现远程代码执行攻击。有意思的是Dofloo僵尸网络家族不仅开始利用高危漏洞进行攻击,而且其背后的黑客还利用一种更具影响力的“黑雀攻击”来入侵产业链,以掌控更加强大的网络攻击资源。而在此前,我们已经做了长时间的与Dofloo僵尸家族黑客产业链相关的研究,且已经确定了这种普遍存在于Dofloo家族中的“黑雀攻击现象”,并对其中的“黑雀”进行了长期追踪与分析。
此处,我们所提出“黑雀攻击”不仅是一种高效的黑客攻击手段,而且更是一种产业链级别的攻击方法,一般为黑色产业链上游黑客所为。黑雀攻击与供应链攻击有异曲同工之妙,只是攻击的目标不是常规的产业链,而是黑客产业链;受攻击链的末端也不是普通用户,而是极具危害性的黑客群体。在网络安全与黑客产业链的长期对抗,使得该产业链日渐成熟且复杂,并形成了一个庞大的黑客生态系统,而在利益和生存需求的驱使下,黑雀现象似乎变成了必然,甚至在食物链的上端进化出了黑雀生态,如Death僵尸网络的“大黑雀-黑雀-螳螂”。
自启明星辰ADLab于2016年初发现黑雀攻击并于2017年1月发布《黑雀攻击-揭秘Death僵尸网络背后的终极控制者》之后,还相继在多个恶意代码家族中发现了黑雀攻击,并发布了深度分析报告《揭秘Billgates僵尸网络中的黑雀现象》和《黑雀攻击:揭秘TF僵尸物联网黑客背后的黑客》。在此前的黑雀分析和追踪中,我们揭露了Death僵尸网络背后的那个控制着上千僵尸子网络的超级黑客,以及深藏在Billgates僵尸网络和物联网僵尸DDoSTF家族背后的黑雀。此外我们还详细阐述了每个家族中“黑雀攻击”的黑客层次结构,如Death僵尸网络的三级黑客结构(大黑雀-黑雀-螳螂),Billgates和TF的二级黑客结构(黑雀-螳螂),以及对相关的大黑雀、黑雀和螳螂进行了网络行为分析和身份识别,并做了精准的黑客画像。
1.Dofloo僵尸家族简介
Dofloo,又名Spike和AES.DDoS,是一款支持ARM、x86、mipsd等多CPU架构的僵尸网络程序。Dofloo家族因2014年针对北美洲和亚洲多个国家进行高达215Gbps流量的攻击而出名,此后长期的攻占物联网设备资源并频繁地进行网络攻击活动。根据赛门铁克在2016年发布的《Internet Security Thread Report》,Dofloo僵尸网络恶意程序位列2015年度IoT领域恶意程序威胁排行榜第二名。
2.发现Dofloo僵尸中的黑雀
在长期的对僵尸网络的研究中,Dofloo一直是我们监控的对象。在之前的研究中,通过自动化分析该家族的关联样本,发现该家族的大部分样本都会启动两个新的攻击线程,并发现这两个线程存在异常行为。如:不仅会设置延迟启动线程,还会尝试跟另一个C&C控制端进行连接通信。因此,我们对这些样本进行了进一步的分析,最终确定该僵尸生态中被植入了黑雀。
从上图可以看出,有三个地址的上线频度远高于其他的C&C。结合样本分析发现,上线到这三个C&C地址的样本几乎都有两个独立控制的C&C,并且僵尸回连这三个C&C地址都是通过创建子线程的方式进行,而其关联的样本的另外一个C&C却是在主线程中进行回连。因此,通过该僵尸的这几个特性可以断定其中必定存在黑雀攻击的现象,而这三个C&C地址便是Dofloo僵尸生态中的黑雀C&C地址,与黑雀C&C地址相关联的其他C&C地址便是Dofloo僵尸生态中螳螂黑客的C&C地址。
我们对这三个黑雀C&C地址相关联的螳螂C&C做了分类统计,如下表所示:
C&C地址 |
螳螂僵尸网络数量 |
183.60.149.199 |
189 |
118.193.217.144 |
282 |
aaa.tfddos.net |
85 |
3.Dofloo僵尸黑雀溯源与画像
通过对样本的分析,结合样本中的函数命名习惯、攻击流量特征、变种源码注释以及样本爆发传播时用来散播样本的HFS面板语言等特征,我们判定该家族由国内的黑客编写。于是我们溯源目标锁定在国内,通过对黑雀域名“aaa.tfddos.net”中关键信息”tfddos”,我们关联到一款名为“台风DDoS”的僵尸软件。并且通过进一步分析发现,该僵尸软件的模板样本与Dofloo僵尸具有极为相似的行为和网络特性。此外,“台风DDoS”在黑客间活跃的时间同Dofloo爆发时间均在2014年。根据以上一系列的证据证明他们之间存在一定同源性。为了进一步确认他们为同一款僵尸程序,我们还利用bindiff对“台风DDoS”控制端生成的僵尸与Dofloo的样本进行了相似度比对,发现两者代码相似度为100%的代码占比超过98%,因此可以确定“台风DDoS”便是Dofloo家族的一个主控。对比图如下:
通过对早期的“台风DDoS”的僵尸模板程序分析发现与Dofloo黑雀C&C相同的后门C&C:183.60.149.199。
此外,通过对“台风DDoS”的溯源发现,其曾在网站tfddos.com上作为官方软件被公开售卖,该网站虽然采用了与Dofloo黑雀域名“aaa.tfddos.net”不一样的域名,但他们都使用了“tfddos”作为域名的关键字,也即是“tai(台) feng(风) ddos”。因而我们认为后门C&C:183.60.149.199与aaa.tfddos.net为同一黑客或者黑客组织所为。
对于黑雀IP:118.193.217.144的反查发现,在2017年,域名wap.tfddos.net和aaa.tfddos.net与该IP地址进行了长期的绑定。
为了追踪Dofloo僵尸网络背后的黑雀,我们先收集了C&C相关的信息并进行了分析。其中通过IP:183.60.149.199关联出来的相关域名大部分被作为色情网站或博彩网站使用,并无可用线索。而tfddos.com和tfddos.net都采取隐私保护方案,无法进行进一步的追溯。
通过此后长期的溯源分析,我们还追踪到了该黑雀在现实世界中的身份信息。此黑雀是河南南阳两家科技公司的监事,并且以80万元认缴资金持有其中一家科技公司10%的股份,背地里从事黑产活动。
4.Dofloo僵尸典型样本分析
由于Dofloo支持多种CPU架构,我们在对这些平台的样本分析中发现,所有Dofloo支持的架构,都存在黑雀现象。但是僵尸作者对不同的架构的黑雀C&C处理略有不同,这对自动化分析也造成了一定的影响。我们对本次收集的共计1200个样本的架构所占比例进行了统计,绘制成图如下:
CPU架构的分布图,一定程度上也说明了该家族入侵设备类型的分布,可以看到ARM设备的比例非常高,这也说明ARM下的设备受到黑雀控制的比例比较高。
接下来我们对Dofloo家族的典型样本进行了详细的剖析,并且根据大量样本提取归纳出典型的通讯流量和攻击流量特征,并对Dofloo家族进行了同源性分析。
4.1 安装机制
Dofloo僵尸程序的安装机制有:僵尸程序在宿主机的持久化设置、进程唯一性判断和守护进程设置。
僵尸程序通过写入开机自启命令实现持久化。僵尸程序在启动后,会首先检查启动的命令行参数, 如果发现没有参数,那么恶意程序会默认是在该设备的第一次运行,此时会调用“autoboot”函数。在该函数中,调用“system”函数执行下表中的命令,以确保恶意程序在该设备重启后仍能够启动运行。这也是Dofloo恶意程序在宿主设备实现持久化的唯一方法。
sed -i -e '/^\r\n|\r|\n$/d' /etc/rc.local
sed -i -e '/%s/d' /etc/rc.local
sed -i -e '2 i%s/%s' /etc/rc.local
sed -i -e '2 i%s/%s start' /etc/rc.d/rc.local
sed -i -e '2 i%s/%s start' /etc/init.d/boot.local
4.2 上线机制
4.3 心跳机制
僵尸程序在SendInfo线程实现了自身的心跳机制。这个线程的主要功能是向螳螂控制端和黑雀控制端发送心跳包,心跳包内容包含当前CPU使用率和网络速度信息,通过以下2个步骤获取到这些内容:
(1) 检查“eth0”到“eth9”范围内以太网口的ifconfig信息。并通过读取/proc/net/dev 目录信息来计算网络速率。
(2)通过读取/proc/stat目录下的信息,获取cpu数量,计算占用百分比。
比较有趣的是,下游的黑客在发动DDoS攻击的时候,可能根本不会想到,主控中显示的恶意程序的攻击流量速率几乎都是伪造的。我们在SendInfo线程中发现,当恶意程序执行DDoS攻击时,会调用“fake_net_speed”函数,该函数会根据不同的DDoS攻击的模式,在一个固定的范围内伪造攻击流量速率。下图为对部分计算随机流量的截图:
僵尸程序伪造的攻击流量数据范围如下表所示:
4.4 控制指令解析与DDoS攻击
发送完上线包之后,此时僵尸程序会等待接收控制端的控制指令。Dofloo会首先把控制指令包的前四个字节作为模式指令码进行解析,由此来判断接下来要进行的操作,主要支持的操作有三种:
(2)指令码为0x6时,进入DealwithDDoS函数,此函数为DDoS攻击函数,所有执行攻击的判断和逻辑都在此函数中。
(3)指令码为0x7时候,调用kill函数,终止进程。
同时Dofloo家族对控制指令进行了128位的AES加密,这个特性大大增加了对其控制指令流量监控和识别的难度。我们对收集到的样本进行分析后发现,所有架构下僵尸程序用来解密的KEY都是相同的,这也说明互联网中Dofloo僵尸家族的样本都来自同一个模版。KEY如下所示:
unsignedcharaes_key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x9, 0xcf, 0x4f, 0x3c };
我们模拟了未加密的控制指令(除去前4个作为模式指令码的字节)在内存中的布局,其控制指令的各个字段的含义如下图所示:
当进入到DealwithDDoS函数时,僵尸程序根据指令,启动不同的攻击线程。Dofloo家族不仅具有SYN、HTTP等传统的攻击方法,还具有利用UDP协议的反射放大的攻击方式,比如DNS放大攻击。下图为Dofloo可发起的典型的DDoS攻击的方法:
并且我们对Dofloo的攻击方法进行了分析总结,并对部分攻击方法的流量特征进行了提取,制作流量特征表如下:
我们在分析攻击线程的时候,发现ARM架构的恶意样本每次攻击创建的攻击线程非常多,单次攻击指令可创建几种甚至十几种不同类型的攻击线程。结合样本CPU的分布,我们可以得知ARM设备下的Dofloo恶意程序是该僵尸家族的主力,在DDoS攻击中提供了主要的流量支持。
同时根据监控到Dofloo攻击历史,发现该家族主要的攻击方式以UDP Flood 为主,近年来黑客也越来越喜欢DNS和NTP等反射放大攻击手段来对服务器进行打击 ,Dofloo的攻击方式占比也印证了这一点。同时我们也可以看到Layer7层的CC_Flood和Layer4层的TCP_Flood、SYN Flood作为传统的DDoS的攻击方式,其占比也一直较为稳定。并且我们根据相关的情报数据得知,Dofloo的攻击量相对于其他的家族较少,我们分析推测Dofloo每次发动攻击时开启了大量的攻击线程,这样能加大发包量,快速导致目标服务器宕机。
4.5 同源性分析
我们观察到很多杀毒软件对Dofloo家族程序有不同的命名方式,甚至识别为其他家族的程序,因此为了确定Dofloo家族的源码构成,我们对其进行了同源性分析。
并且还可以看到Mr.Black同样有同名的,发起DDoS攻击的函数DealWithDDoS,其发起攻击的控制指令编码也相同。
只不过Mr.Black中仅有5种DDoS攻击方式。通过查阅Mr.Black的源码,发现Mr.Black源码中并没有黑雀后门线程和AES加密,没有远控部分,仅能发起DDoS攻击。因此推测Dofloo为参考Mr.Black代码更改后的变种。
在DnsAmp与Dofloo家族的对比中,我们发现其代码差别较大,但是主要攻击代码以及程序整体设计思路比较相似。在DnsAmp家族中,持久化仍然是通过设置“/etc/rc.d/rc.local”来保持开机自启,并且在启动后同Dofloo一样,会首先确定进程的唯一性。而它的攻击线程“AttackWorker”中,我们发现同Dofloo一样具有同名的攻击函数“DealwithDDoS”,只不过仅有4种攻击方式,分别为udp,icmp,dnsAmp,syn攻击。虽然DnsAmp与Dofloo整体代码相似度不是太高,但是根据其主要攻击代码和程序整体的设计思路,我们推测二者具有关联性,至少DnsAmp为参考Dofloo代码而产生的相似变种。部分对比图如下:
5.总 结
本篇报告重点对Dofloo僵尸网络家族中存在的黑雀现象进行了分析披露,并溯源追踪黑雀,产出黑雀画像。同时对典型的僵尸样本进行了分析,提取归纳出上线、心跳、控制指令和发起攻击的流量格式。
参考文献:
1、DDoS-Capable IoT Malwares: Comparative Analysis and Mirai Investigation
https://www.hindawi.com/journals/scn/2018/7178164/
http://www.antiy.net/p/2017-global-botnet-ddos-attack-threat-report
https://www.insight.com/content/dam/insight-web/en_US/article-images/whitepapers/partner-whitepapers/Internet%20Security%20Threat%20Report.pdf
http://blog.malwaremustdie.org/2014/09/tango-down-report-of-op-china-elf-ddoser.html