深度解析:恶意软件“Mirai”源代码的结构及其对策

2016年9月份以来,发生了多起大规模DDoS攻击事件。本文针对这些攻击事件中使用的恶意软件“Mirai”的源代码进行分析,进一步介绍Bot(客户端)的结构,以及其应对方法。

一、 Mirai Botnet是什么

2016年9月13日晚,美国著名安全记者Brian Krebs氏的网站“Krebs on Security”被DDoS攻击,mirai Botnet发动了此次攻击。Mirai主要是以网络摄像头、路由器、数码录像机等IoT设备为跳台进行DDoS攻击。

据受到攻击后Krebs氏的博客报道,保护该网站的Akamai观测到在高峰时期受到了有史以来经历的最大规模攻击近2倍的流量访问。

另外,2016年10月21日Twitter、Netflix等利用DNS服务进行的DDoS攻击,也被推断利用了Mirai僵尸网络。

然后在Krebs氏网站受到攻击后,黑客平台上Mirai的源代码被公开成为了很大的话题。随后源代码又在GitHub上被转载,谁都可以看到具体内容。

源代码被公开,Mirai Botnet以出厂设置的密码未被更改的IoT设备为目标,进行一般的字典攻击扩大感染范围。据说在进行前述的攻击时,也有几十万台的设备受到僵尸网络攻击。

近年来各种各样的IoT设备得到普及,存在漏洞的设备也在不断增加,受到大规模的DDoS攻击的可能性也会增大。另外,通常这些设备采用的架构是不同于个人的电脑等的多种多样的,不过,Mirai可应对ARM、ARM 7、MIPS、PowerPC、SH4、SPARC x86等各种各样的架构,这与大规模感染的扩大有一定关系吧。

本稿中,以现在GitHub上被公开的代码为基础,解说Mirai Botnet的运作,并且反思使家庭及企业的设备远离僵尸网络的自卫对策。

二、 Mirai Botnet的构成

被公开的Mirai Botnet的源代码可大致分为以下3个部分:

1. 攻击者操作的C&C(Command and Control)服务器功能

2. C&C服务器中被操作的Bot功能

3. Bot程序发布的Downloader功能

C&C服务器部分为Go语言,Bot、下载部分以及其他的加密工具等主要为C语言。对照被公开存储的目录,Mirai的构成如下(List 1)

  List 1 目录构成

Mirai Botnet 是攻击者通过①C&C服务器向②Bot发送指令,形成以大量的Bot为攻击对象的C&C中心型僵尸网络。同时,Bot会扫描可感染的设备,将找到的设备信息发送给Report服务器,由③downloader植入Bot程序。(图1)

  (图1.Mirai的动作)

在这里,首先从C&C服务器的代码开始解读Mirai。

三、 C&C服务器

◆ Main函数

由于Mirai的C&C服务器部分为Go语言,最初被执行的mirai/cnc目录中main.go文件内的main函数被读取(List 2)。再者,以下代码中虽然有补充的评语,但是,日语之外的评语是原本就记载的内容。

  List 2 main.go内的main函数

Mirai的C&C服务器起初是建立在Telne服务器与API服务器之间的。“go~”的部分是利用Go语言degoroutine的非同期被处理的部分。

apiHandler函数中的经由API初期化接受来自攻击者的操作处理程序。initialHandler函数中,初期化向连接Telnet的Bot发送指令的处理程序以及实现C&C服务器上指令行接口的处理程序(List 3)。

  List 3 main.go 的initialHandler函数

也就是说,这个C&C服务器的操作可能利用API,也可能通过Telnet连接CLI发送指令。解读源代码的话,无论使用哪个方法都是需要认证的。

◆ 认证部分

从api.go文件种Handle函数内的数据看,送来的要求中含有的apikey没有在C&C服务器内登录的话,能够读取未接收的指令。(List 4)

  List 4 api.go中的Handle函数的认证部分

admin.go中实装的处理程序也同样,在CLI上操作时需要使用用户名和密码登录。(List 5)

  List 5 admin.go中的Handle函数的认证部分

另外,命令行在登录时要求输入俄罗斯语,因此推断制作者或利用者可能是俄罗斯圈的人。

◆ 用户管理部分

那么,怎样才能把这些信息登记在数据库上呢?读取源代码访问C&C服务器上的CLI时,如果是管理者用户的话可以从CLI注册登录(List 6)。

  List 6 admin.go的Handle函数内的用户登录部分

然而,管理员账号本身是预先插入数据库中的,被公开的代码中没有管理员账户登录的相关内容。

另外,数据库的users桌面上,除username及password之外,还有max_bots、last_paid、cooldown、duration_limit等列,这些列被用于创建攻击指令,因此每个用户能够利用的Bot数量、攻击间隔、账号等均受控制。并且,用户向僵尸网络持有者支付金钱的时间等都保存在C&C服务器的数据库中。(List 7)

  List 7 database.go内的CreateUser函数

综上所述,是否可以认为Mirai Botnet的所有者使不特定的多数人以金钱等交换利用了僵尸网络呢。

◆ Bot 管理部分

接下来,看看Bot管理部分吧。首先从Bot连接C&C服务器的话,main.go文件中的initialHandler函数中NewBot.Handle函数被唤起,根据Handle函数的处理Bot信息将被添加到列表中(List 8)。

  List 8 bot.go内的Handle函数

存储Bot信息的clientList是全球变数,main.go内运行main函数之前就被制作了。另外, clientList在新制作的时候,非同步接收的Worker制作Bot指令,等待Bot指令。

◆ 攻击指令的制作部分

接下来,以攻击者C&C服务器的输入为基础,看看Bot指令的制作部分吧。在API、CLI等输入指定攻击种类·攻击对象的命令,便会在attack.go内的NewAttack函数内完成应对接受指令的Flag设置。在同文件夹中的attackInfoLookup Map内定义了可能利用的攻击种类(表1)(List 9)。

  表1 Mirai Botnet可执行的攻击种类

  List 9 attack.go内attackInfoLookup Map

从表1了解到,Mirai可使Bot受到各种各样的DDoS攻击。

另外,VSE平台攻击中被瞄准的游戏引起“Source Engine”是非常有人气的一款在线游戏“反恐精英”中使用的引擎。这样被特意定义,由此可见这样的在线游戏可能被作为攻击的目标。利用GRE等次要的协议进行攻击是有可能的,因此Mirai可回避一般的DDoS攻击对策。

然后把这些攻击Falg设定组装后,同文件的Build函数内将这些攻击设定为二进制向Bot发信。这样就可以向Bot完成数据的发送。

◆ 指令发送部分

最后,看看从C&C服务器向Bot发送指令的流程吧。二进制的攻击设定移交至clientList.go文件内的QueueBuf函数,如名字所示保持Bot的指示被放置在缓冲区列队中(List 10)。

  List 10 clientList.go的QueueBuf函数

接收信息的atkQueue频道从持有的Bot信息列表到攻击者可利用的Bot上线数为止在Bot单体的缓冲区排列攻击设定。

  List 11 clientList.go内的worker函数

然后,排列的攻击设定最终会被发送到Bot单体(List 12)。

  List 12 bot.go内的QueueBuf函数

四、Bot(客户端)

接下来,看看Bot客户端的运作吧。由于客户端是C语言编写的,首先让我们从mirai/bot目录以下的main.c开始解读吧。

◆C&C的连接部分

main.c内的main函数里,启动后本身的过程名伪装成随机的名字,无线循环地呼出establish_connection函数,将加密的C&C服务器的域名和Bot解密后连接在一起(List 13)。

  List 13 main.c内的main函数与establish_connection函数

在这里,establish_connection函数里名为resolve_fudc函数被同文件内anti_gdb_entry函数替换,所以实际上也被称作resolve_cnc_addr函数(List 14)。

况且,C&C服务器的域名中,对table.c文件中被定义为“0xdeadbeef”的值实施seed值XOR加密,C&C服务器的解析会变得较困难。

  List 14 main.c内的anti_gdb_entry函数与resolve_cnc_addr函数

成功连接后,Bot向C&C服务器中发送二进制“

本文转自d1net(转载)

时间: 2024-09-15 13:17:26

深度解析:恶意软件“Mirai”源代码的结构及其对策的相关文章

黑客公布物联网僵尸网络恶意软件Mirai源代码

物联网(IoT)为黑客提供了广阔的攻击来源,以往发起DDoS攻击的多是僵尸主机或数据中心里的服务器,然而这种现状正在被打破,联网摄像头.家用路由器以及ARM-Based的物联网设备正在成为黑客发起攻击的来源.物联网僵尸网络病毒"Mirai"在上月参与发起了针对KrebOnSecurity安全站点的大规模分布式DDoS攻击,新一类僵尸网络从各种容易被感染的物联网设备中发起,流量巨大防不胜防.本周五,黑客论坛Hackforums公布了这一名为"Mirai"的物联网僵尸网

黑客公布针对物联网僵尸网络恶意软件“Mirai”源代码

物联网(IoT)为黑客提供了广阔的攻击来源,以往发起DDoS攻击的多是僵尸主机或数据中心里的服务器,然而这种现状正在被打破,联网摄像头.家用路由器以及ARM-Based的物联网设备正在成为黑客发起攻击的来源.物联网僵尸网络病毒"Mirai"在上月参与发起了针对KrebOnSecurity安全站点的大规模分布式DDoS攻击,新一类僵尸网络从各种容易被感染的物联网设备中发起,流量巨大防不胜防.本周五,黑客论坛Hackforums公布了这一名为"Mirai"的物联网僵尸网

深度解析将近二年的老站

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 昨天有幸加入了浙江站长群,在里面听到一位站长在那诉苦,为什么自己的网站建站将近2年的时间,为何百度权重为0,谷歌PR为0,当时我粗略的看了一些,确实存在不妥的地方,今天刚好有时间,我将对这个老站,做一个深度的解析(高高手可以飘过) 首先我们来看下,这个网站在站长之家的综合查询 大家可以从上图看到一些关于这个网站的基本信息 首先看到,SEO信息

CSS 继承深度解析

本文讲的是CSS 继承深度解析, 我酷爱模块化设计.长期以来我都热衷于将网站分离成组件,而不是页面,并且动态地将那些组件合并到界面上.这种做法灵活,高效并且易维护. 但是我不想我的设计看上去是由一些不相关的东西组成的.我是在创造一个界面,而不是一张超现实主义的照片. 很幸运的是,已经有一项叫做 CSS 的技术,就是特意设计用来解决这个问题的.使用 CSS,我就可以在 HTML 组件之间到处传递样式,从而以最小的代价来保证一致性的设计.这很大程度上要感谢两个 CSS 特性: 继承, 层叠 (CSS

“红遍全球”的恶意软件Mirai,你所需要知道的那些事

据网络安全公司flashpoint对美国断网事件的调查发现,黑客操控感染了恶意软件Mirai的物联网设备发起了DDOS攻击,影响波及Twitter.Reddit等知名网站,强大的攻击流量甚至使域名服务商DYN多地网络服务直接中断.恶意软件Mirai就是此次攻击的罪魁祸首. 让我们随着FreeBuf来简单了解一下Mirai吧! 1 Mirai以物联网设备(IoT)为感染目标形成僵尸网络 Mirai通过感染那些存在漏洞或内置有默认密码的IoT设备,像"寄生虫"一样存在设备中,操控它们,针对

《深入理解Android》一1.3 WebKit源代码目录结构

1.3 WebKit源代码目录结构 WebKit源代码在Android全源码的external/webkit/Source目录下.主要关注如下4个目录: (1)JavaScriptCore WebKit的默认JavaScript解析引擎,也是Safari使用的JavaScript解析引擎.在Android平台已经启用V8作为JS引擎,Android 4.0以后只用到了JavaScriptCore中的WTF(Web Template Library)部分代码. (2)WebCore WebCore

【独家干货】深度解析:大数据时代的新闻挖掘

内容摘要李涓子副所长从以时间和知识为核心的新闻挖掘和服务入手,对大数据时代的新闻挖掘工作进行了深度解析. 演讲正文: 非常高兴有机会跟大家交流.虽然我做的是和新闻挖掘相关的工作,但是感觉自己新闻传播方面的知识还非常欠缺,非常希望跟在座的各位老师合作. 我今天的题目是以事件和知识为核心的新闻挖掘与服务.我把我们做的工作和我在这方面浅显的认识介绍给大家. 我们现在处于富感知多源信息交汇的时代,有媒体信息.个人信息.公开信息.我们如何去更好的利用这些信息是我们现在一个问题.过去的新闻传播是用户与媒体之

深度解析javascript中的浅复制和深复制

     在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有 Number,Boolean,String,Null,Undefined,Object五种类型.而Object又包含Function,Array 和Object自身.前面的五种类型叫做基本类型,而Object是引用类型.可能有人就要问,为什么要分基本类型和引用类型呢?后面你就会明白的.      我们首先来看看浅复制和深复制的简洁定义: 深复制:直接将数据复制给对应的变量 浅复制:将数据的地

深度解析如何做好页面SEO优化

页面seo优化在站内优化中占了很大一部分.那么如果做好页面优化呢?页面优化具体包括哪些细节部分优化呢?今天天津seo研究中心的tjseoer老师为大家做深度解析. 一.页面优化首先是标题title 标签 1.标题要紧扣文章中心内容,且标题的唯一独特性,目的可以让浏览者一看标题就知道内容是关于什么的,也是对搜索引擎的友好; 2.为标题加H1标签,同时标题出现的位置出现在<head>之后最好,为了搜索引擎最快找到标题. 3.标题字数控制在32字以内,多了在搜索结果里也无法显示.以及关键词出现的位置