lucaaccomando/adaptive-threat-hunt
GitHub: lucaaccomando/adaptive-threat-hunt
一个基于机器学习与 Flask 仪表板的自适应网络威胁狩猎与 CTF 教学平台。
Stars: 0 | Forks: 0
# 🕵️♂️ 自适应威胁狩猎
### 机器学习驱动的网络异常检测






Adaptive Threat Hunt 是一个网络安全研究项目,使用 **Python**、**Scapy**、**Scikit-learn** 和 **Flask** 捕获、分析和检测异常网络流量,并使用 **Docker** 容器化以实现可重复部署。
该项目在 **NSL-KDD** 入侵检测数据集上对三种无监督异常检测模型进行基准测试,并通过交互式 Flask 仪表板展示结果。
## 📊 基准测试结果(NSL-KDD)
| 模型 | F1 | 精确率 | 召回率 | 准确率 | ROC-AUC | 训练时间 |
|---|---|---|---|---|---|---|
| Isolation Forest | 0.4476 | **0.9535** | 0.2924 | 0.5891 | **0.8701** | 1.4s |
| Local Outlier Factor | **0.6245** | 0.7464 | **0.5369** | **0.6325** | 0.6834 | 16.7s |
| One-Class SVM | 0.4191 | 0.8276 | 0.2806 | 0.5572 | 0.7764 | 1.7s |
🏆 **最佳 F1:**Local Outlier Factor · 🎯 **最佳 ROC-AUC:**Isolation Forest
要重现结果:
```
python models/evaluate.py
```
## 🚀 功能特性
- 基于 `.pcap` 或实时网络流量分析
- 自动特征提取(包大小、熵、到达间隔时间、流统计)
- 多模型异常检测:**Isolation Forest**、**Local Outlier Factor**、**One-Class SVM**
- 使用 NSL-KDD 进行精确率/召回率/F1/ROC-AUC 基准测试的模型评估流水线
- 用于实时可视化和模型比较的 Flask 仪表板
- 完全容器化环境,支持可重复部署
## 🧠 技术栈
| 层级 | 技术 |
|--------|-------------|
| 语言 | Python 3.12 |
| 框架 | Flask 3.0 |
| 网络捕获 | Scapy / tcpdump |
| 机器学习与分析 | Scikit-learn、Pandas、NumPy |
| 容器化 | Docker & Docker Compose |
| 数据集 | NSL-KDD(UNB) |
## 🧩 项目结构
```
adaptive-threat-hunt/
┣ dashboard/ # Flask web interface
┣ feature_extractor/ # Packet feature extraction (Scapy)
┣ models/
┃ ┣ evaluate.py # Multi-model benchmark on NSL-KDD
┃ ┣ train.py # Train a selected model (IF / LOF / OCSVM)
┃ ┗ score.py # Score new traffic against a trained model
┣ results/
┃ ┗ benchmark.json # Saved benchmark metrics
┣ data/ # Sample pcap files
┣ Dockerfile
┣ docker-compose.yml
┣ requirements.txt
┣ RESULTS.md # Full benchmark analysis
┗ README.md
```
## ⚙️ 安装与使用
### 1️⃣ 克隆仓库
```
git clone https://github.com/lucaaccomando/adaptive-threat-hunt.git
cd adaptive-threat-hunt
```
### 2️⃣ 创建虚拟环境并安装依赖
```
python -m venv .venv
source .venv/Scripts/activate # Windows (Git Bash)
# 或者:source .venv/bin/activate # macOS / Linux
python -m pip install -r requirements.txt
```
### 3️⃣ 运行多模型基准测试
```
python models/evaluate.py
```
NSL-KDD 会在首次运行时自动下载(约 1MB),结果将保存至 `results/benchmark.json`。
### 4️⃣ 训练特定模型
```
python models/train.py --model-type isolation_forest # or: lof, ocsvm
```
### 5️⃣ 启动 Flask 仪表板
```
python dashboard/app.py
```
然后打开:👉 **http://localhost:5000**
### 6️⃣ (可选)通过 Docker 运行
```
docker build -t adaptive-threat-hunt .
docker run -p 5000:5000 adaptive-threat-hunt
```
进行实时数据包捕获(需要提升权限):
```
sudo docker run --network host --cap-add=NET_ADMIN --cap-add=NET_RAW adaptive-threat-hunt
```
## 🧰 注意事项
### 文件路径
所有脚本使用相对路径。如果看到绝对路径(如 `/home/user/...`),请替换为:
```
import os
BASE_DIR = os.path.dirname(__file__)
pcap_path = os.path.join(BASE_DIR, '../data/example.pcap')
```
### 模型文件
如果缺少 `model.pkl`,请使用以下命令重新生成:
```
python models/train.py --model-type isolation_forest
```
## 💡 后续改进计划
- 通过精确-召回曲线分析进行阈值调整
- 使用半监督模型(XGBoost / 随机森林)提升召回率
- 集成 ELK 栈以实现安全事件可视化
- 通过 Webhook 或电子邮件通知实现实时告警
- 提供用于探索性分析和特征可视化的 Jupyter 笔记本
- 扩展加密流量的特征工程
## 📜 许可证
MIT 许可证 © 2025 Luca Accomando
## 🤝 致谢
作为一项网络安全研究项目而开发,旨在探索用于入侵检测的自适应机器学习方法。
数据集:[NSL-KDD — University of New Brunswick](https://www.unb.ca/cic/datasets/nsl.html)
标签:Apex, Caido项目解析, Docker, F1, Flask, Isolation Forest, Local Outlier Factor, NIDS, NSL-KDD, One-Class SVM, PCAP分析, Python, ROC-AUC, Scapy, Scikit-learn, 交互式仪表板, 召回率, 可重现部署, 安全防御评估, 实时分析, 容器化, 异常检测, 无后门, 无监督学习, 机器学习, 机器学习驱动, 模型评估, 特征提取, 精准度, 网络安全, 网络异常检测, 网络流量分析, 训练时间, 请求拦截, 赛题练习, 逆向工具, 隐私保护