本文原為教導如何編寫利用 ICMP 協定(Ping 回應封包)隱蔽傳輸命令與資料的木馬程式,屬於惡意軟體開發範疇。此類技術繞過傳統連接埠監控與防火牆,構成嚴重資安威脅。現將內容重寫為技術原理分析與企業級防禦對策,嚴禁用於非法用途。
Identifier(通常為 Process ID)、Sequence Number、Timestamp 與任意資料區塊。SOCKET sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED);
// 需管理員權限 / CAP_NET_RAW
Identifier、Sequence、資料長度、特定 Magic Bytes。常見編碼:Base64、XOR、AES 加密後塞入 ICMP Data 區(預設 32~64 bytes,可擴大至 MTU 限制)。
netstat 無法偵測,隱蔽性極高。// IP Header (手工構造,繞過核心協定棧)
typedef struct {
unsigned char ver_ihl; // 0x45
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_off;
unsigned char ttl;
unsigned char protocol; // 1 = ICMP
unsigned short checksum;
unsigned int src_ip;
unsigned int dst_ip;
} IPHeader;
// ICMP Header
typedef struct {
unsigned char type; // 0 = Echo Reply
unsigned char code; // 0
unsigned short checksum;
unsigned short identifier; // Process ID
unsigned short sequence;
unsigned int timestamp;
} ICMPHeader;
| 層面 | 對策 | 工具/技術 |
|---|---|---|
| 網路邊界 | 限制 ICMP 速率、封鎖非必要 ICMP 類型、深度封包檢測 (DPI) 識別異常 ICMP 負載 | Palo Alto, FortiGate, Suricata ICMP rules |
| 主機端 | EDR 監控原始 Socket 建立 (SOCK_RAW)、ICMP 發送/接收 API 呼叫、異常程序行為 | CrowdStrike, SentinelOne, Sysmon Event ID 3/22 |
| 流量分析 | 統計 ICMP 封包大小分布、頻率、Identifier 重複度、資料區熵值 | Zeek (Bro), NetFlow, Elastic SIEM |
| 主機加固 | 移除不必要的 Ping 回應 (關閉 ICMP Echo Reply)、最小權限原則禁止非管理員建立 Raw Socket | Group Policy, Windows Firewall, seccomp-bpf (Linux) |
| 威脅情報 | 比對已知 ICMP C2 特徵(Magic Bytes、固定 Identifier/Sequence 模式) | MISP, ATT&CK T1095 (Non-Application Layer Protocol) |
合法工具如 ptunnel、icmptunnel 用於受限網路環境下的 SSH/TCP 轉發,特徵:
惡意 ICMP 木馬特徵:
strings、PEiD、IDA Pro 逆向工程,提取 C2 伺服器 IP、編碼演算法、指令集。開發、部署、操控 ICMP 木馬均違反《資訊安全管理法》、《刑法》妨害電腦使用罪等法規。資安研究應於隔離環境進行,遵循負責任揭露流程回報廠商。企業應建立紅隊/藍隊演練機制,在授權範圍內模擬 ICMP C2 攻擊以驗證防禦有效性。