在该地图中颜色越深,代表感染的设备越多,可以看出感染Mirai最多的几个国家有美国、中国和澳大利亚。
Mirai源码分析
Mirai源码是2016年9月30日由黑客Anna-senpai在论坛上公布,其公布在github上的源码被star了2538次,被fork了1371次。
Mirai通过扫描网络中的Telnet等服务来进行传播,实际受感染的设备bot并不充当感染角色,其感染通过黑客配置服务来实施,这个服务被称为Load。黑客的另外一个服务器C&C服务主要用于下发控制指令,对目标实施攻击。
通过我们对僵尸源码的分析发现,该僵尸具备如下特点:
(1)黑客服务端实施感染,而非僵尸自己实施感染。
(2)采用高级SYN扫描,扫描速度提升30倍以上,提高了感染速度。
(3)强制清除其他主流的IOT僵尸程序,干掉竞争对手,独占资源。比如清除QBOT、Zollard、Remaiten Bot、anime Bot以及其他僵尸。
(4)一旦通过Telnet服务进入,便强制关闭Telnet服务,以及其他入口如:SSH和web入口,并且占用服务端口防止这些服务复活。
(5)过滤掉通用电气公司、惠普公司、美国国家邮政局、国防部等公司和机构的IP,防止无效感染。
(6)独特的GRE协议洪水攻击,加大了攻击力度。
Mirai感染示意图:
上图简单显示了Mirai僵尸的感染过程,与普通僵尸感染不同的是,其感染端是通过黑客服务端实施的,而不是靠bot来实施感染。
受感染的设备端的 bot程序通过随机策略扫描互联网上的设备,并会将成功猜解的设备用户名、密码、IP地址,端口信息以一定格式上传给sanListen,sanLiten解析这些信息后交由Load模块来处理,Load通过这些信息来登录相关设备对设备实施感染,感染方式有echo方式、wget方式和tftp方式。这三种方式都会向目标设备推送一个具有下载功能的微型模块,这个模块被传给目标设备后,命名为dvrHelper。最后,dvrHelper远程下载bot执行,bot再次实施Telnet扫描并进行密猜解,由此周而复始的在网络中扩散。这种感染方式是极为有效的,Anna-senpai曾经每秒会得到500个成功爆破的结果。
bot分析
bot是mirai僵尸的攻击模块,其主要实现对网络服务设备(扫描过程不只针对IOT设备,只要开启Telnet服务的网络设备均不会放过)的Telnet服务的扫描并尝试进行暴力破解,其会将成功破解的设备ip地址、端口、用户名、密码等信息发送给黑客配置的服务器。并且同时接收C&C服务器的控制命令对目标发动攻击。
1、IOT设备防重启
由于Mirai的攻击目标主要设计来针对IOT设备,因此其无法将自身写入到设备固件中,只能存在于内存中。所以一旦设备重启,Mirai的bot程序就会消失。为了防止设备重启,Mirai向看门狗发送控制码0×80045704来禁用看门狗功能。
通常在嵌入式设备中,固件会实现一种叫看门狗(watchdog)的功能,有一个进程会不断的向看门狗进程发送一个字节数据,这个过程叫喂狗。如果喂狗过程结束,那么设备就会重启,因此为了防止设备重启,Mirai关闭了看门狗功能。这种技术常常被广泛应用于嵌入式设备的攻击中,比如曾经的海康威视漏洞(CVE-2014-4880)攻击代码中就采用过这种防重启技术。
这里有个小插曲,2016年8月31日,一位逆向分析人员将此代码判定错误,认为这是为了做延时而用,黑客Anna-senpai在Hackforums论坛公布源码时嘲笑并斥责了该逆向分析人员的错误。
2、进程名隐藏
Mirai为了防止进程名被暴露,在一定程度上做了隐藏,虽然这种隐藏并不能起到很好的作用。Mirai的具体做法是将字符串进行了随机化。
3、防止多实例运行
Mirai同大多数恶意代码一样,需要一种互斥机制防止同一个设备多个实例运行。但Mirai采用的手段有所不同,其通过开启48101端口来防止多个实例运行,具体做法是通过绑定和监听此端口,如果失败,便会关闭已经开启此端口的进程确保只有一个实例运行。这个特点是检测网络设备中是否存在Mirai的最高效的检测方法。