RootKiter,EarthWorm 作者。
曾就职于绿盟从事安全研究相关工作。现就职于360网络安全研究院,主要负责僵尸网络的研究 / 跟踪 / 防治工作,以及相关安全工具的研发。
◆ ◆ ◆
在互联网,僵尸网络常见于广告点击欺骗、发送垃圾邮件、DDos攻击、进行比特币挖矿等非法活动中。然而僵尸网络现在已经蔓延到了IoT 行业,IoT 设备随时都有可能被感染并变为僵尸网络的一部分。360网络安全研究院研究员Rootkiter先对常见的IoT僵尸网络进行解读,然后对一款名为Hajime的特殊僵尸程序进行了细致的跟踪,总结IoT僵尸网络的传播特点与防御方法,甚至让我们看到了未来IoT战场的样子。
Rootkiter上场后首先介绍了一系列Mirai蠕虫的新闻追踪,其中标红字的是他们研究院能够从数据上确认这起攻击确实存在的,而且后面的说法是吻合的。蓝字的是能够间接确认的。黑字的是看不到的。然后是两次比较大的新闻报道,一次是9月20号的KREBS,这个安全圈都已经关注。10月20号是DYN,导致美国大面积网络瘫痪,这个影响连非安全圈的人都会知晓。
在9月19号Rootkiter所在的360网络安全研究院发现2323端口的扫描流量在9月11号到9月16号之间有一个比较大的变化,这是一起大规模扫描。他们认为2323端口上有一个新的问题出现了。并且在蜜罐中也看到了MIRAI这个字符串。这个时间是在KREBS被攻击的前一天,紧接着9月20号就被攻击了,囧。
10月1号,我们发现了一处Mirai源码种的安全问题,任意攻击者都可以从MIRAIC2服务器发送自定义攻击指令,我们和国际一线的ISP供应商做了一次联合测试,测试中大量ISP节点收到影响并宕机。ISP节点是网络运行的基础节点,它一旦down了,其所辖地区的路由器及用户便无法正常使用网络。好在这一次是在测试环境下。9月30号源码公布,我们是在两个月以后发现的这个安全问题。
这样,MIRAI的前期工作做完了,我们开始做一些整理性的工作,包括对MIRAI跟踪数据的公布。
在公布的过程中,还有另外一个重要的工作,我们第一个确认了MIRAI的DGA变种,而且率先公布了DGA数据。很多人不理解DGA究竟是什么。一般情况下,僵尸网络下面都是肉鸡,肉鸡从CC服务器接收指令,CC服务器告诉我这个肉鸡究竟要攻击谁。按传统的情况来说,我们只要把CC服务器关掉就行。无论是把它的IP地址关掉,还是把域名关掉,这些肉鸡都会丧失掉从CC服务器获取攻击指令的途径。但是,攻击者希望自己的控制是持久化的,他做了些改进。每天换一个CC服务器,你第一天关掉第一个,我就第二天启动第二个。当你把第二个关掉了,第三天就启动第三个。这个过程是通过一段代码流程来实现的,得到的域名或者服务器地址是一个数组,也就是从0开始到无穷远的数组。要生成这个数组,需要一个种子。我们拿到这个种子数据,并逆向出对应的域名生成算法后,就可以预测出MIRAI在随后的每一天所使用的CC服务器地址。这样比如我们知道了第100天的CC地址,那么我们可以在第99天的时候将其列入黑名单,以预防其在第100天发起的攻击。
我们在自己的微博上很高兴地公布了DGA变种。公布之后的4小时我们收到了另一个样本。这个样本证明了MIRAI的开发者是个有爱的人。他之前的种子是一段读不懂的一段字符。在我们公布之后,他开始把这段字符改成了“i love you three sixty”。(大魔王注:我爱360)
接下来Rootkiter开始介绍“HTTP81”,HTTP81的一部分基础代码其实是和 MIRAI 同源的(我更倾向于相信它是从MIRAI改的)。它和原始MIRAI的区别在于,原始MIRAI是通过弱口令来传播,HTTP81的传播是通过Go-Ahead漏洞进行传播。
4月16号,我们从scanmon上看到了81端口的异常扫描。这个时候我们就确认81端口出现了奇怪的东西,但还不知道是什么。到了4月24号,我们已经从蜜罐当中看到了这个样本,并进行分析,在一个星期内得到了结果,而且我们也是全球第一个公布HTTP81细节的。
HTTP81的核心功能是只做DDOS攻击,而且只做UDP-flood攻击。它会抓取肉鸡的DNS/HTTP访问流量,并且汇报给自己的C2。肉鸡实际上就是IoT设备,它会记录自己感染过的IoT设备都有哪个厂商的,并且会在肉鸡的31337端口建立一个socks5的透明代理服务。一般情况下,这种透明代理服务会和黑产有比较紧密的关系,比如近期经常听说的薅羊毛黑产。另外HTTP81还有一个备用传播机制。
在接下来是“IoT_Reaper”,它也是从MIRAI改过来的,但比MIRAI更高级。首先,它使用了MIRAI的扫描模块。MIRAI的SYN扫描模块速度非常快,在很短的时间内可以得到很多的扫描结果。它不会通过弱口令进行传播,而是完全通过漏洞来传播。从我们报告的时候它有9个漏洞。10月20号的时候,攻击向量已经扩充为10个。在我们监控的时间内,利用这10个漏洞最高曾控制了10万个左右的肉鸡。然后是模块化,传播和攻击功能分在不同的样本中。它虽然是从MIRAI样本改的,改完的样本叫做SA,SA没有攻击功能,只有传播功能。它的攻击功能将同另一个模块有关,在这个模块中包含了一个完整的LUA 脚本执行引擎,攻击者可以通过下发 LUA 代码的方式来控制自己的肉鸡。
下面要讲到Hajime。这个僵尸网络的出现时间和MIRAI相近,我们认为基本上是同时期出现的。2016年9月15号正是MIRAI大肆传播的时候,但我们已经看到了Hajime的传播情况。紧接着,很多人开始知道Hajime是一个由白帽子运行的僵尸网络,这个线索来自它的提示信息,它说“我是一个白帽子,我扫描系统是因为我要保护它”。很有超人的感觉。但是,大家都知道美国超人在保护人的时候,在和恶魔做斗争的时候,他是不太关心旁边的建筑物的。
2016年12月,它开始通过5358端口进行传播,这个传播方式是Hajime独有的,到现在为止也没有看到其他僵尸网络会对这个端口发起扫描。然而让我们奇怪的是,它以telnet口令破解的形式去扫描 5358 端口,然而我们却并未找到开放相应服务的IoT设备。
第一次对Hajime进行的规模评估是2017年4月份卡巴斯基的研究员完成的,他得到的结果是那个时候Hajime的节点有30万,我们也有一些数据可以从侧面证明这个结果。Hajime在6月份的时候已经开始下降。9000端口的传播也是Hajime独有的。它利用了HI_RSDK_NET_SetPppoeAttr RCE漏洞。
从2017年7月开始对Hajime进行跟踪,一直到昨天(小米安全峰会日期)它的日活都维持在6~8万之间。Hajime的特点,它是利用点对点通讯针对IoT设备的僵尸网络。是模块化编程的,传播是传播,攻击是攻击,维持会话就维持会话。Hajime有强密码学背景,在它的代码里,所有跟密码相关的代码都是他自己写的,我们并没有找到开源代码。Hajime也是通过弱口令和漏洞进行传播的。
(大魔王注:这里大部分弱口令并非常规口令,而是蠕虫作者针对各种设备默认密码进行了细致地整理)
被Hajime肉鸡扫到一个新机器的时候,它会把自己的Hajime本体复制过去,新的机器已经成为Hajime的节点,Hajime的节点会搜索DHT网络。可以把DHT网络理解成搜索引擎,提交关键字就可以给你一些跟这个关键字有关的其他机器。
Hajime节点是一个P2P的网络结构,攻击者可以在任意时间连接任意一台电脑,进行网络控制。但是,这种结构有弱点。一是没有办法避免偷听者。网络中有很多尝试偷听数据的人。二是没有办法避免内鬼。对于P2P节点来说,内鬼是非常严重的问题。内鬼会尝试感染其他相邻的节点。其他相邻节点被感染以后,会进一步扩充为其他网络。当网络中出现内鬼,整个这个网络就会被内鬼完全控制。Hajime网络是如何避免这种现象呢?内鬼的问题最终会被转化为数字签名的问题。任何一个节点,如果它能验证自己收到的数据是由内鬼发出,还是管理者发出的,它就可以只处理管理者发出的指令了。
它是如何防御内鬼的呢?其实就是数字签名。Hajime会把原始文件进行压缩,给压缩数据加一个文件头,文件头的结构会包含两个签名,文件内容签名是压缩数据的签名,文件头的签名是整个这个头的签名,文件头的签名当中会包含文件内容的签名,这样就可以保证收到的数据确实都是由原始攻击者发出的。
Hajime的跟踪工作是如何进行的?第一项是评估网络规模,每日更新跟踪结果。另一项工作就是定期获得HTTP网络中传播的文件和指令。对于Hajime的跟踪主要可以通过两种方式进行:一是通过沙盒来养殖Hajime蠕虫,定期查它的情况。二是自己实现一个伪装的Hajime节点,混入Hajime的网络,尝试跟它通信。养殖Hajime可以通过“Qemu模拟”加“调度脚本”来实现。至于Hajime的伪装实现,则需要逆向Hajime的所有代码,实现它的核心逻辑。我刚刚已经提到了,Hajime这个僵尸网络有很强的密码学特征,它在密钥交换代码这一块并没有找到开源项目可以完全支持,我们要一行一行地逆出并实现它,这块的工作量也是很大的。
优劣对比:养殖Hajime是一个凭运气的方式。Hajime的节点是每10分钟取一次数据。它取到的数据对你有没有用,这里存在很大的不确定性。但是,逆向算法的方式就不同了,我可以控制什么时候拿到数据、什么时候发起任何请求,主导权在我们这里。
我们用的是伪装Hajime节点的方式来跟踪,于是我们就得到了一个稀有但有趣的config文件样本,它包括了atk.x64的模块,atk代表它是一个扫描传播的模块,x64代表这是一个尝试在PC平台运行的东西。这个文本文件可以通过Hajime的数字签名校验,所以它是由Hajime的特有的私钥签名的。
关于这个问题(指稀有的config文件可以通过私钥签名这一点),其实有些小疑问,如果它是运营者发出的,则我们认为Hajime开始尝试支持PC平台;但如果不是运营者发起的,那我们只能推测 Hajime的私钥发生了一次泄露。在这两种可能中,我们更倾向于相信前者(由运营者本人发起),因为Hajime是一个很有理想、很有追求的僵尸网络:P
议题PPT下载地址:
http://t.cn/RYeAxKF