akrishnash/anomaly-detection
GitHub: akrishnash/anomaly-detection
一个结合 Isolation Forest 与 GPT-4o 的 AI 网络安全代理,用于对真实僵尸网络流量进行无监督异常检测并生成带有 CVE 和 MITRE ATT&CK 背景的威胁分析报告。
Stars: 0 | Forks: 0
# SecureAI Agent — 针对真实僵尸网络流量的 AI 威胁分诊
## 交互式演示
一个交互式的 **Streamlit 应用**(`streamlit_app.py`)可让你探索检测器*为什么*会
遇到瓶颈:它实时在真实的 CTU-13 流量上运行 Isolation Forest,并展示正常与恶意得分的
重叠情况、KS 上限,以及当你移动阈值时召回率/精确率如何权衡——
而 AUC 和 KS 则保持不变。
```
pip install -r requirements.txt
streamlit run streamlit_app.py
```
**▶ 在线应用:** [anomaly-detection-5e6hvdpv5q7dmmisymrpdh.streamlit.app](https://anomaly-detection-5e6hvdpv5q7dmmisymrpdh.streamlit.app/)
## 该 Agent 的功能
```
PCAP / network logs
│
▼
┌─────────────────────────────┐
│ agent.py (GPT-4o loop) │ bounded tool-calling loop, full audit trail
└──────┬───────────────┬──────┘
│ │
▼ ▼
analyze_traffic() lookup_cve()
(Isolation Forest) (CVE + MITRE ATT&CK KB)
│ │
▼ ▼
┌─────────────────────────────┐
│ Grounded threat report: │
│ findings · severity · CVEs │
│ · ATT&CK · mitigations │
└─────────────────────────────┘
```
该 Agent **仅提供建议** —— 它绝不会采取自动化操作。每一次工具调用都会被
记录;人工审查始终是最终步骤。
## 快速开始
```
git clone https://github.com/akrishnash/anomaly-detection.git
cd anomaly-detection
pip install -r requirements.txt
```
### 运行 Agent
```
export OPENAI_API_KEY=sk-...
python agent.py
```
**本地 / 物理隔离模式** —— 在 `agent.py` 中替换两行代码,无需互联网连接:
```
# Cloud
client = OpenAI()
MODEL = "gpt-4o"
# 通过 Ollama 进行 Local
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
MODEL = "llama3.1"
```
### 直接运行检测引擎
```
python run_ctu13.py # 10-feature Isolation Forest on CTU-13
python run_ctu13_v2.py # all-features version (all CICFlowMeter columns)
python compare_datasets.py # Attack vs Normal — Cohen's d, ROC, PR, threshold sweep
python diagnose_overlap.py # score-overlap diagnosis (AUC + KS ceiling)
python explain_isolation_forest.py # step-by-step IF walkthrough on toy data
```
图表将保存到 `graphs/` 目录中。(请先将 CTU-13 CSV 文件放置在 `sample_logs/` 目录中 —— 来源:
[imfaisalmalik/CTU13-CSV-Dataset](https://github.com/imfaisalmalik/CTU13-CSV-Dataset)。)
## 检测引擎
完全**无监督** —— 无需带标签的攻击数据。已在 CTU-13 上完成验证:
### `run_ctu13.py`(每类 6,000 个流,10 个特征)
| 类别 | 精确率 | 召回率 | F1 |
|---|---|---|---|
| 正常 | 0.630 | 0.757 | 0.687 |
| 攻击 | **0.695** | **0.555** | **0.617** |
| 总体准确率 | | | **0.656** |
```
Confusion Matrix:
TN = 4,541 FP = 1,459
FN = 2,671 TP = 3,329
```
### `compare_datasets.py`(每类 20,000 个流)
| 指标 | 数值 |
|---|---|
| 攻击精确率 | 0.637 |
| 攻击召回率 | 0.509 |
| ROC-AUC | **0.706** |
| 平均精确率 | 0.612 |
### 为什么隐蔽的攻击流量仍然会显示出攻击特征
CTU-13 主要是**僵尸网络 C&C** —— 故意保持静默和低流量。攻击流的中位数
字节率接近于零:这不是“没有发生任何事”,而是对于真实用户流量来说可疑地*过于
安静*。区分性信号(Cohen's d 效应量):
| 特征 | Cohen's d | 方向 | 含义 |
|---|---|---|---|
| SYN Flag Count | **+0.86** | 攻击 > 正常 | 持续的连接尝试 —— 端口扫描 / C&C 建立 |
| Packet Rate | **+0.63** | 攻击 > 正常 | 双峰分布:接近零的信标以及 DDoS 突发峰值 |
| Fwd Pkts/s | **+0.63** | 攻击 > 正常 | 扫描阶段的高前向速率 |
| FIN Flag Count | **+0.31** | 攻击 > 正常 | 许多被突然关闭的连接 |
| Pkt Len Mean | **-0.19** | 正常 > 攻击 | 正常流量具有更大的数据包(HTTP/文件数据) |
| Bwd Bytes | **-0.02** | 正常 > 攻击 | C&C 受害者以几乎为空的 ACK 进行回复 |
Isolation Forest 会在**联合特征空间**中标记异常 —— 一个具有接近零
字节 + 偏高 SYN + 特定时序的流会处于一个孤立区域,随机树会将其迅速切断,
从而获得较低的(异常)得分。
## 研究
该项目同时也是一个关于*为什么*无监督检测器会遇到瓶颈以及如何突破瓶颈的
活跃研究项目:
- **`paper.md`** —— 工作论文:“异常 ≠ 恶意”,失败分解,以及
表示瓶颈实验。
- **`diagnose_overlap.py`** —— 核心诊断:正常与恶意得分分布,
包含 AUC 和 KS 距离上限。
- **`RESEARCH.md`** —— 四个方向(SHAP 可解释性、基准测试、联邦学习、流处理)。
- **`plan.md`** —— 1 个月的论文计划。
## Isolation Forest 的工作原理
1. 构建 `n_estimators` 棵随机树,每棵树都基于随机特征子集构建。
2. 在每个节点上,随机选择一个特征和一个随机拆分值。
3. **异常点在靠近根节点处被隔离** —— 它们需要更少的拆分次数。
4. 异常得分 = 所有树中的平均路径长度(归一化后);路径越短 → 得分越低 → 被标记。
`explain_isolation_forest.py` 在一个包含 13 个点的玩具数据集上演示了这一过程,并提供了每个
树拆分的完整可视化。
## 文件结构
```
anomaly-detection/
│
├── agent.py ← SecureAI Agent (OpenAI tool-calling loop)
├── cve_db.py ← CVE + MITRE ATT&CK knowledge base
│
├── run_ctu13.py ← Detection engine (10 features, 6K rows/class)
├── run_ctu13_v2.py ← All-features version
├── compare_datasets.py ← Attack vs Normal comparison (20K rows each)
├── diagnose_overlap.py ← Score-overlap diagnosis (AUC + KS ceiling)
├── explain_isolation_forest.py← IF explainability on toy data
│
├── graphs/ ← Output PNGs
├── requirements.txt
├── paper.md ← Draft research paper
├── plan.md ← 1-month paper plan
├── RESEARCH.md ← Research directions
└── PROGRESS.md ← Experiment log
```
## 数据集
**CTU-13** —— Sebastián García, Martin Grill, Jan Stiborek, Alejandro Zunino。
*“僵尸网络检测方法的实证比较”*,《Computers & Security》,2014 年。
[stratosphereips.org/datasets-ctu13](https://www.stratosphereips.org/datasets-ctu13)
包含 13 个真实僵尸网络流量场景(Neris、Rbot、Menti、Sogou、Murlo、NSIS.ay),捕获于
CTU 大学网络,并与正常的校园背景流量混合。
标签:AI智能体, AI风险缓解, AMSI绕过, CISA项目, IP 地址批量处理, Kubernetes, LLM工具调用, 威胁检测, 安全, 异常检测, 网络流量分析, 超时处理, 逆向工具, 防御绕过