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, 基线建模, 威胁检测, 孤立森林, 异常检测, 插件系统, 数据统计, 无后门, 无监督学习, 机器学习, 流量特征提取, 端口扫描, 网络安全, 网络流量分析, 请求拦截, 逆向工具, 隐私保护