本报告由CNCERT物联网威胁分析团队\绿盟科技伏影实验室\360网络安全研究院(Netlab)联合发布

以下为报告正文

一、概述

2019年12月,根据安全社区提供的线索,我们发现了一起大规模的物联网安全事件。多方联合的分析与定位结果显示,此次事件中,黑客通过入侵某网络运营商的家庭用户设备并植入恶意程序,持续地使这些设备变成新的僵尸节点,进而构建起了一个超大规模的僵尸网络。根据所涉运营商和设备厂商的初步评估,被黑客入侵并控制的设备数量超过百万,其中96%以上的受害者分布在中国境内。这次攻击事件中受控的设备数量特别巨大,是历史上已公开领域内规模最大的物联网僵尸网络。

运营商的家庭用户设备在设计、研发、制造等阶段,需要采购第三方组件,以完成产品功能。由于程序设计不严谨、安全测试不充分等原因,有些组件含有软件或硬件缺陷。这些缺陷在没有暴露之前,叫做0-day漏洞或零日漏洞(没有暴露——0-day,暴露1日——1-day,暴露多日——N-day)。此次事件中,黑客就是利用了设备生产供应链中的某些组件的0-day漏洞,入侵了多个品牌的家庭网关类设备,并在设备上植入了恶意程序。因为在该恶意程序的二进制逆向结果中,多次出现“pink”字符,所以我们将其命名为Pink。

Pink恶意程序从功能上可以划分为3个模块:植入、驻留、控制。当Pink恶意程序被植入设备并运行后,它会主动封堵设备的自动升级通道,大大增加了应急处置和在线修复的难度,危害程度极高。通过对该事件的深入分析,我们认为,此次攻击事件已经超出了僵尸网络的范畴,是一次高级定向攻击事件:

1、高级性:在一般的僵尸网络攻击中,黑客会使用许多通用型的漏洞,以期最广泛地覆盖不同类型、不同品牌、不同固件的在线设备。但是在此次事件中,黑客挖掘了运营商的特定设备、特定固件的0-day漏洞(挖掘特定设备的漏洞,通常比挖掘通用型的漏洞难得多),仅利用0-day漏洞入侵这些特殊设备,并且没有增加其他漏洞用于更广泛的扩散感染;

2、定向性:此次事件中出现的0-day攻击是针对特定品牌的宽带设备设计的,这些设备主要被提供到华北、东北地区,其中北京地区装机量最大。这些设备作为未来家用物联网控制核心,重要性不言而喻。因此我们判断,Pink背后的黑手是有目的性地选择攻击目标,这是高级定向攻击的重要判断依据;

3、定制性:在一般的僵尸网络攻击中,黑客会制作适配X86、ARM、MIPS等多种处理器架构的恶意程序,以确保能够最广泛地感染不同的设备。但是在此次事件中,Pink恶意程序仅能适配MIPS架构,而它正是被入侵控制的设备所采用的处理器架构; 

4、持久性:在一般的僵尸网络攻击中,攻击者通常在漏洞利用阶段修改crontab定时任务,以实现恶意程序的持久化。但是在此次事件中,Pink恶意程序自己通过修改固件,完成Rootkit来保证自身长期存在于设备中,这是极为罕见的、难度很高的驻留方式,这也是Pink属于高级定向攻击的重要判定依据;

5、潜伏性:在我们的持续监测过程中,并未发现Pink有任何外部扫描攻击行为,因此其攻击活动是以特定目标进行的,而常规僵尸网络活动则带有大规模的扫描和探测能力,追求短时间内控制大量设备;Pink恶意程序中,也没有出现任何已知的恶意软件的代码复用行为,在厂商治理后,Pink不再进行更新,这也表明了攻击者更愿意隐匿自身,这与僵尸网络开发者被公布后有意炫耀并持续活跃有本质的区别。

二、影响范围

根据NetFlow监测、主动探测等多个维度的数据测算,Pink僵尸网络曾经连接的IP地址数量超过五百万。通过对这些IP地址的定位数据进行统计发现,这些IP主要是某运营商的家庭用户地址。然而家庭用户的IP地址是动态分配的,IP背后已感染设备的真实规模无法被精确估计。2020年初的监测数据显示:在不到1分钟的时间内,向控制服务器C2发起连接的感染端IP数超过百万。另据所涉运营商和设备厂商的初步评估,被黑客入侵并控制的设备数量在数百万级。综上,依据多方独立的测量结果,我们认定Pink僵尸网络控制的节点数量在其峰值期超过百万。

根据感染IP地址的定位数据,被感染设备主要位于北京(18.8%)、山东(16.4%)、山西(12.6%)、浙江(12.3%)等,境内分布如图1所示。

图 Pink僵尸网络境内感染IP分布

三、技术分析

经过长期的跟踪研究,我们发现Pink是一个融合了多种对抗技术的僵尸网络。设备被植入恶意程序Pink后,攻击者通过点对点(P2P)和命令控制(CNC)两种方式对Pink进行控制和管理。

1、对时效性要求不高的配置管理指令,通过P2P的方式分发;

2、对时效性要求较高的攻击控制指令,通过CNC方式集中分发。

3.1 配置管理

对于每一个被控的僵尸节点(Bot)来说,最重要的一步是找到管理员并接收指令,而管理员的信息就包含在“配置”之中。下面是最新截获的配置信息:

{

“verify”:“1611936001",

“cncip1”:“140.82.40.29",

“cncport1”:“26007",

“dlc”:“450aa79da035a8a55ca4c0e6b1025b50",

“dl”:“http://209.250.247.60/dlist.txt”,

“dlc1”:“47ed94977b45099f1ef5c7701b2d25dc”,

“dl1”:“https://***/ghy8/bh/raw/master/dlist.txt”,

“sd0”:“1.1.1.1",

“sdp0”:“443",

“srvk”:“FJAz37XiKgnTLtVpmhjxZcavTJUU5r4XN3Wl5nhTpg0=“,

”pxy”:“1”

}

(1)verify 字段为指令发布的时间戳,Bot会根据这个时间戳筛选出最新的有效指令;

(2)cncip 和 cncport 字段指明了僵尸网络的最新CNC地址,攻击者会根据自身需求随时切换这个控制地址;

(3)dlc/dl和 dlc1/dl1 字段组为最新的Pink样本更新地址,其中dlc和dlc1为对应内容的Hash校验字段;

(4)sd0/sdp0字段为安全DNS地址,对于每一个Bot来说,当需要查询DNS解析记录时,将通过这里指定的DNS服务来查询,且方式为DNS-Over-HTTPS;

(5)srvk字段为服务端的公钥内容(base64编码)。对于每一个bot来说,它和CNC的通讯都是加密的。所以实际通讯前要先经过椭圆曲线迪菲-赫尔曼(ECDH)密钥交换得到一个唯一的私钥。在这里指定了CNC端的公钥后,还可以顺带完成了Bot对CNC身份的验签。这是对原有 ECDH 密钥交换的扩展使用;

(6)pxy字段,推测是一个代理上线的选项,目前没有看到使用迹象。

配置信息是这个僵尸网络的核心,它保证了攻击者对僵尸网络的绝对控制能力。为了防止其他人发现配置信息,传递的配置信息都是异或加密过的密文。为了防止他人伪造,攻击者还用椭圆曲线数字签名算法(ECDSA)对配置信息进行了签名。

除了保证配置信息的机密性和完整性外,攻击者还使用了多种手段来分发配置信息,以确保其可用性:

(1)通过集中的方式分发配置信息。将配置信息加密后,通过Github、百度贴吧等公开网站注册用户,以及内置的域名cnc.pinklander.com来分发配置信息;

(2)通过 P2P 方式分发配置信息:Pink运行后会在被入侵的设备本地开启端口监听,互相进行广播和分发配置信息。

3.2 攻击控制

上节配置信息中的 cncip1 和 cncport1 便是攻击者实际使用的主控节点。Pink 连接到 CNC服务器后,将通过密钥交换的方式加密通信,传输控制指令。通过长期的跟踪和监测,我们发现Pink 指令具有丰富的控制能力,具体包括:

 1. 文件下载及执行

 2. 系统命令执行

 3. DDoS攻击(HTTP攻击和 UDP 攻击)

 4. 扫描功能(扫描的具体内容可以通过指令设置)

 5. 汇报设备信息(CPU/系统类型/内存信息/系统版本/硬件信息)

 6. 自身更新(将新版本保存到 /tmp/client 后运行)

 7. P2P节点列表同步(直接推送一组P2P节点到Bot)

 8. HTTP报文注入广告(嗅探交互报文,遇到HTTP网页时,插入广告js脚本)

 9. 启动sock5代理服务(架设 Socks5 代理服务,账号密码通过指令设置)

10. 重置watchdog 

3.3 驻留手法

Pink在侵入目标设备后,第一时间修改系统固件,在init.d脚本中添加启动项,启动Loader模块,该模块负责在设备启动后更新配置文件,下载最新的Bot程序。Loader模块通过对Tr69c程序文件的删除和对应进程的操作,避免运营商通过该程序升级系统固件、下发管理工具。这里解释一下,Tr69c程序文件是运营商为了在管理侧主动下发指令,从而管理设备的具体实现程序,是具有高权限和未公开的程序。通过研究Pink的驻留手法,我们能够体会到,攻击者对运营商运行机制及目标设备特性有相当程度的了解。

3.4 流量劫持和篡改

Bot程序在内核态实现了流量的转发和劫持篡改。其通过使用mangle表,将设备中经过80端口的流量转发到由netfliter框架实现的数据包处理逻辑中,该框架是内核操作级别的流量处理框架,攻击者通过它提供的回调例程修改http流量。Bot也可以通过该框架实现中间人能力,劫持通信双方的会话,强制用户访问网站或浏览特定信息,并向外隐藏用户侧的异常网络表现,窃取通信双方交换的重要信息如密钥等。上述能力均可以在通信双方不知情的情况下完成,危害巨大。在此次攻击事件中,攻击者已经展示出该功能的伪装使用方法,在页面指定位置投递广告信息。

3.5 代理能力

Bot程序提供了Socks5代理的功能,通过自定义算法生成用户名密码,并主动开启端口以接收新的连接。Socks5的代理实现复用了libev库,简化了shadowsocks-libev的代码。通过将设备代理化,攻击者拥有了数百万的动态IP池。这里解释一下,因为IP资源紧缺,家庭宽带出口IP是动态变化的,且均属于个人用户资源,如果攻击者利用这些IP资源发起网络战,防御方无法通过封堵措施完成防御,且短时间内无法恢复。常用的抗DDoS设备也无法发挥作用,攻击者可以无限制的使用这些真实IP发起攻击。

3.6 追踪Pink

在感染设备上提取到的恶意程序连接的CNC地址为:cnc.pinklander.com,2019年12月捕获时,其解析IP为:110.18.61.36,2020年1月解析IP为:45.77.198.232。

捕获到的恶意文件下载地址及文件hash如下:

(1)2020-02-18,http://140.82.53.129/client_l   FR  5c322610e1845d0be9ccfc8a8b6a4c4f

(2)2020-04-14,http://155.138.140.245/client_l CA  5c322610e1845d0be9ccfc8a8b6a4c4f

(3)2020-04-16,http://95.179.238.22/client_l   NL  5c322610e1845d0be9ccfc8a8b6a4c4f

(4)2020-08-17,http://209.250.247.60/client_b  GB  5c322610e1845d0be9ccfc8a8b6a4c4f

(5)2021-05-06,http://209.250.247.60/client_l  GB  7608b24c8dcf3cd7253dbd5390df8b1f

四、处置和建议

鉴于该僵尸网络的规模和影响,我们发现该事件后,已第一时间通报给涉事网络运营商和相关主管部门,并联系设备厂商,协助处理和解决受影响的设备。黑客在与安全人员的对抗中,展现出了极强的针对性和专业性:首先黑客入侵设备后,会通过刷写固件等方式获得设备的绝对控制权,甚至让设备厂商预留的管理端口也失效,而只能去现场解决;其次,黑客还建立起复杂的加密通道来分发配置管理和攻击控制指令,从而逃避监测。经过安全人员与黑客的多轮对抗,截至2020年7月,绝大部分被入侵的设备已被修复。此后,通过1年多的持续监测,我们发现目前仍存在少量无法远程修复的设备在现网运行,并且攻击者还在持续地探索其他设备厂商的0-day漏洞。在安全社区的打击之下,Pink的规模已经从特大型(超过百万节点)缩减到大型(约十万节点,分布在多个国家、涉及多家设备厂商),且目前仍然活跃。

我们的威胁情报显示,物联网0-day漏洞正在被黑客用来入侵形形色色的网络设备。随着万物互联时代的到来,物联网设备已经成为黑产组织甚至高级持续性威胁(APT)组织的重要目标。虽然Pink是迄今为止发现的规模最大的僵尸网络,但是它绝对不会是最后一个。以Pink为代表的超大规模僵尸网络是黑客组织实现百般企图的有力的基础设施,我们在评估僵尸网络带来的风险时,不仅要搞清楚黑客已经通过僵尸网络做了什么,更要预测到僵尸网络将来可能被用于做什么,这样才能在威胁来临时从容应对。我们将密切关注黑客技术进展及黑客组织动向,深入研究超大规模僵尸网络的机理特性,持续揭露僵尸网络的潜在危害。