gianniskinalis/network-anomaly-detector
GitHub: gianniskinalis/network-anomaly-detector
基于 Isolation Forest 无监督学习的网络流量异常检测工具,通过行为基线建模和 MITRE ATT&CK 技术映射识别未知威胁。
Stars: 0 | Forks: 0
# 网络流量异常检测器
一个基于 Python 的网络流量分析工具,它从真实数据包捕获中构建行为基线,利用机器学习检测异常流,并将发现结果映射到 MITRE ATT&CK 技术。
## 功能
大多数入侵检测工具依赖于签名——已知的恶意 IP、已知的恶意软件哈希值。本工具采用不同的方法:它学习特定主机的正常流量特征,然后标记偏离该基线的流量。
该流程分为四个阶段:
1. **捕获** — 使用 scapy 从 PCAP 文件或实时接口读取原始数据包
2. **特征提取** — 将数据包分组为流并提取数值特征(持续时间、字节量、数据包计数、包间到达时间、SYN 计数、端口熵)
3. **异常检测** — 在存储的基线流上训练 Isolation Forest 模型,并根据该模型对新流量进行评分
4. **MITRE 映射** — 用最可能的 ATT&CK 战略和技术丰富标记的流,然后写入结构化的 JSON 报告
## 检测方法
核心模型是 scikit-learn 的 **Isolation Forest**——一种非常适合异常检测的无监督算法,因为它不需要标记的攻击数据。它通过随机划分特征来隔离观察结果;异常流(异常的时间、意外的字节量、高 SYN 计数)被隔离得更快,并获得较低的分数。
每个流使用的特征:
| 特征 | 重要性 |
|---|---|
| `duration` | Beaconing 连接通常非常短暂且有规律 |
| `packet_count` | 扫描会产生许多小流 |
| `total_bytes` | 数据渗出表现为大量出站传输 |
| `avg_packet_size` | C2 流量倾向于小型、统一的数据包 |
| `avg_inter_arrival` | 规律的间隔表明自动化/beaconing 行为 |
| `unique_dst_ports` | 高数值表明端口扫描 |
| `syn_count` | 重复的 SYN 表明暴力破解或扫描 |
## MITRE ATT&CK 映射
标记的流会自动标记上最可能的技术:
| 技术 | ID | 触发条件 |
|---|---|---|
| 应用层协议 | T1071 | 小数据包、短包间到达时间、规律节奏 |
| 替代协议数据渗出 | T1048 | 短时间内大量字节传输 |
| 网络服务扫描 | T1046 | 高唯一目标端口计数 |
| 暴力破解 | T1110 | 高 SYN 计数 |
| 非标准端口 | T1571 | 1024 以下不常见端口上的流量 |
## 实际结果
本工具是与一个配套项目一起开发的——一个部署在 Hetzner 云 VPS 上的实时 SSH/HTTP 蜜罐(参见 [github.com/gianniskinalis/honeypot](https://github.com/gianniskinalis/honeypot))。
该蜜罐在开放互联网上运行了 48 小时,未进行任何身份验证加固,收集了真实的攻击流量。IOC 提取器得出了以下发现:
**SSH (端口 22)**
- 来自 30 多个国家/地区 542 个唯一 IP 的 30,243 次总连接
- 单个 IP (46.62.145.156) 进行了 23,205 次尝试——持续的自动扫描
- 96% 的登录尝试针对 `root` 账户,这与大规模凭证填充一致
- 尝试次数最多的密码:`123456`、`admin`、`1234`、`password`、`qwerty`
**HTTP (端口 80)**
- 来自 398 个唯一 IP 的 14,321 个请求
- 攻击者探测了 `/.env`(暴露的凭证)、`/wp-content/plugins/hellopress/wp_filemanager.php`(易受攻击的 WordPress 插件),以及已知的 webshell 路径,包括 `/gptsh.php` 和 `/bolt.php`
**异常检测器会在此流量中标记以下内容:**
| 流模式 | 预期 MITRE 标签 | 原因 |
|---|---|---|
| 46.62.145.156 重复 SYN 突发 | T1110 — 暴力破解 | 高 SYN 计数,快速的包间到达时间 |
| Webshell 路径探测 | T1071 — 应用层协议 | 定期发出的小型统一 HTTP 请求 |
| /.env 和凭证文件扫描 | T1083 — 文件和目录发现 | 对敏感路径的重复探测 |
| 未知用户代理 (`libredtail-http`) | T1071 — 应用层协议 | 非浏览器工具发出自动化请求 |
行为基线建立和 MITRE 映射的结合意味着该工具超越了简单的 IP 封锁——它揭示了*攻击者在做什么*,而不仅仅是*他们是谁*。
## 示例输出
```
[*] Loaded 136 packets
[*] Parsed 132 IP packets (4 non-IP skipped)
[*] Grouped 132 packets into 34 flows
[*] Baseline trained on 34 flows
[*] Scored 34 flows — 2 anomalies detected
======================================================================
THREAT REPORT SUMMARY
======================================================================
Total flows analysed : 34
Anomalies detected : 2
[001] 10.0.2.15 -> 104.18.27.120 (score: -0.015)
[!] Command & Control | T1071 - Application Layer Protocol
Small regular packets suggesting beaconing behavior
[002] 10.0.2.15 -> 157.240.0.1 (score: -0.0074)
[!] Unclassified anomaly
Anomalous behavior detected but no specific technique matched
```
报告以带有时间戳的 JSON 文件形式保存在 `reports/` 中,包含完整的特征向量和 MITRE 标签。
## 安装
```
git clone https://github.com/gianniskinalis/network-anomaly-detector.git
cd network-anomaly-detector
pip install -r requirements.txt
```
**要求:** Python 3.10+,实时捕获需要 root/sudo 权限
## 用法
**分析 PCAP 文件:**
```
python3 main.py pcaps/your_capture.pcap
```
**捕获实时流量(需要 sudo):**
```
sudo tcpdump -i eth0 -w pcaps/capture.pcap
# 按 Ctrl+C 停止,然后:
python3 main.py pcaps/capture.pcap
```
该工具会在多次运行中将流累积在 `data/baseline.db` 中——它看到的流量越多,基线就越准确。
## 项目结构
```
network-anomaly-detector/
├── capture/ # Packet ingestion and parsing (scapy)
├── features/ # Flow grouping and feature extraction
├── baseline/ # SQLite persistence and baseline storage
├── detection/ # Isolation Forest scoring
├── mapping/ # MITRE ATT&CK technique mapping
├── report/ # JSON report generation
├── main.py # Entry point
└── requirements.txt
```
## 技术栈
- **Python 3.12**
- **scapy** — 数据包捕获和解析
- **scikit-learn** — Isolation Forest 异常检测
- **SQLite** — 流存储和基线持久化
- **numpy / pandas** — 特征向量构建
## Docker
你可以在 Docker 容器内运行此工具,而无需在本地安装任何依赖项。
**构建镜像:**
```
docker build -t network-anomaly-detector .
```
**运行容器:**
```
docker run --net=host --cap-add=NET_ADMIN network-anomaly-detector
```
## 免责声明
本工具仅用于教育目的和经授权的安全研究。请仅在你拥有或获得明确监控许可的网络和系统上运行。作者不对因使用本工具而导致的任何误用或损害负责。
## 作者
**Giannis Kinalis**
*网络安全爱好者*
- **GitHub:** [gianniskinalis](https://github.com/gianniskinalis)
- **LinkedIn:** [Ioannis Kinalis](https://linkedin.com/in/ioannis-kinalis)
标签:AMSI绕过, Apex, C2通信, Cloudflare, IP 地址批量处理, Isolation Forest, MITRE ATT&CK, PCAP分析, PE 加载器, Python, Scapy, Scikit-learn, 基线建模, 威胁检测, 孤立森林, 异常检测, 插件系统, 数据统计, 无后门, 无监督学习, 机器学习, 流量特征提取, 端口扫描, 网络安全, 网络流量分析, 请求拦截, 逆向工具, 隐私保护