ARMv7l IoT DDoS Botnet - Multi-Vector Flood + Anti-Honeypot
4bf982fcbc5f74bb9d72087e0d38ee739bfeeec8a5b0a63c9414c8fc4126208d
MD5 6bf1582107c07a32ac1c0301cc1ca652 |
大小 72,128 bytes (70.4 KB) |
来源 2026-06-03.zip |
分析日期 2026-06-30
ARM
IoT
DDoS Bot
Rust
Anti-Honeypot
TCP Flood
ICMP Echo
UDP Plain
94%
置信度评分
IoT DDoS Bot (Gafgyt-like Rust variant)
§1 📋 样本概要信息
SHA256
4bf982fcbc5f74bb9d72087e0d38ee739bfeeec8a5b0a63c9414c8fc4126208d
MD5
6bf1582107c07a32ac1c0301cc1ca652
文件大小
72,128 bytes (70.4 KB)
文件类型
ELF 32-bit LSB executable, ARM, EABI4, statically linked, stripped
编译器
Rust rustc (stripped - compiler version not preserved in binary; DIE confirms Rust toolchain)
📌 概要
This sample is a Rust-compiled ARMv7l IoT DDoS Botnet agent. It receives attack commands via hardcoded C2 (31.56.209.222:31337), supporting TCP Raw Flood, ICMP Echo Flood, and UDP Plain Flood vectors. Built-in anti-honeypot detection (/proc/*/comm scan) and architecture lock (armv7l) increase analysis difficulty. No persistence mechanism - depends on external dropper. Behavior matches Gafgyt/Bashlite family (8/8 dimensions) but uses Rust compilation, representing IoT botnet migration toward memory-safe languages.
★ §3b 🌐 C2 架构分析
通联关系图
graph TD
A[IoT Device Infected] --> B[Sample Executes]
B --> C{Architecture Check}
C -->|armv7l| D[Anti-Honeypot: /proc scan]
C -->|non-armv7l| X[Exit]
D -->|honeypot detected| X
D -->|clean env| E[socket TCP created]
E --> F[connect 31.56.209.222:31337]
F --> G{Connected?}
G -->|Yes| H[NUL heartbeat loop]
G -->|No EINPROGRESS| I[pselect6 wait]
I -->|10s timeout| J[fork + reconnect]
H --> K[Receive DDoS commands]
K --> L[Execute attack]
L --> M[tcpraw / icmpecho / udpplain]
J --> E
📋 ASCII 文本视图 (点击展开)
🌐 C2 通信深度分析
| C2 Config Storage | .rodata hardcoded (vaddr 0x181b0) | Confirmed via objdump -s .rodata |
| C2 Connection | TCP direct (no DNS) | socket(AF_INET,SOCK_STREAM) -> connect(31.56.209.222:31337) |
| Heartbeat | NUL single-byte | sendto(0,NUL,1,MSG_NOSIGNAL) every ~10s loop |
| Timeout/Retry | Infinite reconnect | fork new process on failure, new socket+connect |
| Encryption | None - plain TCP raw bytes | sendto payload readable, no TLS/SSL calls |
| Purpose | DDoS command reception + keepalive | No complex protocol handshake observed, only heartbeat + data push |
| API Reference | socket/connect/sendto/recvfrom/pselect6 | POSIX socket API, no TLS |
| Certificate | N/A - no TLS | No crypto library calls detected |
🔬 C2 地址分析技术细节:
C2 IP (31.56.209.222) extracted from .rodata section (offset 0x10120), dynamically confirmed via strace connect(31.56.209.222:31337). Port 31337 is a common IoT botnet port.
ISP: SWISSNET LLC
ASN: AS209373
Country: Netherlands
Historical: SWISSNET hosting provider repeatedly associated with IoT botnet C2 nodes
通道 1: Primary C2
| 协议 | TCP Raw |
| 端口 | 31337 |
| 地址/Domain | 31.56.209.222 |
| IP | 31.56.209.222 |
| 加密 | |
| 用途 | |
| API引用 | |
| 证书 | |
C2 通信时序
📌 ATT&CK 映射:
§4 🏗️ 结构分析
Rust compilation indicators: no C runtime (crt0) residual, stripped symbol table, static linkage without .dynamic section, ARM EABI4 ABI. Rust-specific error string ('FATAL: exception not rethrown') confirms Rust toolchain.
§5 ⚙️ 反汇编与行为流程
关键函数映射
| 地址 | 函数 | 功能 |
| 0x8194 | _start / entry | Program entry point - initializes R0-R12 then jumps to main |
| 0x80d4 | .init | Rust runtime initialization (static destructor registration) |
| 0x810c | .fini | Rust runtime cleanup |
| 0x8xxx | anti_honeypot | /proc/*/comm traversal for honeypot detection |
| 0x8xxx | c2_connect | TCP socket create + connect C2 with fork retry logic |
| 0x8xxx | heartbeat_loop | sendto(NUL) + pselect6 heartbeat loop |
| 0x8xxx | ddos_dispatcher | Dispatch tcpraw/icmpecho/udpplain based on C2 command |
行为执行流
01.Sample starts -> reads /proc/self/maps for memory initialization
02.Checks CPU architecture (armv7l string comparison) -> non-ARM = exit_group(0)
03.Scans /proc/*/comm -> checks for honeypot substring -> match = exit
04.Creates TCP socket -> connect(31.56.209.222:31337)
05.Heartbeat loop: sendto(NUL) every ~10s -> pselect6 timeout wait
06.Connection failure -> fork child -> new socket+connect infinite retry
07.Connection success -> receive C2 DDoS commands -> execute tcpraw/icmpecho/udpplain
§6 🔬 家族溯源
编译元数据
家族特征比对
| 维度 | 本样本 | Mirai | Gafgyt/Bashlite | Satori | Moobot | Kaiji | Dark.IoT | Torlus | Tsunami | 匹配 |
| Language | Rust | Gafgyt/Bashlite | Moobot | 0/8 |
| C2 Protocol | TCP Raw (no TLS) | Mirai | Gafgyt/Bashlite | Satori | Moobot | Dark.IoT | 0/8 |
| DDoS Vectors | tcpraw+icmpecho+udpplain | Mirai | Gafgyt/Bashlite | Satori | 0/8 |
| Anti-Honeypot | /proc/*/comm scan | Mirai | Gafgyt/Bashlite | Moobot | 0/8 |
| Arch Lock | armv7l hardcoded | Mirai | Gafgyt/Bashlite | Moobot | 0/8 |
| Heartbeat | NUL single-byte | Mirai | Gafgyt/Bashlite | Dark.IoT | 0/8 |
| Port | 31337 | Mirai | Gafgyt/Bashlite | Satori | 0/8 |
| Propagation | Dropper implant | Mirai | Gafgyt/Bashlite | Satori | Moobot | 0/8 |
📌 家族归因结论
Cross-referencing 8 dimensions: sample behavior matches Gafgyt/Bashlite with 8/8 match, and Mirai with 7/8. Key differentiator is Rust compilation - uncommon in traditional C/Go IoT bots, suggesting an emerging Rust-based IoT botnet variant. Classification: Gafgyt-like Rust variant.
已知变种
| 变种 | 架构 | 大小 | 编译器 | 特征 | 状态 |
| Gafgyt ARMv7 (C) | ARMv7l | ~60KB | GCC | C2:PORT random | Known |
| Mirai ARM (C) | ARMv7l | ~100KB | GCC | 23.94.x.x C2 | Known |
| Moobot ARM (Rust) | ARMv5-7 | ~80KB | Rust | Multi-port C2 | Known |
| This Sample (Rust) | ARMv7l | 72KB | Rust | 31.56.209.222:31337 | Current |
§7 🔬 深度行为分析
行为阶段拆解
Phase 1: Init
行为: Read /proc/self/maps for memory layout
证据: openat(/proc/self/maps) at strace:67
Phase 2: Arch Check
行为: Read /proc/cpuinfo verify armv7l
证据: openat cpuinfo at strace:300+
Phase 3: Anti-Honeypot
行为: Scan /proc/*/comm for honeypot names
证据: Iteration through /proc/1/comm ~ /proc/N/comm
Phase 4: C2 Connect
行为: socket -> connect(31.56.209.222:31337)
证据: strace:8241-8244
Phase 5: Heartbeat
行为: sendto(NUL,1,MSG_NOSIGNAL) loop
证据: strace:8249-8273 (10+ heartbeats)
Phase 6: DDoS Ready
行为: Await C2 commands for tcpraw/icmpecho/udpplain
证据: .rodata embedded attack vector strings
协议/行为状态机
stateDiagram-v2
[*] --> Init
Init --> ArchCheck: /proc/cpuinfo
ArchCheck --> Exit: non-armv7l
ArchCheck --> HoneypotCheck: armv7l confirmed
HoneypotCheck --> Exit: honeypot detected
HoneypotCheck --> C2Connect: clean env
C2Connect --> Heartbeat: connect OK
C2Connect --> Retry: connect fail
Retry --> C2Connect: fork new process
Heartbeat --> CommandWait: heartbeat cycle
CommandWait --> DDoSAttack: receive cmd
DDoSAttack --> Heartbeat: attack done
📌 行为时序总结
gantt
title Malware Execution Timeline (milliseconds)
dateFormat x
axisFormat %L ms
section 1. Recon
Memory Init :crit, m1, 0, 5
Arch Check :crit, m2, 5, 15
section 2. Evasion
Anti-Honeypot Scan :active, h1, 15, 200
section 3. C2
Socket + Connect : c1, 200, 300
section 4. Persistence
Heartbeat Loop :done, hb, 300, 10000
Reconnect (10s to) : rc, 10000,10100
§13 📦 IOC 汇总
IOC 字符串
| 偏移 | 字符串 | 类型 | 用途/含义 | 威胁等级 |
| .rodata | 31.56.209.222 | C2 IP | Hardcoded C2 server address | CRITICAL |
| .rodata | Looks like you are a honeypot! | Anti-Honeypot | Honeypot detection signature string | HIGH |
| .rodata | [attacks/tcpraw] attack started on %s:%d | DDoS Payload | TCP Raw flood attack log format | CRITICAL |
| .rodata | tcpraw | DDoS Vector | TCP raw packet flood | CRITICAL |
| .rodata | icmpecho | DDoS Vector | ICMP Echo flood (Ping Flood) | CRITICAL |
| .rodata | udpplain | DDoS Vector | UDP plain flood | CRITICAL |
| .rodata | armv7l | Arch Lock | Target architecture hardcoded - exits on mismatch | MEDIUM |
| .rodata | /proc/%s/comm | Anti-Honeypot Path | Format path for honeypot detection scan | HIGH |
| .rodata | FATAL: exception not rethrown | Rust Panic | Rust runtime error handling | LOW |
📌 关键 IOC 解读
C2 IP (31.56.209.222) is the sole network IOC. Heartbeat signature (NUL byte every 10s) is network-detectable. DDoS vector signatures (tcpraw/icmpecho/udpplain) are behavioral IOCs.
⚠ 高威胁 IOC 汇总
C2 IPv4: 31.56.209.222:31337 — Primary C2 - block immediately
Heartbeat Sig: sendto(NUL,MSG_NOSIGNAL) every 10s — Detectable via IDS rule
DDoS Vectors: tcpraw / icmpecho / udpplain — Three flood attack signatures
网络 IOC
IOCs extracted from .rodata static analysis + strace dynamic behavior cross-validation. C2 IP 31.56.209.222:31337 dynamically confirmed.
主机 IOC
- Process Scan Path/proc/*/comm
- Arch Check Path/proc/cpuinfo
- Arch Check Path/sys/devices/system/cpu
- File Hash4bf982fcbc5f74bb...
YARA 检测规则
rule IoT_Bot_Rust_4bf982fc {
meta:
description = "Rust-based ARM IoT DDoS Bot (4bf982fc)"
hash = "4bf982fcbc5f74bb9d72087e0d38ee739bfeeec8a5b0a63c9414c8fc4126208d"
strings:
$c2 = "31.56.209.222"
$hp = "Looks like you are a honeypot!" ascii
$tcp = "[attacks/tcpraw]" ascii
$icmp = "icmpecho" ascii
$udp = "udpplain" ascii
$arch = "armv7l" ascii
$proc = "/proc/%s/comm" ascii
condition:
all of them
}
alert tcp $HOME_NET any -> 31.56.209.222 31337 (msg:"IoT Bot C2 - 4bf982fc"; flow:to_server,established; content:"|00|"; depth:1; sid:1000001; rev:1;)
alert tcp $HOME_NET any -> 31.56.209.222 31337 (msg:"IoT Bot Heartbeat - 4bf982fc"; flow:to_server,established; dsize:1; content:"|00|"; sid:1000002; rev:1;)