导语:HNS是一个复杂的僵尸网络,它使用P2P与节点/其他受感染设备进行通信以接收命令。在这篇文章中,我将讨论Mirai代码在HNS中的使用方式。
一、介绍
在主流软件开发中重用互联网上提供的代码是一种常见做法。这种做法与恶意软件开发没有什么不同。许多恶意软件源代码已经泄露,这样就使许多恶意黑客和恶意软件作者能够学习并打造自己的恶意软件。
2016年9月,Mirai源代码在黑客社区Hackforums上泄露。据了解,Mirai已被用于通过大规模分布式拒绝服务(DDoS)攻击暂时瘫痪高端服务。自从在线发布此代码以来,许多人都试图对其进行修改,结果出现了许多变体和派生体,占据物联网威胁的一角。 2018年3月3日,我的同事Dario Durando在西班牙马德里的RootedCon安全会议上介绍了对这些变体的研究,我们确定其源自Mirai源代码。从简单的修改(例如将更多证书添加到可用于暴力攻击的证书列表)到更复杂的方法(例如漏洞利用)将恶意软件传播到物联网设备,这些变体都在使用Mirai的代码库。
有了这些知识,许多恶意软件作者在自己的恶意软件程序中使用了泄漏的恶意软件源代码,FortiGuard实验室对调查其他利用Mirai代码模块的恶意软件非常感兴趣。有趣的是,我们调查的其中一个家族是Hide'N Seek(HNS)bot,于2018年1月被发现。HNS是一个复杂的僵尸网络,它使用P2P与节点/其他受感染设备进行通信以接收命令。在这篇文章中,我将讨论Mirai代码在HNS中的使用方式。
二、Mirai Bot回顾
原始Mirai恶意软件具有以下组件:
· Bot——通过暴力攻击感染并传播到物联网设备,联系命令和控制服务器(C2)以接收来自僵尸网络主机/用户的命令,对指定目标启动DoS攻击。
· 命令和控制服务器——用于控制受感染的物联网设备,对指定目标发起DDoS攻击。
· 报告服务器——侦听来自受感染的IoT设备的报告,此报告包含新受害者的IP和登录凭证。
· Loader——将bot加载到新的受害设备。
图1. Mirai工作模式
在这篇文章中,我们只关注bot。Mirai bot有三个主要模块:
· Attack ——攻击模块包含各种DoS攻击方法(UDP,TCP,HTTP)。
· Killer ——杀死进程(telnet,SSH,HTTP,其他bot)。
· Scanner——生成一个随机IP地址列表,在僵尸网络中暴力使用。
图2. Mirai的主要模块
三、Hide ‘N Seek Bot及Mirai代码重用
HNS于2018年1月被发现,它比Mirai更复杂,因为它以复杂和分散的方式进行通信(定制的P2P通信),以便接收命令执行其各种恶意程序。HNS不会发起DoS攻击,但具有传输数据和执行其他代码的功能。
乍看之下,很难注意到Hide'N Seek正在使用一些Mirai模块,特别是如果没有阅读Mirai源代码或者之前未分析Mirai二进制文件。有一些很棒的IDA插件,可以使用它们来识别二进制文件中是否具有相似函数。但是,在这个样本上他们不能为我所用,所以我不得不手动进行分析。
如果尝试编译Mirai源代码,就会注意到它的加密字符串存储在已编译的ELF二进制文件的只读数据段(.rodata)中。考虑到这一点,我开始检查HNS二进制文件的.rodata段以查找可能的加密字符串。
图3. .rodata 段可能包含加密的字符串
当我检查了其中一组数据的代码引用时,指向这个数据的指针,作为第一个参数传递给同一个函数。这让我觉得该函数可能是一个解密函数。
图4.代码片段显示指向某数据的指针作为参数传递给同一函数
进入函数之后,看到它确实是一个解密程序。解密从硬编码的单字节异或key开始。该key与字符串的第一个字节异或,然后将结果添加到key中。XOR结果与key的和作为第二个字节的key,后续过程依此类推。从分析的二进制文件中看到了两个不同的key(0xA(ARM)和0xA0(x64)),但这都可以更改。
图5.解密函数
为使字符串解密更容易一点,可以写一个简单的IDA python脚本来自动查找加密字符串的地址,然后应用解密算法。也可以使用此脚本来添加注释以包含解密的字符串。
图6. 解密字符串
现在我们可以看到庐山真面目了,其中一些字符串很熟悉。Mirai中也发现了一些相同的字符串。
图7. Mirai 配置表
解密这些字符串后,只需检查对这些字符串的引用,然后将它们与原始Mirai源代码中的函数进行比较,就可以很容易地识别出HNS中使用的Mirai函数。
图8. Mirai 中的consume_pass_prompt函数
图9. HNS 中的consume_pass_prompt函数
虽然很多函数都是直接复制的,但也有许多函数被清楚地修改以适应新型恶意软件的需求。HNS有三个主要模块:scanner,进程killer,以及等待来自同级节点连接的函数。
图10. HNS的主要模块: scanner, killer, P2P
其中两个模块scanner和killer模块具有与Mirai scanner和killer模块非常相似的代码结构。
对于killer模块,它们都会终止与其他bot相关的进程,如QBOT,Zollard甚至Mirai本身。
图11. HNS终止其它bot
一个区别是HNS不会直接终止与HTTP,telnet和SSH相关的进程(通过端口号)。相反,攻击者可以在运行时指定一个端口号。与此端口相关的进程将被终止。
图12. HNS 终止与指定端口相关的进程
对于scanner,他们都会生成随机IP地址列表来搜索潜在的受害者。主要区别在于端口扫描和攻击方法的使用。HNS通过启动原始套接字SYN连接随机扫描端口80,8080,2323,9527,23。一旦与Mirai建立连接,它将通过telnet使用硬编码的证书列表暴力破解进入设备。一旦成功,它可以通过多种方法将自己加载到设备上,例如echo,HTTP和TFTP。与HNS不同,在Mirai中,loader是一个单独的二进制文件,而其他Mirai修改版则将loader嵌入其中。
图13. HNS 随机选择端口扫描
我分析的样本中HNS至少使用了三个漏洞,两个用于传播。其中一个目标是Netgear DGN DSL调制解调器/路由器(也被Reaper bot使用),而另一个目标则是TP-Link路由器。原始Mirai不使用漏洞传播,其他修改版使用其他各种漏洞传播。
图14. HNS中的Netgear DGN DSL modem/router利用
图15. HNS中的TP-Link router利用
在通过telnet成功登录到ZyXEL PK5001Z调制解调器后,第三个(CVE-2016-10401)漏洞使用su将密码为zyad5001的用户提权到root。
图16.HNS中的CVE-2016-10401
四、HNS其它细节
本文不关注HNS恶意软件本身。相反,本文描述了在HNS中如何使用Mirai代码。这使我们可以研究如何使用这种技术来寻找其他使用Mirai代码的恶意软件。但是,这里也必须提到HNS的一些非常棒的功能。例如,HNS使用随机生成的UDP端口或运行时指定的端口与对等设备或其他受感染设备建立定制的P2P通信。与Mirai不同,Mirai旨在针对某些目标发起DoS攻击,但这种物联网恶意软件通过对等方接收命令来传输数据并执行其他代码。这种P2P通信使得恶意软件更难以分析。接收命令的分散方式也使得很难确定命令从哪里发出以及数据放置点的位置。
图17.P2P命令代码片段
五、总结
正如过去看到的,恶意软件源代码泄漏导致更多恶意软件被开发出来。而现在Mirai源代码泄露也正在经历同样的过程,所以我们看到的新型恶意软件系列很可能利用了Mirai源代码。
与往常一样,通过使用从这项研究中获得的知识,FortiGuard实验室的工作人员将继续观测、寻找使用Mirai源代码的恶意软件。