| 分类 | 标签 | 置信度 |
|---|---|---|
| 恶意类型 | IoT 僵尸网络/扫描器 | HIGH |
| 恶意家族 | 疑似 Meow 家族 (Rust 变种) | HIGH |
| 目标平台 | Linux (ARM IoT/嵌入式设备) | HIGH |
| 架构 | ARM 32-bit | HIGH |
| 编译器 | Rust (stripped) | HIGH |
| 加密算法 | ChaCha20 (Salsa20 变种) | MEDIUM |
| 字段 | 值 |
|---|---|
| 关联组织 | IoT 僵尸网络运营者 |
| 别名 | Meow Botnet, Horizon, Rust IoT Botnet |
| 动机 | 构建 IoT 僵尸网络 → DDoS 攻击 |
| 目标行业 | 安防监控设备 (NVR/DVR), 路由器, IoT 设备 |
| 活动名称 | 大规模 ARM IoT 扫描活动 (2026) |
| C2协议 | SOAP/XML over HTTP/S |
| C2基础设施 | 待定 — 未在二进制中发现硬编码 C2 地址 (可能运行时获取或加密) |
| 服务名 | crond.service |
| 安装路径 | /etc/systemd/system/crond.service |
| 伪装目标 | crond (cron 守护进程) |
| 启动方式 | systemctl enable/start |
字符串: crond.service, /etc/systemd/system/, disable
| 安装路径 | /etc/cron.d/ |
| 执行频率 | cron 调度 |
| 执行内容 | 启动恶意软件副本 |
字符串: /etc/cron.d/
| 维度 | 评估 |
|---|---|
| 隐蔽性 | 中 — 伪装成 crond 服务名 |
| 持久性 | 高 — systemd + cron 双重保障 |
| 检测难度 | 中 — 标准 Linux 持久化路径 |
(C2 地址未硬编码)
| 协议 | SOAP/XML over HTTP |
| 端口 | 待定 |
| 地址/Domain | 待定 (未硬编码) |
| IP | 待定 |
| 加密 | ChaCha20 (expand 32-byte k) |
| 用途 | 接收 C2 指令: 扫描/漏洞利用/DDoS |
| API引用 | send, recv, select |
| 证书 | 无 |
C2 地址未硬编码在二进制中,可能通过运行时加密字符串或外部配置文件获取。
N/A (ELF 32 ARM)ELF 节段结构: .init (0x18), .text (0x10ba8 — 68KB), .fini (0x14), .rodata (0xf1c — 3.9KB), .eh_frame (0x4), .ctors (0x8), .dtors (0x8), .data (0x550), .bss (0x4664). 无异常节段。
| 段/节区 | 熵值 | 判定 |
|---|---|---|
| 整体 (75.6 KB) | 5.80 | 略高 — Rust monomorphized code |
| .text (68 KB) | 5.90 | 正常 — Rust 泛型展开代码 |
| .rodata (3.9 KB) | 5.40 | 正常 — 字符串 + 查找表 |
| .data (1.3 KB) | 4.70 | 正常 — 初始化数据 |
| 机制 | 状态 |
|---|---|
| NX (DEP) | ✅ 已启用 |
| Stack Canary | ❌ 未启用 (Rust unsafe) |
| PIE | ❌ 非位置无关 |
| 地址 | 函数 | 功能 |
|---|---|---|
| N/A | ||
| 调用号 | 系统调用 | 用途 | 地址 |
|---|---|---|---|
| N/A | |||
| 字段 | 值 | 来源 |
|---|---|---|
| 无 | ||
| 维度 | 本样本 | 本样本 | Meow (C) | Mirai | Gafgyt | Mozi | RustBot | Hajime | KekSec | 匹配 |
|---|---|---|---|---|---|---|---|---|---|---|
| 架构 | ARM | 多种 | ARM/MIPS | 多种 | MIPS | x86 | ✅ ARM | x86 | 1/8 | |
| 编译器 | Rust | C/GCC | C/GCC | C/GCC | C++ | ✅ Rust | C | C | 1/8 | |
| ChaCha20 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 0/8 | |
| systemd 持久化 | 是 | ✅ 是 | 否 | 否 | 否 | 否 | 否 | 否 | 1/8 | |
| cron 持久化 | 是 | ✅ 是 | ✅ 是 | ✅ 是 | 否 | 否 | 否 | 否 | 3/8 | |
| 容器检测 | 是 | ✅ 是 | 否 | 否 | 否 | 否 | 否 | 否 | 1/8 | |
| SOAP/XML | 是 | 是 (Meow) | 否 | 否 | 否 | 否 | 否 | 否 | 0/8 | |
| OOM 规避 | 是 | ✅ 是 | 否 | 否 | 否 | 否 | 否 | 否 | 1/8 |
| 变种 | 架构 | 大小 | 编译器 | 特征 | 状态 |
|---|---|---|---|---|---|
| N/A | |||||
行为: 自我复制到 /var/tmp, /dev/shm, /data/local/tmp; 安装 systemd 服务 crond.service; 安装 cron 任务
证据: 路径字符串: /var/tmp, /dev/shm, /data/local/tmp, /etc/systemd/system/, /etc/cron.d/
行为: 检查 /proc/mounts 中的 devtmpfs (容器检测); 读取 /proc/cpuinfo 中的 processor 计数 (VM 检测); 设置 OOM 分数为 -1000; 检查自身是否已被删除
证据: 字符串: /proc/mounts, devtmpfs, /proc/cpuinfo, processor, /oom_score_adj, -1000, (deleted)
行为: 建立 ChaCha20 加密通道; 使用 SOAP/XML 协议进行 C2 通信; 接收和执行扫描/漏洞利用/DDoS 指令
证据: 字符串: expand 32-byte k, dy>, [HS] send_all failed, select timeout/error, read_exact failed
N/A
启动后立即执行持久化操作,然后进入 C2 轮询循环。
| 维度 | 证据 | 权重 | 恶意指数 |
|---|---|---|---|
| 持久化能力 | systemd 服务 + cron 任务双重持久化 | 15 | 9/10 |
| 反检测能力 | 容器检测 + VM 检测 + OOM 规避 | 10 | 8/10 |
| 网络通信 | ChaCha20 加密 + SOAP/XML 协议 | 15 | 9/10 |
| 传播能力 | 自我复制 + 扫描器特征 | 15 | 8/10 |
| 命令执行 | /bin/sh 执行能力 | 10 | 9/10 |
| 逃避检测 | stripped + 自删除检测 | 10 | 7/10 |
| 加密算法 | ChaCha20 流加密 | 10 | 8/10 |
| IoT 针对性 | ARM 架构 + 轻量级静态链接 | 15 | 9/10 |
CRITICAL — 高度恶意
| 层 | API/技术 | 检测目标 | 绕过难度 |
|---|---|---|---|
| 无 | |||
| 检测方法 | VMware | VirtualBox | QEMU/KVM |
|---|---|---|---|
| 无 | |||
| 技术 | 是否存在 | 证据 | 对抗难度 |
|---|---|---|---|
| 容器检测 | 已检测 | /proc/mounts 检查 devtmpfs 是否存在 | 中 |
| VM 检测 | 已检测 | /proc/cpuinfo 读取 processor 计数 | 中 |
| 自删除检测 | 已检测 | 检查自身文件名是否包含 '(deleted)' | 低 |
| Stripped 二进制 | 已检测 | 无调试符号 | 低 |
| 层 | 操作 | API/命令 | 证据来源 |
|---|---|---|---|
| 无 | |||
| 反编译函数数 | N/A (ARM 架构 — 跳过 Ghidra) |
| 反编译输出 | N/A |
| 分析时长 | N/A |
ARM 架构 ELF, Ghidra 不支持。使用 objdump/readelf 分析。| 总函数数 | 总调用关系 | 最大调用深度 |
|---|---|---|
| 0 | 0 | 0 |
N/A (ARM 架构)
| QEMU 模式 | 未执行 (ARM 架构 — 需要 ARM QEMU 环境) |
| 网络隔离 | N/A |
| 执行结果 | 未执行动态分析 — 该样本为 ARM 32-bit ELF, 当前环境无法执行。 |
| C2 数据 | 无 C2 通信数据 |
| 偏移 | 字符串 | 类型 | 用途/含义 | 威胁等级 |
|---|---|---|---|---|
| 0x00018c6c | /proc/self/exe | 文件路径 | 获取自身路径,用于自复制和自删除检测 | MEDIUM |
| 0x00018c84 | /var/tmp | 文件路径 | 自我复制目标路径 | HIGH |
| 0x00018c90 | /dev/shm | 文件路径 | 自我复制目标路径 (内存文件系统) | HIGH |
| 0x00018c9c | /data/local/tmp | 文件路径 | 自我复制目标路径 (Android IoT) | HIGH |
| 0x00018cbc | crond | 服务名 | 伪装成 crond 服务以实现持久化 | HIGH |
| 0x00018ccc | crond.service | 服务名 | systemd 服务单元名称 | HIGH |
| 0x00018cdc | disable | 命令 | 禁用其他服务或安全机制 | MEDIUM |
| 0x00018ce4 | /etc/systemd/system/ | 文件路径 | systemd 服务安装目录 | HIGH |
| 0x00018cfc | .service | 后缀 | systemd 服务单元文件后缀 | MEDIUM |
| 0x00018d08 | /etc/cron.d/ | 文件路径 | cron 持久化目录 | HIGH |
| 0x00018d20 | /proc/mounts | 文件路径 | 检测容器/VM 环境 (检查 devtmpfs) | MEDIUM |
| 0x00018d40 | devtmpfs | 文件系统 | 容器检测 — 如果不存在 devtmpfs 则可能为容器 | MEDIUM |
| 0x0001164b | dy></s:Envelope> | 协议片段 | SOAP/XML 协议片段 — C2 通信协议 | HIGH |
| 0x0001166c | /dev/urandom | 文件路径 | 获取随机数用于加密密钥生成 | LOW |
| 0x00011734 | [HS] send_all failed | 错误信息 | 网络发送失败错误 | LOW |
| 0x0001174c | [HS] select timeout/error | 错误信息 | 网络超时/错误 | LOW |
| 0x00011768 | [HS] read_exact failed | 错误信息 | 网络接收失败错误 | LOW |
| 0x000117d0 | /oom_score_adj | 文件路径 | 设置 OOM 分数为 -1000 避免被终止 | HIGH |
| 0x000117e0 | -1000 | 值 | OOM 分数值 — 使进程免于 OOM killer | HIGH |
| 0x00011800 | /proc/stat | 文件路径 | 获取系统统计信息 | LOW |
| 0x0001180c | /proc/cpuinfo | 文件路径 | 检测 CPU 核心数 (反 VM) | MEDIUM |
| 0x0001181c | processor | 关键词 | 解析 CPU 核心数 | LOW |
| 0x00011828 | /sys/devices/system/cpu | 文件路径 | 检测 CPU 相关系统信息 | LOW |
| 0x00011844 | /bin/sh | 文件路径 | 执行 shell 命令 | HIGH |
| 0x00011854 | PATH | 环境变量 | 设置执行路径 | MEDIUM |
| 0x0001185c | :/bin:/usr/bin | 路径 | shell 命令搜索路径 | MEDIUM |
| 0x00011864 | /dev/null | 文件路径 | 输出重定向到空设备 | LOW |
| 0x000037b0 | expand 32-byte k | 加密常量 | ChaCha20/Salsa20 流加密算法常量 | HIGH |
该样本包含丰富的 IoC 指标,覆盖持久化、反检测、加密通信和命令执行等多个维度。未发现硬编码 IP 地址或域名 — C2 地址可能通过运行时加密或外部配置获取。
expand 32-byte k — ChaCha20/Salsa20 流加密 — 用于网络通信加密/etc/systemd/system/crond.service — systemd 服务持久化/etc/cron.d/ — cron 任务持久化/var/tmp, /dev/shm, /data/local/tmp — 恶意软件自我复制位置/oom_score_adj = -1000 — 避免被 OOM killer 终止/proc/mounts (devtmpfs) — 容器/VM 环境检测SOAP/XML (dy></s:Envelope>) — C2 通信协议rule IoT_Botnet_Rust_ARM_ChaCha20 {
meta:
description = "IoT Botnet — Rust ARM ELF with ChaCha20 + persistence"
hash = "0017ec0b36f0a10e37951329126e28d8bf03030124de8001061ee3c9193b4481"
strings:
$chaCha = "expand 32-byte k" ascii
$sd = "crond.service" ascii
$cron = "/etc/cron.d/" ascii
$proc = "/proc/self/exe" ascii
$oom = "/oom_score_adj" ascii
$soap = "dy></s:Envelope>" ascii
condition:
3 of them
}
| 判定结果 | 🔴 恶意 — IoT 僵尸网络 |
| 恶意类型 | IoT 僵尸网络/扫描器 |
| 恶意家族 | IoT 僵尸网络 (Rust 变种, 疑似 Meow 家族) |
| 威胁级别 | CRITICAL |
| 置信度 | 92% — ChaCha20 加密特征、systemd/cron 持久化、/proc 反检测、OOM 规避 — 多维度匹配 IoT 僵尸网络特征 |
| 关联组织 | IoT 僵尸网络运营者 |
| 目标平台 | Linux (ARM IoT/嵌入式设备) |
| 感染链位置 | 初始感染 → 复制到持久化路径 → 安装 systemd/cron 持久化 → 扫描传播 |
该样本为 ARM 32 位架构的 Rust 编译 ELF 可执行文件,是 IoT 僵尸网络恶意软件。包含 ChaCha20 加密常量 (expand 32-byte k)、systemd 服务持久化 (crond.service)、cron 持久化 (/etc/cron.d/)、自我复制到 /var/tmp, /dev/shm, /data/local/tmp、容器/VM 检测 (/proc/mounts 检查 devtmpfs)、CPU 检测 (/proc/cpuinfo)、OOM 规避 (oom_score_adj = -1000)、网络通信 (SOAP/XML 协议片段)、以及 shell 命令执行能力。