ArksherX/ot-threat-intelligence-agent
GitHub: ArksherX/ot-threat-intelligence-agent
一款利用本地 AI 大模型自动监控并筛选 OT/ICS 相关 CVE 漏洞,并生成实时可视化报告的智能威胁情报代理工具。
Stars: 3 | Forks: 0
# 🛡️ OT Threat Intelligence Agent
**用于实时监控 OT/ICS 漏洞的自主 AI Agent**
## 一款智能网络安全 Agent,用于监控国家漏洞数据库 (NVD) 的最新 CVE,使用 Qwen LLM 筛选与 OT/ICS 相关的威胁,并在实时 Streamlit 仪表板上展示。
## 📋 目录
- [功能特性](#features)
- [系统架构](#architecture)
- [前置条件](#prerequisites)
- [安装说明](#installation)
- [配置](#configuration)
- [使用方法](#usage)
- [项目结构](#project-structure)
- [工作原理](#how-it-works)
- [示例输出](#sample-output)
- [故障排除](#troubleshooting)
- [未来增强](#future-enhancements)
## ✨ 功能特性
- **实时 CVE 监控**:每 10 分钟从 NVD API 获取最新漏洞
- **AI 驱动筛选**:使用 Qwen LLM 智能筛选与 OT/ICS 相关的威胁
- **自动化影响分析**:为每个威胁生成工厂/工业影响评估
- **实时仪表板**:基于 Streamlit 的 Web 界面,支持实时更新
- **结构化 JSON 报告**:机器可读的输出,便于与其他工具集成
- **智能缓存**:避免处理重复的 CVE
- **严重性分类**:基于 CVSS 的自动严重性分类
## 🏗️ 系统架构
```
┌─────────────────┐
│ NVD API │ ← Fetch latest CVEs
│ (NIST/MITRE) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Data Pipeline │ ← Phase 1: Extract CVE data
│ (Python) │ (ID, CVSS, Description)
└────────┬────────┘
│
▼
┌─────────────────┐
│ AI Agent │ ← Phase 2: Filter OT/ICS threats
│ (Qwen LLM) │ Keywords: SCADA, PLC, HMI, etc.
└────────┬────────┘
│
▼
┌─────────────────┐
│ Report Generator│ ← Phase 3: Generate JSON report
│ (Structured) │ with AI insights
└────────┬────────┘
│
▼
┌─────────────────┐
│ Dashboard │ ← Phase 4: Visualize threats
│ (Streamlit) │ Live web interface
└─────────────────┘
```
### 技术栈
- **Python 3.9+**:核心编程语言
- **NVD API**:CVE 数据源 (NIST 国家漏洞数据库)
- **Qwen LLM** (通过 Ollama):免费、本地运行的 AI 模型,用于筛选
- **Streamlit**:仪表板框架
- **Pandas**:数据处理
- **Schedule**:任务自动化
## 📦 前置条件
### 所需软件
1. **Python 3.9 或更高版本**
python --version
2. **Ollama** (用于在本地运行 Qwen LLM)
# Linux/Mac
curl -fsSL https://ollama.com/install.sh | sh
# Windows
# 从 https://ollama.com/download 下载
3. **NVD API Key** (免费)
- 注册地址:https://nvd.nist.gov/developers/request-an-api-key
- 提供更高的速率限制(30 秒内 50 次请求 vs 30 秒内 5 次请求)
### 系统要求
- **内存 (RAM)**:最低 8GB(运行 Qwen 模型推荐 16GB)
- **磁盘空间**:5GB(用于 Qwen 模型)
- **网络**:稳定的连接,用于调用 NVD API
## 🚀 安装说明
### 步骤 1:克隆仓库
```
git clone https://github.com/ArksherX/ot-threat-intelligence-agent.git
cd ot-threat-intelligence-agent
```
### 步骤 2:创建虚拟环境
```
# 创建虚拟环境
python -m venv venv
# 激活环境
# Linux/Mac:
source venv/bin/activate
# Windows:
venv\Scripts\activate
```
### 步骤 3:安装 Python 依赖
```
pip install -r requirements.txt
```
### 步骤 4:安装并设置 Qwen 模型
```
# 拉取 Qwen 模型(可能需要几分钟)
ollama pull qwen2.5:latest
# 验证安装
ollama list
```
## ⚙️ 配置
### 创建 `.env` 文件
在项目根目录下创建一个 `.env` 文件:
```
# NVD API 配置
NVD_API_KEY=your_api_key_here
# Qwen 模型配置
QWEN_MODEL=qwen2.5:latest
# Agent 配置
FETCH_INTERVAL_MINUTES=10
```
### 配置选项
| 变量 | 描述 | 默认值 |
|----------|-------------|---------|
| `NVD_API_KEY` | 您的 NVD API 密钥 | None (可选,但推荐) |
| `QWEN_MODEL` | Qwen 模型版本 | qwen2.5:latest |
| `FETCH_INTERVAL_MINUTES` | 检查频率 | 10 |
## 🎯 使用方法
### 运行一次 (测试模式)
获取并分析过去 2 天的 CVE:
```
python run_agent.py --fallback
```
### 运行一次 (实时模式)
获取过去 10 分钟内的 CVE:
```
python run_agent.py
```
### 持续运行
每 10 分钟监控一次 CVE:
```
python run_agent.py --continuous
```
### 自定义间隔
以自定义间隔运行(例如每 15 分钟):
```
python run_agent.py --continuous --interval 15
```
### 启动仪表板
在**单独的终端**中:
```
streamlit run src/dashboard.py
```
仪表板访问地址:**http://localhost:8501**
### 命令行选项
```
usage: run_agent.py [-h] [--continuous] [--interval INTERVAL]
[--fallback] [--model MODEL]
OT Threat Intelligence Agent
optional arguments:
-h, --help show this help message
--continuous Run continuously (default: run once)
--interval INTERVAL Interval in minutes for continuous mode (default: 10)
--fallback Use fallback mode (fetch last 2 days for testing)
--model MODEL Qwen model to use (default: qwen2.5:latest)
```
## 📁 项目结构
```
ot-threat-intelligence-agent/
├── src/
│ ├── __init__.py
│ ├── data_pipeline.py # Phase 1: CVE fetching from NVD
│ ├── ai_agent.py # Phase 2: AI filtering with Qwen
│ ├── report_generator.py # Phase 3: JSON report generation
│ └── dashboard.py # Phase 4: Streamlit dashboard
├── data/
│ ├── output_sample.json # Generated threat report
│ └── cve_cache.json # Cache of processed CVEs
├── logs/
│ └── agent.log # Application logs
├── config/
│ └── config.yaml # Configuration (optional)
├── tests/
│ └── test_agent.py # Unit tests (optional)
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration (optional)
├── docker-compose.yml # Docker Compose setup (optional)
├── .env # Environment variables (create this)
├── .env.example # Environment template
├── .gitignore # Git ignore rules
├── README.md # This file
└── run_agent.py # Main entry point
```
## 🔍 工作原理
### 第一阶段:数据管道
**文件**:`src/data_pipeline.py`
1. 使用可选的 API 密钥连接到 NVD API
2. 获取过去 10 分钟内发布的 CVE
3. 提取:CVE ID、CVSS 评分、描述、参考链接
4. 缓存已处理的 CVE 以避免重复
5. 返回结构化的 CVE 数据
**关键特性**:
- 遵守 NVD API 速率限制(请求之间延迟 6 秒)
- 支持实时模式和回退模式
- 优雅地处理 API 错误
### 第二阶段:AI Agent
**文件**:`src/ai_agent.py`
1. **关键词预筛选**:快速检查 OT/ICS 关键词
- SCADA, PLC, HMI, ICS, Siemens, Rockwell, Modbus 等
2. **LLM 确认**:使用 Qwen 验证 OT 相关性
- 分析完整的 CVE 描述
- 二元分类:OT 相关 或 仅限 IT
3. **影响分析**:生成工厂/工业影响评估
- 解释运营风险
- 考虑严重性等级 (CVSS 评分)
**AI 提示词策略**:
```
You are a cybersecurity expert specializing in Operational Technology (OT)
and Industrial Control Systems (ICS).
Analyze the following CVE description and determine if it is relevant to
OT/ICS environments such as factories, power plants, or critical infrastructure.
OT/ICS indicators include:
- Industrial control systems: SCADA, PLC, HMI, DCS, RTU
- Industrial vendors: Siemens, Rockwell Automation, Schneider Electric...
- Industrial protocols: Modbus, DNP3, OPC, Profinet...
CVE Description: [...]
Answer with ONLY 'YES' if this CVE affects OT/ICS systems,
or 'NO' if it only affects standard IT systems.
```
### 第三阶段:报告生成
**文件**:`src/report_generator.py`
1. 将筛选后的 CVE 结构化为 JSON 格式
2. 根据 CVSS 评分计算严重性等级:
- CRITICAL (严重): 9.0-10.0
- HIGH (高危): 7.0-8.9
- MEDIUM (中危): 4.0-6.9
- LOW (低危): 0.1-3.9
3. 生成严重性统计
4. 保存到 `data/output_sample.json`
### 第四阶段:仪表板
**文件**:`src/dashboard.py`
1. 从 JSON 报告加载威胁数据
2. 显示指标:威胁总数、严重性分布
3. 显示详细的威胁卡片,包含:
- CVE ID 和严重性标签
- CVSS 评分
- 描述
- AI 生成的 影响分析
- 参考链接
4. 功能:
- 手动刷新按钮
- 自动刷新选项 (可配置间隔)
- 严重性筛选
- CVSS 评分筛选
- 表格和卡片视图模式
- JSON 下载
## 📊 示例输出
### JSON 报告 (`data/output_sample.json`)
```
{
"generated_at": "2026-01-26T10:30:00.000000Z",
"report_version": "1.0",
"total_threats": 2,
"severity_breakdown": {
"critical": 1,
"high": 1,
"medium": 0,
"low": 0
},
"threats": [
{
"cve_id": "CVE-2026-12345",
"cvss_score": 9.8,
"severity": "CRITICAL",
"description": "A critical vulnerability in Siemens SIMATIC S7-1200 PLC allows remote code execution through the Profinet protocol...",
"ai_insight": "This vulnerability poses severe risk to manufacturing facilities using Siemens PLCs. Attackers could gain complete control of production line controllers, potentially causing equipment damage, production shutdowns, or safety incidents. Immediate patching is critical for any facility running affected S7-1200 controllers.",
"published_date": "2026-01-26T08:15:00.000",
"last_modified": "2026-01-26T08:15:00.000",
"references": [
"https://cert-portal.siemens.com/..."
]
},
{
"cve_id": "CVE-2026-67890",
"cvss_score": 7.5,
"severity": "HIGH",
"description": "Authentication bypass in Rockwell Automation FactoryTalk View HMI software...",
"ai_insight": "This HMI vulnerability could allow unauthorized operators to access and manipulate critical process controls. In industrial environments, this could lead to incorrect parameter settings, unauthorized equipment operation, or disabled safety interlocks, risking both production integrity and worker safety.",
"published_date": "2026-01-26T09:45:00.000",
"last_modified": "2026-01-26T09:45:00.000",
"references": []
}
]
}
```
### 控制台输出
```
╔═══════════════════════════════════════════════════════════════╗
║ ║
║ OT THREAT INTELLIGENCE AGENT v1.0 ║
║ Automated CVE Monitoring for ICS/OT ║
║ ║
║ Powered by NVD API + Qwen AI ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
2026-01-26 10:30:00 - INFO - Initializing OT Threat Intelligence Agent...
2026-01-26 10:30:01 - INFO - Ollama verified with model: qwen2.5:latest
2026-01-26 10:30:01 - INFO - Agent initialized successfully
======================================================================
Starting agent cycle...
======================================================================
[PHASE 1] Fetching latest CVEs from NVD...
2026-01-26 10:30:02 - INFO - Fetched 15 new CVEs
[PHASE 2] Filtering for OT/ICS relevance using Qwen AI...
2026-01-26 10:30:05 - INFO - [1/15] Analyzing CVE-2026-12345...
2026-01-26 10:30:10 - INFO - ✓ OT-RELEVANT: CVE-2026-12345
2026-01-26 10:30:15 - INFO - [2/15] Analyzing CVE-2026-67890...
2026-01-26 10:30:20 - INFO - ✓ OT-RELEVANT: CVE-2026-67890
...
2026-01-26 10:32:00 - INFO - Identified 2 OT-relevant threats
[PHASE 3] Generating threat intelligence report...
2026-01-26 10:32:01 - INFO - Report saved to data/output_sample.json
======================================================================
CYCLE COMPLETE
======================================================================
Total OT Threats: 2
Report saved to: data/output_sample.json
Critical: 1, High: 1, Medium: 0, Low: 0
======================================================================
```
## 🔧 故障排除
### 常见问题
#### 1. **Ollama 未找到**
```
Error: Ollama is not installed
```
**解决方案**:从 https://ollama.com 安装 Ollama
```
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:latest
```
#### 2. **NVD API 速率限制**
```
HTTP Error 429: Too Many Requests
```
**解决方案**:
- 从 NVD 获取 API 密钥(将限制增加到 30 秒 50 次请求)
- 添加到 `.env` 文件:`NVD_API_KEY=your_key_here`
#### 3. **未发现 CVE**
```
No new CVEs found in this cycle
```
**解决方案**:如果最近没有发布 CVE,这是正常的。使用回退模式进行测试:
```
python run_agent.py --fallback
```
#### 4. **Qwen 模型超时**
```
Error querying Qwen: timeout
```
**解决方案**:
- 确保您有足够的内存 (最低 8GB)
- 尝试较小的模型:`ollama pull qwen2.5:7b`
- 更新 `.env`:`QWEN_MODEL=qwen2.5:7b`
#### 5. **仪表板无法加载**
```
streamlit: command not found
```
**解决方案**:确保已激活虚拟环境并安装了依赖项:
```
source venv/bin/activate
pip install -r requirements.txt
streamlit run src/dashboard.py
```
## 🚀 未来增强
### 计划功能
1. **邮件/Slack 通知**:针对严重威胁发出警报
2. **历史趋势**:随时间追踪漏洞趋势
3. **自定义关键词列表**:用户定义的 OT 供应商/协议列表
4. **多源集成**:CISA ICS 警报、供应商公告
5. **威胁优先级排序**:基于资产清单的风险评分
6. **修复建议**:自动化的缓解建议
7. **API 端点**:用于与 SIEM/SOAR 集成的 RESTful API
8. **Docker 部署**:容器化部署选项
### 可扩展性
该 Agent 设计为模块化且可扩展:
- **自定义数据源**:在 `data_pipeline.py` 中添加新的 CVE 来源
- **替代 LLM**:在 `ai_agent.py` 中将 Qwen 替换为 OpenAI/Claude
- **增强筛选**:在 `ai_agent.py` 中修改筛选逻辑
- **自定义报告**:扩展 `report_generator.py` 以支持不同格式
## 📝 许可证
本项目专为 ControlPoint AI & Data 实习挑战赛创建。
## 👤 作者
**Your Name**
- GitHub: Arksher(https://github.com/ArksherX)
- Email: owolabimiracle@gmail.com
## 🙏 致谢
- **NIST NVD**:提供全面的 CVE 数据
- **Ollama Team**:让 LLM 能够在本地运行
- **Qwen Team**:提供出色的开源模型
- **Streamlit**:提供出色的仪表板框架
## 📚 参考资料
- [NVD API 文档](https://nvd.nist.gov/developers)
- [Qwen 模型卡](https://ollama.com/library/qwen2.5)
- [Ollama 文档](https://ollama.com/docs)
- [Streamlit 文档](https://docs.streamlit.io)
- [CVSS 规范](https://www.first.org/cvss/)
**用 ❤️ 构建,旨在保护关键基础设施**
标签:AI风险缓解, CVSS评分, DLL 劫持, ICS, impacket, Kubernetes, NTLM Relay, NVD, OT安全, PKINIT, PLC, Python, Qwen, SCADA, Streamlit, 人工智能, 关键基础设施, 哈希传递, 大语言模型, 威胁情报, 实时处理, 密码管理, 工业互联网, 工控安全, 开发者工具, 无后门, 无线安全, 智能过滤, 漏洞监测, 用户模式Hook绕过, 网络安全, 自动化Agent, 访问控制, 逆向工具, 隐私保护