Miari部分代码分析

关于Mirai僵尸病毒攻击分析报告

前言

2016年10月21日,美国东海岸地区遭受大面积网络瘫痪,其原因为美国知名域名解析服务提供商DYN公司当天受到强力的DDoS攻击。该厂商为Github、Twitter、Paypal等著名网站提供DNS服务,所以该天遭到攻击时,用户无法通过域名访问这些站点。
此次网络宕机时间的罪魁祸首是大量的物联网设备,包括联网的摄像头和数字录像机,这些设备可能因遭到黑客劫持而被利用,而控制这些设备的恶意程序是一款名为Mirai的僵尸病毒,通过恶意感染,这些物联网装置将成为僵尸网络中的肉鸡设备,并被用于实施大规模DDoS攻击。
Mirai僵尸病毒的源码首次公布是在Anna-senpai上面,之后迅速被放到github上,到目前为止已有接近3000次fork和5000多次的点赞:

该僵尸病毒由Go语言编写而成,通过查看源代码,可以看出黑客有着良好的编程规范,代码易于阅读。
总的说来,Mirai僵尸病毒威胁范围极大,也极其危险,笔者所在的Capsheaf 威胁情报小组(CTI)希望通过还原该病毒的攻击过程及关键代码分析为广大互联网使用者提供一些对该病毒防范的见解帮助。

Mirai僵尸病毒介绍

Mirai僵尸病毒特点
与一般的僵尸病毒感染不同,本次的Mirai僵尸病毒有着以下全新的特点:

  1. 并非僵尸肉机传递病毒进行感染,而是通过黑客服务器端进行感染。
  2. 采用高级SYN扫描,扫描速度提升30倍以上,提高了感染速度。
  3. 拥有killer.c文件,该文件可以清除其他主流IOT僵尸程序,通过关闭一些响应端口干掉竞争对手,独占资源。例如清除QBOT、Zollard、Remaiten Bot、Anime Bot以及其他僵尸。
  4. 服务器通过Telnet成功连接僵尸主机,之后便强制关闭Telnet服务,以及其他入口如:SSH和web入口,并且占用服务端口防止这些服务复活。
  5. 之后受感染的僵尸主机可以通过wget、tftp等命令从服务器上下载Bot程序,等待C&C服务器发布攻击指令,进行各种泛洪,DDoS攻击。
  6. 过滤掉通用电气公司、惠普公司、美国国家邮政局、国防部的个公司和机构的IP,防止无效感染。
  7. 独特的GRE协议洪水攻击,加大了攻击力度。
    攻击原理及步骤
  8. 黑客在黑客服务器上运行loader,loader开始对公网上的物联网设备(本次实验主要是利用ubuntu16.04进行实验)进行telnet爆破(弱口令设备易被爆破)。
  9. 爆破成功后,远程执行命令,使肉机从文件服务器上下载Mirai的BOT恶意程序。
  10. 检测是否可以使用wget和tftp命令,若不行则使用dlr程序下载mirai病毒
  11. 肉机运行mirai病毒,主动与C&C服务器进行通信。
  12. C&C服务器下发DDoS、传播指令给肉机,后者执行相应的操作。

在这里插入图片描述图1 mirai攻击流程

Mirai僵尸病毒源代码分析

Loader代码分析

1. Loader/main.c
在编译之后,loader部分最重要的是main.c文件,其中主要调用了五个核心函数:binary_init()、server_create()、fgets()、telnet_info_parse()、server_queue_telnet(),功能依次为:加载dlr、多线程发起telnet请求、循环读取telnet返回信息、解析telnet返回信息、远程执行恶意操作。

在这里插入图片描述
图2 loader/main.c 关键代码

2. Binary_init分析
binary_init在binary.c文件里被定义,首先会调用glob遍历bins下的所有平台对应的下载程序dlr.*,随后调用load函数加载各平台的dlr程序。

在这里插入图片描述
图3 binary_init关键代码
3. dlr分析

dlr的作用就是在目标设备无法使用wget、tftp命令时,使用它来下载病毒。从代码来看,主要是使用socket获取目标IP来下载mirai病毒。首先调用open创建dvrHelper文件,然后使用socket连接黑客的文件服务器,获取[ip]/bins/mirai的数据,写入到dvrHelper文件中。

在这里插入图片描述
图4 dlr/main.c 关键代码
4. server_create分析

该函数位于server.c文件中,主要功能为创建多个后台线程,进行telnet爆破。

在这里插入图片描述
图5 server.c/server_create关键代码
5. telnet_info_parse分析

telnet_info_parse位于telnet_info.c文件中,进行telnet解析。提取出目标设备的信息:IP、端口、用户名、密码、设备平台

在这里插入图片描述

图6 telnet_info.c/telnet_info_parse关键代码

6. server_queue_telnet分析

最后执行下载mirai僵尸病毒的操作,其中TELNET_COPY_ECHO的作用为拷贝/bin/echo到当前目录,TELNET_DETECT_ARCH的作用为探测目标设备的操作系统。

在这里插入图片描述
图7 server.c/server_queue_telnet关键代码
下面是几个下载文件所定义的方法,分别为UPLOAD_ECHO、UPLOAD_WGET、UPLOAD_TFTP,分别表示使用dlr、wget、tftp下载mirai病毒。

CNC代码分析

8. main.go分析
cnc为跑在C&C服务器上的僵尸网络服务端,用于下发C&C命令。它会监听两个端口:23和101。23端口有两个通信用途:肉鸡上传信息和管理员配置信息,分别对应NewBot和NewAdmin函数。101端口的用途为供攻击用户发送攻击指令,对应NewApi函数。可能有点绕,什么是攻击用户?就是说这个C&C服务器相当于一个攻击平台,黑客搭了这个C&C服务器后,可以向暗网中的用户租售DDoS服务,用户交了钱后,黑客将发送一个攻击账号给用户,用户使用该账号登陆101端口的攻击平台,就可以指定要DDoS的IP实施攻击了。如下还是main.go文件的代码。

在这里插入图片描述
图8 cnc/main.go关键代码

在这里插入图片描述
图9 cnc/main.go关键代码

2. NewBot分析

NewBot位于bot.go中,用于接收肉鸡上传上来的版本信息、平台类型。
在这里插入图片描述
图9 cnc/bot.go/NewBot关键代码

3. NewAdmin分析

NewAdmin位于admin.go文件,用于黑客远程添加账号名、账号密码和僵尸主机数量。

在这里插入图片描述
图10 cnc/admin.go/NewAdmin关键代码

4. NewApi分析

NewApi是对NewAttack的封装,后者用于给肉鸡下发DDoS命令,该函数位于attack.go中,下图为DDoS攻击包的构造参数Flag。通过对这些flag的自由搭配,构造出各个DDoS攻击包,入、如:UDP flood、DNS flood、SYN flood等等。

在这里插入图片描述
图11 cnc/admin.go/NewApi关键代码

在这里插入图片描述
图12 cnc/admin.go/NewApi关键代码

BOT代码分析

1. main.c分析
main.c代码首先会进行一些净化环境的操作,先调用ensure_single_instance确保当前状态下的唯一运行,避免开启多个病毒程序。然后还会隐藏argv0、process、 name等操作。

在这里插入图片描述
图13 bot/main.c关键代码
净化了环境后,代码开始调用attack_init和kill_init开始进行核心的恶意操作了。

在这里插入图片描述
图14 bot/main.c核心恶意操作

2. kill_init分析

主要用于排除异己,杀掉一些端口对应的服务,如下图,它会杀死23、22、80端口的进程。

3. attack_init分析

attack_init在attack.c中,主要用于初始化各种DDoS攻击包。

在这里插入图片描述
图 16 bot/main.c/kill_init关键代码

在这里插入图片描述
图17 bot/main.c/attack_init关键代码
发送各种DDoS攻击包的实现代码在attack_app.c、attack_gre.c、attack_tcp.c和attack_udp.c中,分别http、gre、tcp、udp泛洪攻击的代码。

在这里插入图片描述
图18 包含的常用攻击

猜你喜欢

转载自blog.csdn.net/weixin_32223733/article/details/89452649
今日推荐