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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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)

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

  List 1 目录构成

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

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

  (图1.Mirai的动作)

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

三、 C&C服务器

◆ Main函数

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

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

  List 2 main.go内的main函数

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

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

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

  List 3 main.go 的initialHandler函数

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

◆ 认证部分

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

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

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

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

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

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

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

◆ 用户管理部分

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

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

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

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

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

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

  List 7 database.go内的CreateUser函数

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

◆ Bot 管理部分

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

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

  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)。

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

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

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

  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)。

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

  List 10 clientList.go的QueueBuf函数

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

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

  List 11 clientList.go内的worker函数

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

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

  List 12 bot.go内的QueueBuf函数

四、Bot(客户端)

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

◆C&C的连接部分

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

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

  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服务器的解析会变得较困难。

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

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

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


本文转自d1net(转载)

相关文章
|
2月前
|
人工智能
歌词结构的巧妙安排:写歌词的方法与技巧解析,妙笔生词AI智能写歌词软件
歌词创作是一门艺术,关键在于巧妙的结构安排。开头需迅速吸引听众,主体部分要坚实且富有逻辑,结尾则应留下深刻印象。《妙笔生词智能写歌词软件》提供多种 AI 功能,帮助创作者找到灵感,优化歌词结构,写出打动人心的作品。
|
2月前
|
机器学习/深度学习 搜索推荐 大数据
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
【10月更文挑战第2天】在处理大规模数据集的推荐系统项目时,提高检索模型的召回率成为关键挑战。本文分享了通过改进特征工程(如加入用户活跃时段和物品相似度)和优化模型结构(引入注意力机制)来提升召回率的具体策略与实现代码。严格的A/B测试验证了新模型的有效性,为改善用户体验奠定了基础。这次实践加深了对特征工程与模型优化的理解,并为未来的技术探索提供了方向。
103 2
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
|
5月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
73 0
|
26天前
|
机器学习/深度学习 自然语言处理 数据管理
GraphRAG核心组件解析:图结构与检索增强生成
【10月更文挑战第28天】在当今数据科学领域,自然语言处理(NLP)和图数据管理技术的发展日新月异。GraphRAG(Graph Retrieval-Augmented Generation)作为一种结合了图结构和检索增强生成的创新方法,已经在多个应用场景中展现出巨大的潜力。作为一名数据科学家,我对GraphRAG的核心组件进行了深入研究,并在此分享我的理解和实践经验。
51 0
|
2月前
|
存储 编译器 C++
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
|
1月前
光纤电缆(FOC)的结构深度解析
【10月更文挑战第21天】
51 0
|
3月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
|
4月前
|
存储 缓存 NoSQL
深入解析Memcached:内部机制、存储结构及在大数据中的应用
深入解析Memcached:内部机制、存储结构及在大数据中的应用
|
3月前
|
监控 安全 网络安全
恶意软件分析:解析与实践指南
【8月更文挑战第31天】
200 0