Ocean-ng/C2-Backdoor-in-Drone-Fleet-An-End-to-End-Malware-Analysis-and-Risk-Based-Defense-Framework.md
GitHub: Ocean-ng/C2-Backdoor-in-Drone-Fleet-An-End-to-End-Malware-Analysis-and-Risk-Based-Defense-Framework.md
面向无人机/IoT 舰队的恶意软件分析框架,通过隔离沙盒环境复现 C2 后门攻击链路并提供基于 Snort 的风险防御方案。
Stars: 0 | Forks: 0
# 基础设施与实验环境搭建指南
## 1. 虚拟网络配置(沙盒环境)
在创建虚拟机之前,我们必须创建一个私有网络区域,以便这两台机器可以相互通信,而不会泄露到外部网络。
* **网络类型:** LAN Segment(在 VMware Workstation 中)。
* **创建步骤(在 VMware Workstation 中):**
1. 进入 **VM** 标签页 > **Settings** > **Network Adapter**。
2. 点击 **LAN Segments...** 按钮 > 点击 **Add** 并将其命名为 `nhom4`。
3. 点击 **OK**。现在,在 Network Connection 部分,选择 **LAN segment** 选项并为两台虚拟机都选择 `nhom4`。
4. 创建一个额外的网络适配器,以便在需要进一步安装时,能更灵活地在 LAN Segment 和 NAT 之间切换。 -> 点击 **Add** -> **Network Adapter** -> 将 **Network Adapter 1** 设置为 NAT -> 将 **Network Adapter 2** 设置为 LAN segment (`nhom4`)。
**静态 IP:** 由于 LAN Segment 没有自动的 DHCP IP 分配器,我们将建立一个静态子网:`192.168.100.0/24`。通过像这样设置静态 IP,即使机器关机然后再开机,IP 也不会改变。
## 2. KALI LINUX(红队)
这台机器用于构建 Mirai,执行场景 1 的静态和动态分析,并运行 Wireshark 来分析 Mirai 的 Hex 代码,以及在场景 2 中使用 tcpreplay 将数据包注入网络。
* **CPU:** 2 核。
* **内存 (RAM):** 4 GB。
* **硬盘:** 30 GB。
* **网络适配器设置:** 放入 LAN segment:`nhom4`。
* **静态 IP 配置:** (请记住在配置之前仔细检查机器的网卡)
* 将 IP 设置为 `192.168.100.10`。
**在 Kali 上配置静态 IP:**
传统的 Kali Linux 使用 `interfaces` 文件进行网络配置,而不是 netplan。
在 Kali 上打开终端并输入以下命令以检查网卡名称:
```
ip a
```
你会看到 2 个物理网卡:`eth0`(目前从 NAT 获取动态 IP)和 `eth1`(尚无 IP,预留给 LAN Segment)。
使用以下命令打开网络配置文件:
```
sudo nano /etc/network/interfaces
```
滚动到最底部并添加以下配置块,以强制为 `eth1` 网卡分配静态 IP `192.168.100.10`:
```
auto eth1
iface eth1 inet static
address 192.168.100.10
netmask 255.255.255.0
```
*(按 Ctrl+O -> Enter -> Ctrl+X)*
重启网络服务以应用配置:
```
sudo systemctl restart networking
```
查看 VMware 窗口右下角的底部,找到当前为 NAT 的网卡图标,右键点击它并选择 **Disconnect**。
此时,Kali 已完全断开与 Internet 的连接,但命令与控制 软件仍会在 IP `192.168.100.10` 上正常监听。来自 Ubuntu 机器(也将断开 NAT 连接)的 bot 将通过 LAN Segment 平滑且安全地连接到 Kali。
## 3. UBUNTU SERVER 最新版本(蓝队)
这台机器充当受感染的 Drone(接收流量的目标),并同时充当运行 Snort IDS 的监控网关。
* **CPU:** 2 核。
* **内存 (RAM):** 4 GB。
* **硬盘:** 25 GB。
* **网络适配器设置:** 放入 LAN segment:`nhom4`。
* **静态 IP 配置:** (先检查网卡)
* 将 IP 设置为 `192.168.100.20`。因为 Ubuntu Server 使用 CLI,所以它将通过 Netplan 进行配置。
**第 1 步:查找网卡名称。** 打开终端并输入以下命令:
```
ip a
```
此时,将出现 2 个物理网卡(名为 `ens33 up` 和 `ens37 up`;这些名称在你的机器上可能有所不同,因此请仔细检查)。
对于需要输入长命令的步骤,你应该使用 SSH 以提高速度。如果有人遇到 SSH 错误并且无法像这样进行 SSH:
```
C:\Users\admin>ssh phat@192.168.18.136
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
```
你可以按如下方法修复它,因为这是主机密钥验证冲突:
```
ssh-keygen -R 192.168.18.136
ssh phat@192.168.18.136
```
**第 2 步:打开网络配置文件**
```
ls /etc/netplan/
```
该文件将被命名为 `00-installer-config.yaml`。
使用 nano 命令编辑该文件:
```
sudo nano /etc/netplan/00-installer-config.yaml
```
**第 3 步:编辑 IP(注意空格)。** 注意:YAML 文件对空格极其敏感。绝对不要使用 Tab 键;只能使用 Space(空格)键进行缩进:
```
network:
ethernets:
ens33:
dhcp4: true
ens37:
addresses:
- 192.168.100.20/24
version: 2
```
(在此配置中,`ens33` 将自动从 NAT 接收 Internet,而 `ens37` 为 LAN Segment 网络持有固定 IP `192.168.100.20`)。
*(按 Ctrl+O -> Enter -> Ctrl+X)*
**第 4 步:应用配置并输入命令让系统获取 IP:**
```
sudo netplan apply
```
**当需要 Internet 时(下载 Snort 包、更新系统等):** 我们不需要做任何事情。默认情况下,Adapter 1 (NAT) 已连接,虚拟机将有 Internet 连接。
**运行 Mirai 恶意软件时:**
在 VMware 窗口边框的右下角。
你会看到 2 个小电脑图标(对应 2 个网卡)。
将鼠标悬停在每一个图标上以查看哪一个是 NAT。
右键点击那个 NAT 图标 -> 选择 **Disconnect**。
这种方法就像从物理上拔掉 Ubuntu 服务器的互联网网线一样。其中的恶意软件将被完全困在通过 `ens37` 网卡的 LAN Segment 内。同时,由于你没有删除操作系统内的网络配置,因此当你关闭机器时,网络服务不会报错或挂起。
## 4. Ping 测试
在为两台机器设置固定 IP 后,相互进行 ping 测试以检查这 2 台机器是否可以在同一子网内相互连接。
* **Kali:** `ping 192.168.100.20 -c 4`
* **Ubuntu:** `ping 192.168.100.10 -c 4`
# 项目实施
## 1. 防御者机器设置(Ubuntu Server - 蓝队)
这台机器充当 Drone 的“网关”,并在其上安装了入侵检测系统。
**1.1. 更新并安装 Snort。** 在 Ubuntu 上打开终端并输入这些命令:
```
sudo apt update && sudo apt upgrade -y
# 安装 Snort(安装过程会询问子网;请输入你的 Host-Only 子网,例如 192.168.100.0/24)
sudo apt install snort -y
```
**1.2. 检查网卡名称。** 输入命令 `ip a` 查看你的网卡名称(例如,`ens33` 或 `eth0`)。
**1.3. 备份并建立 Snort 配置**
```
# 备份原始配置文件
sudo cp /etc/snort/snort.conf /etc/snort/snort.conf.bak
# 打开配置文件进行编辑
sudo nano /etc/snort/snort.conf
```
在这个文件中,找到 `ipvar HOME_NET any` 这一行并将其更改为 `ipvar HOME_NET 192.168.100.0/24`(替换为你的虚拟网络 IP 子网)。
## 2. 在 Kali Linux 上准备数据和工具(红队)
这台机器将用于 PCAP 分析(协议 RE)以及将流量推入网络以测试 Snort。
**2.1. 安装重放与分析工具集**
```
sudo apt update
sudo apt install tcpreplay tshark -y
```
**2.2. 有 2 种有趣的方法来分析 Mirai:**
* 构建 Mirai 源代码并对其进行分析(在构建和分析期间,你需要切换到 LAN segment)。
一旦你获得了源代码,分析此恶意软件的步骤如下:
从 Src Code 编译成 Malware
一旦你获得了 Malware --> 进行分析。
### 配置 Bot
* 在 Kali 机器上构建
在 `./mirai/bot/table.h` 中,你可以找到有关配置选项的大部分说明。
在 `./mirai/bot/table.c` 中,有几个选项需要更改才能使其正常工作。
* `TABLE_CNC_DOMAIN` - 要连接的 CNC 的域名
* `TABLE_CNC_PORT` - 要连接的端口,已设置为 23
* `TABLE_SCAN_CB_DOMAIN` - 当找到暴力破解结果时,将向此域名报告
* `TABLE_SCAN_CB_PORT` - 为暴力破解结果连接的端口,已设置为 48101。
(*) 将默认的 cnc 域名保留为 `cnc.changeme.com : 23`,并将报告目的地保留为 `report.changeme.com : 48101`。这样在构建完成后,我们就可以直接将其 DNS 重定向到我们想要的服务器。
在 Mirai botnet 系统中,网络通常分为 2 个主要数据流:命令流 (C2) 和感染结果报告流 (Scan Receiver)。
* **`TABLE_CNC_DOMAIN` & `TABLE_CNC_PORT` (端口 23):**
* **含义:** 这是大脑服务器 (C2 Server) 的地址和端口。
* **运行方式:** 当一个 IoT 设备(如 Drone)被恶意软件感染时,它所做的第一件事就是静默连接到此地址(报告它存活的状态),并等待来自黑客的 DDoS 攻击命令。
* **为什么是端口 23?** 端口 23 通常用于合法的 Telnet 服务。Mirai 的作者有意设计 C2 通过端口 23 进行通信,以隐藏流量(将恶意软件流量混入正常的 Telnet 流量中),从而绕过配置松散的防火墙。
* **`TABLE_SCAN_CB_DOMAIN` & `TABLE_SCAN_CB_PORT` (端口 48101):**
* **含义:** CB 代表 Callback。这是专门用于接收“报告”的服务器地址。
* **运行方式:** 当空闲(不进行 DDoS 攻击)时,bot 将不断扫描周围网络,以查找其他密码薄弱的 IoT 设备。如果它成功暴力破解了一台设备(例如,找到了账号 root / 密码 12345),它会立即打包该 IP 和密码,并通过端口 48101 将其发送回此地址。大脑接收到此信息后,随后将使用 Loader 文件去感染该新设备。
**1. 在 Kali Linux 上安装交叉编译器:**
```
sudo apt update
# 安装适用于 ARM 芯片的编译器(在 Drone/Camera 线路上非常常见)
sudo apt install gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf -y
# 安装适用于 MIPS 芯片的编译器(常见于 Routers/Gateways)(你不需要安装这个)
sudo apt install gcc-mips-linux-gnu gcc-mipsel-linux-gnu -y
# 安装适用于 PowerPC 和 SuperH (SH4) 芯片的编译器
sudo apt install gcc-powerpc-linux-gnu gcc-sh4-linux-gnu -y
```
**2. 更正 `build.sh` 中的编译器命令名称**
2016 年的 Mirai 原始源代码使用旧名称调用编译器命令。但在现代的 Kali Linux 发行版中,这些命令已被重命名为新的标准。
你需要打开 `build.sh` 文件并将命令名称更改为你刚刚安装的包相匹配的名称:
```
# 为 x86 编译(Lab Virtual Machine)
gcc -fcommon -std=c99 bot/*.c -DDEBUG $FLAGS -static -g -o debug/mirai.dbg
# 为 MIPS 编译(从 mips-gcc 更改为 mips-linux-gnu-gcc)
mips-linux-gnu-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.mips
# 为 ARMv4 编译(从 armv4l-gcc 更改为 arm-linux-gnueabi-gcc)
arm-linux-gnueabi-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm
# 为 ARMv6/v7 编译(从 armv6l-gcc 更改为 arm-linux-gnueabihf-gcc)
arm-linux-gnueabihf-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm7
# 为 SH4 编译(从 sh4-gcc 更改为 sh4-linux-gnu-gcc)
sh4-linux-gnu-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.sh4
```
因为有一些超出了研究论文范围的不相关内容,我将删除它们。具体来说,是上述 5 次编译中的最后 4 行编译代码。它们都是用于构建对应不同设备上芯片的不同 Mirai 变种。我们只在虚拟化环境中进行测试,因此只要第 1 行能工作就可以了。(此外,这个 src 代码已经有十年的历史了,我怀疑现在是否还有任何 IoT 机器在使用那些芯片系列) => 简而言之,正如 Khang 所说,只需保留第一行,并使用井号注释掉其余部分。
**创建“debug”目录**
```
mkdir debug
```
**安装 Go 语言**
```
sudo apt update && sudo apt install golang -y
```
(*) 因为 src 使用了非常、非常古老的 Go 版本,所以必须采取一些额外的步骤才能成功地完全编译它。
**为项目初始化 Go Module**
现代的 Go 编译器需要一个项目标识配置文件 (`go.mod`) 才能允许下载外部库。
```
go mod init mirai-c2
```
**手动下载缺失的 Go 库**
```
go get github.com/go-sql-driver/mysql
go get github.com/mattn/go-shellwords
```
**在 Kali 上安装数据库管理系统**
```
sudo apt update
sudo apt install mariadb-server -y
sudo systemctl start mariadb
```
**重新运行总体编译命令**
```
chmod +x build.sh
./build.sh debug telnet
```
如果在这一步,任何人遇到类似于 Phat 的这样的错误:
```
┌──(phat㉿nhom4)-[~/Mirai-Source-Code/mirai]
└─$ ./build.sh debug telnet
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/mirai.dbg: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/enc: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/nogdb: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/badbot: No such file or directory
collect2: error: ld returned 1 exit status
```
那么请按照以下步骤操作:
```
──(phat㉿nhom4)-[~/Mirai-Source-Code/mirai]
└─$ cat build.sh | grep -i "debug"
echo "Usage: $0 "
echo "Usage: $0 "
elif [ "$1" == "debug" ]; then
gcc -fcommon -std=c99 bot/*.c -DDEBUG "$FLAGS" -static -g -o debug/mirai.dbg
# mips-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.mips
# armv4l-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm
# armv6l-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm7
# sh4-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.sh4
gcc -std=c99 tools/enc.c -g -o debug/enc
gcc -std=c99 tools/nogdb.c -g -o debug/nogdb
gcc -std=c99 tools/badbot.c -g -o debug/badbot
go build -o debug/cnc cnc/*.go
go build -o debug/scanListen tools/scanListen.go
echo "Unknown parameter $1: $0 "
┌──(phat㉿nhom4)-[~/Mirai-Source-Code/mirai]
└─$
```
```
rm -rf debug
mkdir debug
chmod 777 debug
./build.sh debug telnet
```
完成后,我们会得到这一堆东西:
分别为:
* **`mirai.dbg`**:是刚刚构建的恶意软件。它会扫描 Telnet 端口,暴力破解弱密码,维持与 C2 的连接,并接收执行 DDoS 攻击的命令。我们小组将拿这个进行分析。
* **`enc`**:是加密工具,用于将 IP 和域名加密为 XOR 过的 Hex 字符串。它在黑客的机器上运行(以隐藏其身份)。
* **`nogdb`**:是一个反调试工具。为了防止恶意软件被邪恶的取证分析师解剖和分析。
* **`scanListen`**:位于服务器端,接收来自 bot 群的扫描信号,并将该信息写入数据库。
* **`cnc`**:反派的大脑,这里是存储数据库以及发布命令以指挥“后宫”发起全面攻击的地方。
* **`badbot`**:为黑客模拟可能的场景,以进行测试和修复 Bug。
## 2. KALI LINUX(红队)
这台机器用于构建 Mirai,执行场景 1 的静态和动态分析,并运行 Wireshark 来分析 Mirai 的 Hex 代码,以及在场景 2 中使用 tcpreplay 将数据包注入网络。
* **CPU:** 2 核。
* **内存 (RAM):** 4 GB。
* **硬盘:** 30 GB。
* **网络适配器设置:** 放入 LAN segment:`nhom4`。
* **静态 IP 配置:** (请记住在配置之前仔细检查机器的网卡)
* 将 IP 设置为 `192.168.100.10`。
**在 Kali 上配置静态 IP:**
传统的 Kali Linux 使用 `interfaces` 文件进行网络配置,而不是 netplan。
在 Kali 上打开终端并输入以下命令以检查网卡名称:
```
ip a
```
你会看到 2 个物理网卡:`eth0`(目前从 NAT 获取动态 IP)和 `eth1`(尚无 IP,预留给 LAN Segment)。
使用以下命令打开网络配置文件:
```
sudo nano /etc/network/interfaces
```
滚动到最底部并添加以下配置块,以强制为 `eth1` 网卡分配静态 IP `192.168.100.10`:
```
auto eth1
iface eth1 inet static
address 192.168.100.10
netmask 255.255.255.0
```
*(按 Ctrl+O -> Enter -> Ctrl+X)*
重启网络服务以应用配置:
```
sudo systemctl restart networking
```
查看 VMware 窗口右下角的底部,找到当前为 NAT 的网卡图标,右键点击它并选择 **Disconnect**。
此时,Kali 已完全断开与 Internet 的连接,但命令与控制 软件仍会在 IP `192.168.100.10` 上正常监听。来自 Ubuntu 机器(也将断开 NAT 连接)的 bot 将通过 LAN Segment 平滑且安全地连接到 Kali。
## 3. UBUNTU SERVER 最新版本(蓝队)
这台机器充当受感染的 Drone(接收流量的目标),并同时充当运行 Snort IDS 的监控网关。
* **CPU:** 2 核。
* **内存 (RAM):** 4 GB。
* **硬盘:** 25 GB。
* **网络适配器设置:** 放入 LAN segment:`nhom4`。
* **静态 IP 配置:** (先检查网卡)
* 将 IP 设置为 `192.168.100.20`。因为 Ubuntu Server 使用 CLI,所以它将通过 Netplan 进行配置。
**第 1 步:查找网卡名称。** 打开终端并输入以下命令:
```
ip a
```
此时,将出现 2 个物理网卡(名为 `ens33 up` 和 `ens37 up`;这些名称在你的机器上可能有所不同,因此请仔细检查)。
对于需要输入长命令的步骤,你应该使用 SSH 以提高速度。如果有人遇到 SSH 错误并且无法像这样进行 SSH:
```
C:\Users\admin>ssh phat@192.168.18.136
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
```
你可以按如下方法修复它,因为这是主机密钥验证冲突:
```
ssh-keygen -R 192.168.18.136
ssh phat@192.168.18.136
```
**第 2 步:打开网络配置文件**
```
ls /etc/netplan/
```
该文件将被命名为 `00-installer-config.yaml`。
使用 nano 命令编辑该文件:
```
sudo nano /etc/netplan/00-installer-config.yaml
```
**第 3 步:编辑 IP(注意空格)。** 注意:YAML 文件对空格极其敏感。绝对不要使用 Tab 键;只能使用 Space(空格)键进行缩进:
```
network:
ethernets:
ens33:
dhcp4: true
ens37:
addresses:
- 192.168.100.20/24
version: 2
```
(在此配置中,`ens33` 将自动从 NAT 接收 Internet,而 `ens37` 为 LAN Segment 网络持有固定 IP `192.168.100.20`)。
*(按 Ctrl+O -> Enter -> Ctrl+X)*
**第 4 步:应用配置并输入命令让系统获取 IP:**
```
sudo netplan apply
```
**当需要 Internet 时(下载 Snort 包、更新系统等):** 我们不需要做任何事情。默认情况下,Adapter 1 (NAT) 已连接,虚拟机将有 Internet 连接。
**运行 Mirai 恶意软件时:**
在 VMware 窗口边框的右下角。
你会看到 2 个小电脑图标(对应 2 个网卡)。
将鼠标悬停在每一个图标上以查看哪一个是 NAT。
右键点击那个 NAT 图标 -> 选择 **Disconnect**。
这种方法就像从物理上拔掉 Ubuntu 服务器的互联网网线一样。其中的恶意软件将被完全困在通过 `ens37` 网卡的 LAN Segment 内。同时,由于你没有删除操作系统内的网络配置,因此当你关闭机器时,网络服务不会报错或挂起。
## 4. Ping 测试
在为两台机器设置固定 IP 后,相互进行 ping 测试以检查这 2 台机器是否可以在同一子网内相互连接。
* **Kali:** `ping 192.168.100.20 -c 4`
* **Ubuntu:** `ping 192.168.100.10 -c 4`
# 项目实施
## 1. 防御者机器设置(Ubuntu Server - 蓝队)
这台机器充当 Drone 的“网关”,并在其上安装了入侵检测系统。
**1.1. 更新并安装 Snort。** 在 Ubuntu 上打开终端并输入这些命令:
```
sudo apt update && sudo apt upgrade -y
# 安装 Snort(安装过程会询问子网;请输入你的 Host-Only 子网,例如 192.168.100.0/24)
sudo apt install snort -y
```
**1.2. 检查网卡名称。** 输入命令 `ip a` 查看你的网卡名称(例如,`ens33` 或 `eth0`)。
**1.3. 备份并建立 Snort 配置**
```
# 备份原始配置文件
sudo cp /etc/snort/snort.conf /etc/snort/snort.conf.bak
# 打开配置文件进行编辑
sudo nano /etc/snort/snort.conf
```
在这个文件中,找到 `ipvar HOME_NET any` 这一行并将其更改为 `ipvar HOME_NET 192.168.100.0/24`(替换为你的虚拟网络 IP 子网)。
## 2. 在 Kali Linux 上准备数据和工具(红队)
这台机器将用于 PCAP 分析(协议 RE)以及将流量推入网络以测试 Snort。
**2.1. 安装重放与分析工具集**
```
sudo apt update
sudo apt install tcpreplay tshark -y
```
**2.2. 有 2 种有趣的方法来分析 Mirai:**
* 构建 Mirai 源代码并对其进行分析(在构建和分析期间,你需要切换到 LAN segment)。
一旦你获得了源代码,分析此恶意软件的步骤如下:
从 Src Code 编译成 Malware
一旦你获得了 Malware --> 进行分析。
### 配置 Bot
* 在 Kali 机器上构建
在 `./mirai/bot/table.h` 中,你可以找到有关配置选项的大部分说明。
在 `./mirai/bot/table.c` 中,有几个选项需要更改才能使其正常工作。
* `TABLE_CNC_DOMAIN` - 要连接的 CNC 的域名
* `TABLE_CNC_PORT` - 要连接的端口,已设置为 23
* `TABLE_SCAN_CB_DOMAIN` - 当找到暴力破解结果时,将向此域名报告
* `TABLE_SCAN_CB_PORT` - 为暴力破解结果连接的端口,已设置为 48101。
(*) 将默认的 cnc 域名保留为 `cnc.changeme.com : 23`,并将报告目的地保留为 `report.changeme.com : 48101`。这样在构建完成后,我们就可以直接将其 DNS 重定向到我们想要的服务器。
在 Mirai botnet 系统中,网络通常分为 2 个主要数据流:命令流 (C2) 和感染结果报告流 (Scan Receiver)。
* **`TABLE_CNC_DOMAIN` & `TABLE_CNC_PORT` (端口 23):**
* **含义:** 这是大脑服务器 (C2 Server) 的地址和端口。
* **运行方式:** 当一个 IoT 设备(如 Drone)被恶意软件感染时,它所做的第一件事就是静默连接到此地址(报告它存活的状态),并等待来自黑客的 DDoS 攻击命令。
* **为什么是端口 23?** 端口 23 通常用于合法的 Telnet 服务。Mirai 的作者有意设计 C2 通过端口 23 进行通信,以隐藏流量(将恶意软件流量混入正常的 Telnet 流量中),从而绕过配置松散的防火墙。
* **`TABLE_SCAN_CB_DOMAIN` & `TABLE_SCAN_CB_PORT` (端口 48101):**
* **含义:** CB 代表 Callback。这是专门用于接收“报告”的服务器地址。
* **运行方式:** 当空闲(不进行 DDoS 攻击)时,bot 将不断扫描周围网络,以查找其他密码薄弱的 IoT 设备。如果它成功暴力破解了一台设备(例如,找到了账号 root / 密码 12345),它会立即打包该 IP 和密码,并通过端口 48101 将其发送回此地址。大脑接收到此信息后,随后将使用 Loader 文件去感染该新设备。
**1. 在 Kali Linux 上安装交叉编译器:**
```
sudo apt update
# 安装适用于 ARM 芯片的编译器(在 Drone/Camera 线路上非常常见)
sudo apt install gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf -y
# 安装适用于 MIPS 芯片的编译器(常见于 Routers/Gateways)(你不需要安装这个)
sudo apt install gcc-mips-linux-gnu gcc-mipsel-linux-gnu -y
# 安装适用于 PowerPC 和 SuperH (SH4) 芯片的编译器
sudo apt install gcc-powerpc-linux-gnu gcc-sh4-linux-gnu -y
```
**2. 更正 `build.sh` 中的编译器命令名称**
2016 年的 Mirai 原始源代码使用旧名称调用编译器命令。但在现代的 Kali Linux 发行版中,这些命令已被重命名为新的标准。
你需要打开 `build.sh` 文件并将命令名称更改为你刚刚安装的包相匹配的名称:
```
# 为 x86 编译(Lab Virtual Machine)
gcc -fcommon -std=c99 bot/*.c -DDEBUG $FLAGS -static -g -o debug/mirai.dbg
# 为 MIPS 编译(从 mips-gcc 更改为 mips-linux-gnu-gcc)
mips-linux-gnu-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.mips
# 为 ARMv4 编译(从 armv4l-gcc 更改为 arm-linux-gnueabi-gcc)
arm-linux-gnueabi-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm
# 为 ARMv6/v7 编译(从 armv6l-gcc 更改为 arm-linux-gnueabihf-gcc)
arm-linux-gnueabihf-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.arm7
# 为 SH4 编译(从 sh4-gcc 更改为 sh4-linux-gnu-gcc)
sh4-linux-gnu-gcc -std=c99 -DDEBUG bot/*.c "$FLAGS" -static -g -o debug/mirai.sh4
```
因为有一些超出了研究论文范围的不相关内容,我将删除它们。具体来说,是上述 5 次编译中的最后 4 行编译代码。它们都是用于构建对应不同设备上芯片的不同 Mirai 变种。我们只在虚拟化环境中进行测试,因此只要第 1 行能工作就可以了。(此外,这个 src 代码已经有十年的历史了,我怀疑现在是否还有任何 IoT 机器在使用那些芯片系列) => 简而言之,正如 Khang 所说,只需保留第一行,并使用井号注释掉其余部分。
**创建“debug”目录**
```
mkdir debug
```
**安装 Go 语言**
```
sudo apt update && sudo apt install golang -y
```
(*) 因为 src 使用了非常、非常古老的 Go 版本,所以必须采取一些额外的步骤才能成功地完全编译它。
**为项目初始化 Go Module**
现代的 Go 编译器需要一个项目标识配置文件 (`go.mod`) 才能允许下载外部库。
```
go mod init mirai-c2
```
**手动下载缺失的 Go 库**
```
go get github.com/go-sql-driver/mysql
go get github.com/mattn/go-shellwords
```
**在 Kali 上安装数据库管理系统**
```
sudo apt update
sudo apt install mariadb-server -y
sudo systemctl start mariadb
```
**重新运行总体编译命令**
```
chmod +x build.sh
./build.sh debug telnet
```
如果在这一步,任何人遇到类似于 Phat 的这样的错误:
```
┌──(phat㉿nhom4)-[~/Mirai-Source-Code/mirai]
└─$ ./build.sh debug telnet
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/mirai.dbg: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/enc: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/nogdb: No such file or directory
collect2: error: ld returned 1 exit status
/usr/bin/x86_64-linux-gnu-ld.bfd: cannot open output file debug/badbot: No such file or directory
collect2: error: ld returned 1 exit status
```
那么请按照以下步骤操作:
```
──(phat㉿nhom4)-[~/Mirai-Source-Code/mirai]
└─$ cat build.sh | grep -i "debug"
echo "Usage: $0
完成后,我们会得到这一堆东西:
分别为:
* **`mirai.dbg`**:是刚刚构建的恶意软件。它会扫描 Telnet 端口,暴力破解弱密码,维持与 C2 的连接,并接收执行 DDoS 攻击的命令。我们小组将拿这个进行分析。
* **`enc`**:是加密工具,用于将 IP 和域名加密为 XOR 过的 Hex 字符串。它在黑客的机器上运行(以隐藏其身份)。
* **`nogdb`**:是一个反调试工具。为了防止恶意软件被邪恶的取证分析师解剖和分析。
* **`scanListen`**:位于服务器端,接收来自 bot 群的扫描信号,并将该信息写入数据库。
* **`cnc`**:反派的大脑,这里是存储数据库以及发布命令以指挥“后宫”发起全面攻击的地方。
* **`badbot`**:为黑客模拟可能的场景,以进行测试和修复 Bug。标签:DAST, IP 地址批量处理, Mirai 僵尸网络, 安全实验环境, 恶意软件分析, 虚拟化网络配置