物联网僵尸Mirai源码分析和沙箱运行演示

华盟原创文章投稿奖励计划

本文仅供安全研究者分析交流,任何非法使用Mirai后果自负

安全事件回顾

2016 年 10 月 21 日 11:10 UTC ( 北京时间 19:10 左右 ) ,一场大规模的互联网瘫痪席卷了美国,恶意软件 Mirai 控制的僵尸网络对美国域名服务器管理服务供应商 Dyn 发起 DDOS 攻击,从而导致许多网站在美国东海岸地区宕机。

你可能没有听说 Dyn,但你一定知道这些网站,如 GitHub、Twitter、PayPal 等。Dyn 为这些著名网站提供基础的 DNS 服务,当其受到攻击时,用户无法通过域名访问这些站点。

下图红色部分为遭受攻击影响网络的地区:

dyn.png

恶意软件Mirai是什么?

造成此次网络宕机事件的罪魁祸首,是大量的物联网设备,包括联网的摄像头和数字录像机,这些设备可能因遭到黑客劫持而被利用,而控制这些设备的恶意软件名为Mirai,Mirai 软件能够感染各类存在漏洞的物联网设备,其中包括安保摄像头、DVR 以及互联网路由器等,通过恶意感染,这些物联网装置将成为僵尸网络中的肉鸡设备,并被用于实施大规模 DDoS 攻击。

Mirai源码曝光

git_src.png

十月份Mirai源码在hack论坛被披露,很快被放到github上,并被大量fork和点赞,大家纷纷一窥Mirai为何物,大量关于Mirai的分析文章如雨后春笋,偶尔有关于Mirai源码的分析出现,但是也只是针对代码表层分析,而且只涉及到bot部分的C语言代码披露,对于更引人入胜的命令和控制中心(Command and Control,简称C&C或CnC),则无人给出研究结果,笔者猜想可能原因有二,一是大家对C&C部分没有引起足够重视,把关注点放在被控Bot部分,二是很多安全从业人员都是C语言出身,而Mirai的C&C是用Golang语言编写,对Golang不熟悉,导致没有对C&C做过多的分析。

笔者所在的网安无忧安全团队掌握至少十种主流编程语言,笔者最喜欢的语言恰恰是Golang,尽管有十多年的C和C++经验,但是很快就变成了Go粉,在此也推荐大家学习一下Go语言,谷歌出品,必属精品!

言归正传,对于bot端源码分析不做赘述,FreeBuf已有分析,我们就分析一下Mirai僵尸网络的C&C,从僵尸网络的大脑入手,看看Mirai是如何控制全球几十万的Bot,以及如何发动DDoS攻击。

Mirai僵尸网络结构

关于Botnet僵尸网络结构,请参考网安无忧团队写的文章《从某云服务商溯源黑客老巢:实例讲解Botnet僵尸网络和DDoS》,Mirai僵尸网络也是具有同样的网络结构。

botnet.png

Mirai僵尸网络参与者角色

作为盈利性的僵尸网络,Mirai有admin和普通user两种用户角色,admin是僵尸网络管理员,admin把僵尸网络售卖给普通user,并根据购买的bot数量定价,这些都可以从C&C代码里得出,而且数据库里有个last_paid时间戳字段,即上次支付时间,每个普通user有自己的登录僵尸的密码,admin管理员通过命令adduser分配普通用户信息并记录到数据库。

明确了不同的角色,就可以更好地理解C&C源码了,因为源码里很多地方是根据角色进行代码分支处理的。

本文中演示的Mirai运行和攻击都是在本地沙箱测试环境中执行,从源码分析到运行分析还有一段距离,故文中省略运行环境搭建部分,以防被非法利用Mirai。

CnC源码:

CC的源码不多,只有8个文件,文件命名也很规范,基本上看到文件名就知道是干什么的了,可见黑客编码还是挺规范的。

go_src.png

程序编译和执行:

需要先安装go编译器,然后配置GOPATH和GOROOT环境变量。

$ go build -o release/cnc  cnc/*.go

$ ./release/cnc

C&C执行流程:

CC启动后监听23和101端口,23端口是管理控制台端口,101端口给普通user发动快捷DDoS使用。

go_src2.png

flow1.png

运行C&C后,先打印出一些俄语,故猜测黑客是俄罗斯人,至少也是懂俄语的人。输入登录用户信息,然后验证后进入僵尸网络控制台。

client2.png

添加售卖用户:

这里示例起见,添加一个test用户,并卖给他100个僵尸:

adduser.png

test用户登录僵尸网络:

和admin一样都是登录23端口,验证过程和登录界面一样,不过普通用户无法执行adduser命令。

test_user.png

DDoS攻击指令解析

进入botnet#控制台后,用户就可以输入DDoS攻击指令了,Mirai定义了一些命令,已经输入?在线查询攻击指令用法,可见黑客为玩家小白用户考虑的还是比较贴心的。

攻击指令有vse, stomp, grepip, udpplain, http, dsn, syn, ack等.

client6.png

而且对于攻击指令的每个字段都可以输入?查询帮助,这点算是做的很到位。

client7.png

发动攻击:

用户在botnet#控制台输入攻击指令,然后程序NewAttack构造atk攻击对象,再调用Build()构造和Bot通信的私有网络协议数据,然后发送给客户端Bot,Bot要执行反过程,解析cmd,然后再执行命令。

attack_build.png

HTTP攻击示例:

先查看攻击命令。

http.png

然后CC发起HTTP攻击命令,Bot端收到CC命令如下:

attack.png

在攻击的同时用tcpdump抓包,可以看到大量的并发HTTP请求,如果是几十万的Bot同时发起HTTP攻击,则目标网站很容易被搞垮了,这就是分布式攻击的威力。

http_attack.png

端口101用法比较简单,就是快捷发起一次攻击,比如test用户对目标MySQL数据库的3306端口发起TCP syn攻击,C&C返回OK,然后test用户名下的bot即开始干活了

api.png

api2.png

点评Mirai

Mirai僵尸网络和《从某云服务商溯源黑客老巢:实例讲解Botnet僵尸网络和DDoS》文中讲解的具有同样的网络结构,但是它们的通信协议不同,Mirai采用自定义的私有通信协议,另者采用的是基于IRC协议,孰优孰劣,读者自有定论。Mirai的CC采用Go开发,Go是高并发高性能服务端开发利器,所以几十万的Bot在线也易于控制。此外Mirai的bot还可以扫描其它弱口令设备,达到洪泛扩散效果,总之,如果Mirai能基于IRC堪称完美,IRC的优点是服务器天然存在,分布世界各地,而且channel隐蔽,可以随意建立,更重要是GUI图形化界面管理bot。

结束语

Mirai源码中掺杂一些俄语,黑客很可能是俄罗斯人,但是这次DDoS攻击事件中莫名背锅受害的是生产网络设备的中国企业,此次安全事件充分暴露了国内一些企业安全意识薄弱,对于产品出厂前没有进行安全检测和评估,导致流向市场后被黑客利用,最终损害了企业的声誉和利益,希望此次事件能引起国内企业重视,网安无忧科技的安全检测评估系统可以帮助企业发现安全隐患,防患未然。

本文原创,作者:congtou,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/26967.html