1. 概述
Mirai病毒是物联网病毒的鼻祖,由于其具备了所有僵尸网络病毒的基本功能(爆破、C&C连接、DDoS攻击),后来的许多物联网病毒都是基于Mirai源码进行更改的。所以对研究Mirai的源码可以让我们对物联网病毒有个全面的了解。
项目地址:https://github.com/jgamblin/Mirai-Source-Code
2. 攻击流程
1.黑客在黑客服务器上运行loader,loader开始对公网上的物联网设备进行telnet爆破。
2.爆破成功后,远程执行命令,使肉鸡从文件服务器上下载mirai病毒。
3.检测是否可以使用wget和tftp命令,若不行则使用dlr程序下载mirai病毒。
4.肉鸡运行mirai病毒,会主动跟C&C服务器进行通信。
5.C&C服务器下发DDoS、传播指令给肉鸡,后者执行相应的操作。
3. 源码分析
源代码包含5个核心程序:loader、bot、dlr、cnc、tools。
loader:黑客攻击程序,运行在黑客电脑上,主要功能为telnet爆破。
bot: 被爆破成功后,肉鸡下载的病毒程序,主要功能为telnet弱密码扫描、DDoS攻击。
dlr: 下载程序,被包含在loader中,只要功能是,当目标设备不支持wget、tftp命令时,使用dlr程序下载mirai病毒。
cnc: Go语言开发的肉鸡控制程序,运行在C&C服务器上。主要功能为接受黑客指令、控制肉鸡发起DDoS。
tools: 几个单独的工具,黑客自己使用。包括wget、禁止mirai被gdb、数据加解密、接受爆破的telnet用户名密码等。
4. loader分析
4.1 main分析
下图为loader的main.c的代码,主要调用了5个核心函数:binary_init、server_create、fgets、telnet_info_parse、server_queue_telnet,功能依次为:加载dlr、多线程发起telnet请求、循环读取telnet返回信息、解析telnet返回信息、远程执行恶意操作。
4.2 binary_init分析
binary_init在binary.c文件里,首先会调用glob遍历bins下的所有平台对应的下载程序dlr.*,然后调用load加载这些程序。
4.3 dlr分析
我们顺势来看看 dlr是什么来的,查看其代码dlr/main.c,代码功能一目了然,就是使用socket从目标IP下载 mirai病毒。首先调用open创建dvrHelper文件,然后使用socket连接黑客的文件服务器,获取[ip]/bins/mirai的数据,写入到dvrHelper文件中。dlr的作用就是,在目标IoT设备无法使用wget、tftp命令的时候,使用它来下载mirai病毒。
4.4 server_create分析
server_create在server.c中,功能为创建多个后台线程,进行telnet爆破,爆破的实现代码如下。
4.5 telnet_info_parse分析
telnet_info_parse位于telnet_info.c文件中,解析telnet的原理很简单,就是通过冒号间的顺序进行隔断,提取出目标设备的信息:IP、端口、用户名、密码、设备平台。
4.6 server_queue_telnet分析
函数经过层层封装,最后执行的是下载 mirai的操作,server_queue_telnet -> server_telnet_probe -> *worker -> handle_event,都在server.c中。handle_event里包含了所有远程执行的命令,如下TELNET_COPY_ECHO的作用为拷贝/bin/echo到当前目录,TELNET_DETECT_ARCH的作用为探测目标设备的操作系统。
然后是核心的下载命令,分别为UPLOAD_ECHO、UPLOAD_WGET、UPLOAD_TFTP,功能分别为使用dlr、wget、tftp下载mirai病毒。
5. cnc分析
5.1 main分析
cnc为跑在C&C服务器上的僵尸网络服务端,用于下发C&C命令。它会监听两个端口:23和101。
23端口有两个通信用途:肉鸡上传信息和管理员配置信息,分别对应NewBot和NewAdmin函数。101端口的用途为供攻击用户发送攻击指令,对应NewApi函数。可能有点绕,什么是攻击用户?就是说这个C&C服务器相当于一个攻击平台,黑客搭了这个C&C服务器后,可以向暗网中的用户租售DDoS服务,用户交了钱后,黑客将发送一个攻击账号给用户,用户使用该账号登陆101端口的攻击平台,就可以指定要DDoS的IP实施攻击了。如下还是main.go文件的代码。
5.2 NewBot分析
NewBot位于bot.go中,用于接收肉鸡上传上来的版本信息、平台类型。
5.3 NewAdmin分析
NewAdmin位于admin.go文件,用于黑客远程添加账号名、账号密码和僵尸主机数量。
5.4 NewApi分析
NewApi是对NewAttack的封装,后者用于给肉鸡下发DDoS命令,该函数位于attack.go中。下图为DDoS攻击包的构造参数Flag。
通过对这些flag的自由搭配,构造出各个DDoS攻击包,入、如:UDP flood、DNS flood、SYN flood等等。
6. bot分析
6.1 main分析
先来看main.c,代码首先会做一些净化环境的操作,先调用ensure_single_instance确保自己单进程运行,避免重复运行。然后还会隐藏argv0、process name等操作。
净化了运行环境后,代码就开始调用attack_init和kill_init开始进行核心的恶意操作了。
6.2 attack_init分析
attack_init在attack.c中,用于初始化各种DDoS攻击包。
发送各种DDoS攻击包的实现代码在attack_app.c、attack_gre.c、attack_tcp.c和attack_udp.c中,分别http、gre、tcp、udp洪水攻击的代码。
这4个攻击代码的结构都大同小异,这里以tcp和udp为例进行讲解。
6.3 attack_tcp分析
6.4 attack_app分析
6.5 kill_init分析
主要用于排除异己,杀掉一些端口对应的服务,如下图,它会杀死23、22、80端口的进程。
最后,病毒会时刻C&C保持通信,每隔一段时间上报肉鸡信息,以及接收命令。
7. 总结
至此,Mirai病毒源码分析完毕,通过该次分析,可以发现,物联网病毒并没有想象中那么神秘,可以把它们看作低配版Linux病毒。Mirai可以说是一个完美的IoT设备攻击病毒,代码结构清晰健全,以至于后续的IoT病毒都是在Mirai的基础上进行修改的,只不过是多了些IoT设备的漏洞利用功能。由于物联网设备的OS简单,没有较高级的功能,所以目前来说IoT病毒最主要的攻击操作还是DDoS。