premangshu6/Nexus-Threat-Intelligence
GitHub: premangshu6/Nexus-Threat-Intelligence
基于随机森林和隔离森林双模型的 AI 驱动网络入侵检测系统,配备 Streamlit 可视化仪表板,能对上传的网络流量 CSV 进行攻击分类、异常检测与威胁诊断。
Stars: 0 | Forks: 0
# Nexus: 威胁情报平台
### 实践 15 — 基于 LLM 的应用开发
## 1. 概述
**项目名称:** Nexus — AI 驱动的网络入侵检测系统
**实践目标:** 使用任意 LLM 构建一个小型、功能完备的项目
**使用的大语言模型 (LLM):** Antigravity (由 Google DeepMind 提供支持)
**开发者:** Premangshu Sahu
**日期:** 2026 年 4 月
## 2. 项目创意与动机
网络安全是现代计算中最严峻的挑战之一。随着组织对互联网基础设施的依赖日益加深,网络攻击的数量和复杂性也呈指数级上升。传统的基于规则的入侵检测系统 (IDS) 依赖于预定义的模式和签名——这种方法在面对新型的零日攻击时从根本上失效了。
**Nexus** 背后的理念是构建一个现代的、AI 驱动的 IDS,通过以下方式超越静态规则:
- 利用**监督式机器学习**将网络流量分类为已知攻击类型。
- 利用**无监督异常检测**标记可能代表新的、未知威胁的异常流量。
- 通过一个**高级的实时仪表板**呈现所有情报,使复杂的安全数据变得易读、美观且可操作。
该项目的构思、架构设计、开发和优化完全是通过与 **Antigravity**(一个最先进的代理式 AI 编程助手)的对话完成的。学生的角色是定义目标、审查输出,并通过结构化的对话迭代地指导 LLM 改进产品——这正是实践目标中所描述的。
## 3. LLM (Antigravity) 的角色
在这个项目的每一个阶段都使用了 Antigravity:
| 阶段 | Antigravity 的工作内容 |
|---|---|
| **创意构思** | 提议使用 NSL-KDD 数据集,建议采用双模型方法 (RF + Isolation Forest) |
| **数据管道** | 编写了完整的 `train_model.py` 脚本,包括编码、训练/测试集分割和评估 |
| **模型训练** | 为两个 ML 模型配置了合适的超参数,生成了评估指标 |
| **应用程序** | 从零开始构建了完整的 `app.py` Streamlit 应用程序 |
| **UI 设计** | 通过 glassmorphism (毛玻璃效果)、实时 CSS 动画、暗黑模式和渐变标题迭代改进了 UI |
| **功能添加** | 增加了攻击诊断部分、全球威胁地图、遥测侧边栏和导出功能 |
| **调试** | 诊断并修复了视频背景、外部 URL 失败、CSS 渲染等问题 |
| **文档编写** | 撰写了这份文档 |
开发过程完全是会话式的。学生发出高级指令(例如,*"让背景动起来"*,*"添加攻击信息"*),然后 Antigravity 将它们转化为生产级代码,解释其决策,并在必要时请求审查。
## 4. 数据集 — NSL-KDD
**NSL-KDD 数据集**是网络入侵检测研究的标准基准数据集。它是原始 KDD Cup 1999 数据集的改进版本,修复了冗余记录和类别不平衡等几个关键缺陷。
### 使用的数据集文件
- `KDDTrain+.txt` — 完整的训练集
### 特征 (共 41 个)
该数据集包含 **41 个特征**,分为四组:
| 类别 | 示例 |
|---|---|
| **基本 TCP/IP 特征** | `duration`, `protocol_type`, `service`, `flag`, `src_bytes`, `dst_bytes` |
| **内容特征** | `hot`, `num_failed_logins`, `logged_in`, `num_compromised`, `root_shell` |
| **流量特征** | `count`, `srv_count`, `serror_rate`, `rerror_rate`, `same_srv_rate` |
| **基于主机的特征** | `dst_host_count`, `dst_host_srv_count`, `dst_host_same_srv_rate` |
### 类别特征
有三列是非数值型的,进行了编码处理:
- `protocol_type` — TCP, UDP, ICMP
- `service` — http, ftp, telnet, private 等
- `flag` — SF, S0, S1, REJ 等
### 攻击类别
数据集包含被标记为 **normal** 或以下某一攻击类别的流量:
| 类别 | 描述 | 示例 |
|---|---|---|
| **DoS** | 拒绝服务——使目标不堪重负 | neptune, smurf, teardrop, pod |
| **Probe** | 监视/扫描攻击 | satan, ipsweep, portsweep, nmap |
| **R2L** | 远程到本地——获取未授权访问权限 | guess_passwd, ftp_write |
| **U2R** | 用户到根用户——权限提升 | buffer_overflow, rootkit |
## 5. 机器学习模型
该系统采用**双模型架构**:一个监督式分类器和一个无监督异常检测器并行运行。
### 5.1 模型 1 — Random Forest (随机森林) 分类器
**目的:** 将每个网络连接分类为 `normal` 或特定的命名攻击类型(例如 neptune, smurf, satan)。
**为什么选择 Random Forest?**
- 非常适合处理高维表格数据
- 对异常值和无关特征具有很强的鲁棒性
- 提供内置的**特征重要性**评分
- 高度可解释,非常适合需要可解释性的安全场景
**配置:**
```
RandomForestClassifier(
n_estimators=150, # 150 decision trees in the ensemble
random_state=42, # For reproducibility
n_jobs=-1 # Use all CPU cores for parallel training
)
```
**工作原理:**
- 150 棵独立的决策树在数据的随机子集上进行训练。
- 每棵树独立地对类标签进行投票。
- 最终预测由所有树的**多数投票**决定。
- 与单一决策树相比,这种集成方法显著减少了过拟合。
**训练:**
```
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
rf_model.fit(X_train, y_train)
```
采用 80/20 的训练-测试集分割比例。模型在 80% 的数据上进行训练,并在剩余的 20% 上进行评估。
**评估指标:**
- **Accuracy (准确率)** — 正确分类的连接的总体百分比
- **Precision (精确率,加权)** — 在所有被标记为某种攻击的连接中,有多少是真正的攻击
- **Recall (召回率,加权)** — 在所有实际的攻击中,模型正确捕获了多少百分比
- **F1 Score (F1 分数,加权)** — 精确率和召回率的调和平均值
### 5.2 模型 2 — Isolation Forest (隔离森林,异常检测)
**目的:** 识别在统计上偏离正常行为的连接,无论它们是否与已知的攻击签名匹配。这是系统防御**零日攻击和新型威胁**的屏障。
**为什么选择 Isolation Forest?**
- 它是一种**无监督**算法——不需要标记的攻击数据。
- 它通过随机划分特征空间并测量数据点可以被隔离的速度来工作。
- 异常点(离群点)被隔离所需的划分次数远远少于正常点。
- 它在处理像网络流量这样的高维数据时具有极好的扩展性。
**配置:**
```
IsolationForest(
contamination=0.05, # Assumes 5% of training data are anomalies
random_state=42
)
```
**工作原理:**
1. 该算法构建一个随机隔离树的集成。
2. 对于每个数据点,它计算需要多少次拆分才能将其隔离。
3. 需要较少拆分次数的点会获得**较低的异常分数**。
4. 分数低于阈值(由 `contamination=0.05` 决定)的点被标记为**异常 (Anomaly)**。
**输出:**
- `1` → 正常流量
- `-1` → 异常(可疑连接)
## 6. 训练管道 (`train_model.py`)
整个数据处理和模型训练流程封装在 `train_model.py` 中。以下是逐步分解:
```
1. Load Dataset
└── Read KDDTrain+.txt with 43 named columns (41 features + label + difficulty)
2. Encode Categorical Features
└── Apply LabelEncoder to: protocol_type, service, flag
└── Store encoders in cat_encoders.pkl for use in the app
3. Encode Attack Labels
└── Apply LabelEncoder to the 'label' column
└── Store encoder in label_encoder.pkl
4. Feature/Target Split
└── X = all 41 feature columns
└── y = encoded label column
5. Train/Test Split (80/20)
6. Train Random Forest Classifier
└── 150 estimators, all CPU cores, random_state=42
7. Evaluate on Test Set
└── Compute Accuracy, Precision, Recall, F1, Confusion Matrix
8. Generate Feature Importance Chart
└── Saved as feature_importance.png
9. Train Isolation Forest
└── contamination=0.05, random_state=42
10. Save All Artifacts
└── model.pkl — Random Forest model
└── iso_model.pkl — Isolation Forest model
└── label_encoder.pkl — Attack label encoder
└── cat_encoders.pkl — Categorical feature encoders
```
## 7. 应用程序 (`app.py`)
前端应用程序是使用 **Streamlit** 构建的,这是一个专为数据科学仪表板设计的 Python 原生 Web 框架。它被构造成一个单页应用程序,包含几个不同的部分。
### 7.1 实时网络空间背景
该背景完全由 **CSS 动画**构建——包含两个叠加的效果:
1. **滚动星空** (`.stApp::before`) — 由彩色数据节点(蓝色、紫色、白色)组成的重复径向渐变图案,不断向上滚动,模拟数据流。
2. **3D 扫描网格** (`.stApp::after`) — 一个带有透视变换的网格,通过滚动营造出在网络空间中穿梭前行的错觉。
选择这种方法而不是嵌入视频,是为了保证可靠性、高性能以及不依赖外部 URL。
### 7.2 Glassmorphism (毛玻璃) UI
所有容器都使用了 **glassmorphism**——一种现代设计模式,结合了:
- 半透明的暗色背景 (`rgba(15, 20, 30, 0.55)`)
- 高模糊度的背景滤镜 (`blur(20px) saturate(200%)`)
- 细微的边框高亮 (`rgba(255, 255, 255, 0.1)`)
- 深层阴影效果
### 7.3 实时遥测侧边栏
侧边栏显示模拟的服务器健康指标(CPU 负载、内存使用率、网络吞吐量)以及动画进度条。这些值在每次应用程序加载时进行伪随机化,以模拟实时监控环境。
### 7.4 核心分析管道 (上传 CSV 时)
```
Upload CSV → Encode Categorical Columns
→ Run Isolation Forest → tag each row as Normal/Anomaly
→ Run Random Forest → classify each row by attack type
→ Compute Threat Score (0 for normal, 90 for attack)
→ Display Metrics (Total, Attacks, Anomalies)
→ Threat Diagnostics (per attack type)
→ Global Threat Map
→ Distribution Charts
→ Export Report
```
### 7.5 威胁诊断
对于上传中检测到的每种唯一攻击类型,系统会渲染一个详细的可展开面板,显示:
- **分类类型**(例如,DoS — SYN Flood)
- 表明该特定攻击的**关键 NSL-KDD 参数**
- **建议的缓解/修复**策略
这些情报来源于内置的 `ATTACK_INFO` 知识库——一个包含最常见 NSL-KDD 攻击档案的精选字典。
### 7.6 全球威胁地图
由于原始网络流量不包含地理数据,系统使用从现实世界互联网热点(北美、欧洲、亚洲)中提取的**模拟地理坐标**,以直观展示全球威胁源映射的概念。此功能说明了企业级系统在生产环境中如何可视化攻击源。
### 7.7 交互式图表 (Plotly Express)
并排渲染了两个 Plotly 图表:
| 图表 | 类型 | 用途 |
|---|---|---|
| 整体流量状态 | 圆环图 | 正常与攻击流量的比例 |
| 特定威胁的频率 | 彩色条形图 | 出现了哪些攻击类型及其频率 |
这两个图表都使用透明背景和浅色字体,以与暗黑主题无缝融合。
### 7.8 导出情报报告
一键下载按钮可将完全丰富的数据集(原始特征 + `Anomaly Detection` + `Prediction` + `Threat Score`)导出为名为 `nexus_threat_report.csv` 的 CSV 文件。
## 8. 技术栈
| 组成部分 | 技术 |
|---|---|
| 编程语言 | Python 3 |
| ML 框架 | scikit-learn |
| 数据处理 | pandas, numpy |
| 模型持久化 | joblib |
| Web 应用程序 | Streamlit |
| 可视化 | Plotly Express |
| UI 样式 | 自定义 CSS (Glassmorphism,CSS 动画) |
| 开发助手 | Antigravity (Google DeepMind 的 LLM) |
## 9. 文件与目录结构
```
nexus-threat-intelligence/
│
├── app.py # Main Streamlit application (UI + inference)
├── train_model.py # Data pipeline and model training script
├── KDDTrain+.txt # NSL-KDD training dataset (raw)
├── test_sample.csv # Sample CSV for demonstration (10 connections)
│
├── model.pkl # Trained Random Forest Classifier
├── iso_model.pkl # Trained Isolation Forest
├── label_encoder.pkl # Attack label encoder
├── cat_encoders.pkl # Categorical feature encoders
│
└── feature_importance.png # Bar chart of feature importance scores
```
## 10. 在 `test_sample.csv` 上的结果
提供的测试样本包含 **10 个网络连接**,具有以下特征:
| # | Duration | Protocol | Flag | src_bytes | 检测为 |
|---|---|---|---|---|---|
| 1–5 | 0 | tcp | S0 | 0 | neptune (DoS — SYN Flood) |
| 6 | 2 | udp | SF | 4000 | 不定 |
| 7–9 | 3–5 | tcp | S0 | 4500–5000 | neptune (DoS — SYN Flood) |
| 10 | 6 | udp | SF | 3500 | 不定 |
**模型得出的关键观察结果:**
- `S0` 标志(已发送 SYN,无回复)结合零 `dst_bytes` 以及高 `serror_rate`/`count` 是 **SYN Flood (neptune) 攻击**的最强指标。
- 模型在没有被明确告知攻击标签的情况下正确识别了这些模式。
## 11. 总结
Nexus 表明,使用 LLM 助手可以快速开发出功能完备、视觉精致且由 AI 驱动的安全工具。该项目实现了:
- 结合监督式和无监督式 ML 的**双层威胁检测**
- 通过威胁诊断知识库提供**可解释的 AI 输出**
- 具有实时动画、glassmorphism 和交互式 Plotly 可视化的**高级、生产级质量的 UI**
- **实用价值** — CSV 上传、威胁地图和导出功能使其可以立即投入使用
将 **Antigravity** 作为 LLM 副驾驶极大地加速了开发进程。每一个组件——从数据编码管道到动画 CSS 背景——都是通过高级自然语言指令产生的,学生进行审查并迭代优化。这准确地展示了那种正逐渐成为现代软件工程标准的 **LLM 增强开发工作流**。
标签:Apex, Kubernetes, NSL-KDD, Python, 人工智能, 入侵检测系统, 威胁情报, 孤立森林, 安全数据湖, 实时监控大屏, 开发者工具, 异常检测, 无后门, 无监督学习, 机器学习, 深度学习, 用户模式Hook绕过, 监督学习, 网络安全, 网络攻击识别, 网络流量分析, 逆向工具, 随机森林, 隐私保护, 零日攻击防护