EclipseManic/ThreatSentry-AI
GitHub: EclipseManic/ThreatSentry-AI
一款结合机器学习的智能威胁狩猎仪表板,通过自动化资产发现与多源数据富化,帮助安全团队主动识别并优先处理关键网络风险。
Stars: 1 | Forks: 0
# ThreatSentry AI:AI 驱动的威胁狩猎工具
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://www.qt.io/qt-for-python)
[](https://scikit-learn.org/)
[](https://www.sqlalchemy.org/)
## 🚀 项目使命
**ThreatSentry AI** 旨在消除安全告警疲劳,并通过智能风险优先级排序实现主动威胁狩猎。它结合了自动化资产发现、多源数据富化和先进的机器学习技术,将原始安全数据转化为可操作的情报。
## 👨💻 作者与致谢
**项目负责人:** EclipseManic
**开发说明:** 这个全面的企业安全平台由一名开发者在 AI 开发工具的辅助下完成架构设计与开发(包括代码生成、优化和文档编写),展示了 AI 辅助软件工程在复杂系统开发中的可行性。
## 📋 执行摘要
现代安全团队面临着前所未有的挑战:
- **告警疲劳**:每日产生数千条告警,信噪比极低,使得人工分类不可能实现
- **数据碎片化**:关键上下文分散在 SIEM、CMDB、补丁系统和网络监控中
- **被动姿态**:仅对已知威胁做出反应,而不是搜寻新兴风险
- **资源限制**:在日益复杂的基础设施中,预算和人员有限
**ThreatSentry AI** 通过以下方式解决这些问题:
1. **自动化外部资产发现**:通过 Shodan API 实现持续可见性
2. **智能多源富化**:来自 NVD、内部系统和行为分析的数据
3. **ML 驱动的风险评分**:使用集成模型进行准确的威胁优先级排序
4. **面向管理层的仪表板**:提供可操作的情报和快速响应能力
5. **主动告警**:在事件发生前突显高风险资产
## ✨ 核心功能
### 🤖 智能风险评分引擎
- **集成机器学习模型**:结合 Random Forest、Gradient Boosting 和 Neural Networks,实现稳健的风险分类
- **多因素分析**:评估 40 多项安全和业务属性,而不仅仅是简单的漏洞数量:
- **时间上下文**:暴露持续时间、补丁滞后、事件历史
- **网络位置**:关键服务状态、网段、防火墙保护
- **行为信号**:认证失败、流量异常、误报历史
- **合规影响**:数据敏感性、监管要求、连接的关键资产
- **置信度评分**:每个预测都包含一个置信度指标(0-1),供分析师衡量可靠性
- **持续学习**:模型在可配置的间隔内自动重训,并集成反馈机制
### 🌐 自动化资产发现与情报融合
- **Shodan 集成**:持续发现面向互联网的设备,支持高级查询
- 针对常见场景的预设查询(SSL 证书、RDP 服务、ICS/Modbus 等)
- 支持针对组织特定资产的定制查询
- **NVD 富化**:使用智能 Banner 解析自动关联 CVE
- Banner 服务提取支持 14 种以上产品类型(Apache、Nginx、MySQL、IIS 等)
- CVSS 评分和严重性分类
- 防止数据丢失:仅在发现漏洞时更新 CVE 指标
- **内部数据集成**(适用于您环境的可扩展架构):
- **CMDB 收集器**:资产分类、关键性级别、合规标签
- **SIEM 收集器**:行为指标、认证模式、异常分数
- **补丁管理收集器**:补丁时效性、缺失更新、补丁滞后分析
- **网络监控收集器**:流量模式、DDoS 检测、异常分数
- **统一数据库**:SQLite,拥有 40 多个索引列,用于高效查询和报告
### 📊 管理仪表板与分析工具
- **基于 PyQt5 的 GUI**,支持深色/浅色主题:
- 实时风险分布可视化(使用 Matplotlib 绘制条形图)
- 可排序、可过滤的设备表,带有颜色编码的风险指示器
- 按组织、国家、风险级别快速过滤
- 跨 IP、组织、国家、风险字段自动搜索
- **交互式设备检查**:
- 详细的漏洞列表及 CVSS 评分
- 漏洞时间线和历史跟踪
- 解释评分的风险因素细分
- **批量操作**:
- 手动触发扫描(Shodan + NVD 富化)
- 带字段验证的 CSV/JSON 数据导入
- 伴随性能指标进行的模型重训
- 手动发送告警以验证配置
- **分析面板**(高级):
- 风险分布趋势
- CVE 影响分析
- 按组织划分的漏洞指标
### 📧 主动邮件告警
- **SendGrid 集成**:针对高风险资产的自动 HTML 邮件通知
- 风险标签变更时立即触发(低/中 → 高)
- 通过 "notified" 状态跟踪防止重复告警
- **丰富的告警内容**:
- 包含风险评分和置信度的执行摘要
- 详细的漏洞列表(按 CVSS 排名的前 N 个)
- 针对安全团队背景的风险因素细分
- 可操作的补救建议
- **灵活配置**:定义告警收件人、邮件模板和触发条件
#### 示例告警邮件
![Automated Security Alert Email Template]
*通过 SendGrid 发送的 HTML 格式邮件,包含风险摘要、CVE 详情和补救指导*
### 📈 模型透明度与持续改进
- **性能监控**:
- 跨训练周期的准确率跟踪
- 混淆矩阵和分类报告
- 特征重要性分析以理解模型决策
- 数据漂移检测指标
- **反馈循环**:
- 分析师手动修正风险标签
- 真阳性/假阳性跟踪
- 基于反馈调整模型权重
- 带有元数据记录的自动重训计划
### ⚡ 性能与可靠性
- **针对规模优化**:
- 5 个以上列的数据库索引,实现亚毫秒级查询
- 频繁访问数据的结果缓存(28.7 倍加速)
- 针对大数据集的分页与 "Load More" 功能(初始 50 行 + 每次增量 50 行)
- 使用工作线程的非阻塞 UI(QThread, ThreadPoolExecutor)
- **健壮的错误处理**:
- API 故障的指数退避重试逻辑(Shodan, NVD, SendGrid)
- 可选服务不可用时的优雅降级
- 带文件轮转的全面日志记录
- 线程安全的信号/槽架构防止竞争条件
- **内存高效**:
- 图表渲染后的垃圾回收
- UI 标签页延迟加载以减少启动时间
- 会话上下文管理器确保正确清理
## 🖼️ 视觉概览
### 主仪表板
![ThreatSentry AI Dashboard - Main Threat Hunting Interface]
*实时风险可视化,包含可排序的设备表和风险分布条形图*
### 设备风险评估表
![Device Table with Risk Indicators]
*可排序和过滤的设备列表,带有颜色编码的风险级别(绿色=低,黄色=中,红色=高)*
### 高级过滤面板
![Advanced Filters - CVSS Range, Organization, Country, Risk Level]
*强大的过滤控件,包含 CVSS 范围、组织、国家和风险级别过滤器 + "Clear All" 按钮*
- **CVSS 范围过滤器**:调整最小和最大 CVSS 分数(0-10)以关注特定严重级别
- **组织过滤器**:从数据库中所有组织的下拉菜单中快速筛选特定组织
- **国家过滤器**:按地理位置筛选以识别区域风险
- **风险级别过滤器**:仅显示高、中、低或所有设备,以便集中分析
- **清除所有按钮**:一键将所有过滤器重置为默认值,以再次查看完整数据集
- **应用过滤器**:立即应用所有选定的过滤器,结果实时反映
### 全数据库搜索能力
![Search Input - Multi-Column Search Across Entire Database]
*智能搜索涵盖整个设备数据库,而不仅仅是当前显示的行*
- **全面搜索**:跨 IP 地址、组织名称、国家和风险级别搜索
- **自动 IP 检测**:自动检测 IP 地址格式并据此搜索
- **全数据库覆盖**:搜索结果包括数据库中的所有设备,不限于前 50 行
- **实时结果**:300ms 防抖延迟,实现响应式搜索且不影响性能
- **分页集成**:搜索结果遵循分页系统以实现高效加载
### 智能分页与大数据集支持
![Load More Button - Pagination Controls]
*优化的分页系统,用于高效处理数千台设备*
- **默认显示 50 行**:仪表板加载初始 50 台设备以实现快速渲染
- **渐进式加载**:"Load More (50 rows)" 按钮允许增量加载而不超时
- **内存高效**:仅显示请求的行;从不将整个数据集加载到内存中
- **性能优化**:非阻塞 UI 防止加载大型数据集时冻结
- **状态指示器**:显示 "Showing X of Y devices" 以透明展示总可用数据
- **搜索集成**:搜索过滤器与分页无缝协作,实现快速结果
### 分析与报告面板
![Analytics Tab - Risk Trends and CVE Analysis]
*历史风险趋势、漏洞分析和按组织划分的安全指标*
### 工具与配置
![Tools Tab - Model Status and Data Export]
*模型训练信息、性能指标、数据导出和高级过滤选项*
### 邮件告警通知
![Automated Security Alert Email]
*HTML 格式邮件,包含执行摘要、漏洞详情和补救指导*
### 手动扫描工作流
![Scan Trigger Dialog]
*执行 Shodan + NVD 富化,包含详细的错误报告和进度指示*
## 🛠️ 技术栈
| 层级 | 技术 |
|-------|---------------|
| **后端 (Backend)** | Python 3.9+, SQLAlchemy ORM, APScheduler |
| **ML/AI** | Scikit-learn (Random Forest, Gradient Boosting, MLP), NumPy, Joblib |
| **前端 (Frontend)** | PyQt5, Matplotlib, 自定义主题管理器 |
| **数据** | Pandas, NumPy, SQLite3 |
| **APIs** | Shodan, NVDLib, SendGrid, Requests |
| **工具** | Python-dotenv, Logging 模块, 配置管理 |
## 🏗️ 架构与数据流
```
┌─────────────────────────────────────────────────────────────┐
│ ThreatSentry AI │
├─────────────────────────────────────────────────────────────┤
│ Scheduler (APScheduler) │
├──────────┬──────────────┬──────────────┬───────────┬─────────┤
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
Shodan NVD Lib CMDB SIEM Patch Network
Collector Collector Collector Collector Mgmt Monitor
│ │ │ │ │
└──────────────┴──────────────┴───────────┴─────────┘
│
▼
┌─────────────────┐
│ SQLite DB │
│ (40+ Columns) │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Feature Engine Model Training Predictions
│ │ │
└─────────┬───────┴──────────┬──────┘
▼ ▼
┌──────────────────────┐
│ Ensemble Model │
│ (RF + GB + MLP) │
└──────────┬───────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
PyQt5 GUI Email Alerts Analytics
```
### 数据处理流水线
1. **发现阶段**(可配置间隔,默认 30 分钟)
- 使用可配置查询进行 Shodan 扫描
- 使用 CVE 关联进行 NVD 富化
- 内部系统富化以提供上下文
2. **分析阶段**
- 从 40 多个属性中进行特征工程
- 集成模型预测(Random Forest 40% + Gradient Boosting 40% + MLP 20%)
- 风险标签生成(0=低, 1=中, 2=高)
- 置信度评分
3. **告警阶段**
- 检查新的高风险资产
- 通过 SendGrid 生成并发送邮件告警
- 更新通知状态
4. **模型重训**(可配置间隔,默认 60 分钟)
- 加载所有历史数据
- 提取特征
- 使用平衡类权重训练集成模型
- 验证性能指标
- 保存元数据以供审计
## 📋 入门指南
### 前置条件
- **Python**:3.9 或更高版本
- **API Keys**(必需):
- Shodan API key (https://www.shodan.io/)
- SendGrid API key (https://sendgrid.com/) - 用于邮件告警
- **可选 API Keys**(用于增强富化):
- CMDB 端点和凭据
- SIEM 端点和凭据
- 补丁管理系统端点和凭据
- 网络监控端点和凭据
### 安装
#### 步骤 1:克隆仓库
```
git clone https://github.com/EclipseManic/ThreatSentry-AI.git
cd ThreatSentry-AI
```
#### 步骤 2:创建虚拟环境
```
# 在 Windows 上
python -m venv .venv
.venv\Scripts\activate
# 在 macOS/Linux 上
python3 -m venv .venv
source .venv/bin/activate
```
#### 步骤 3:安装依赖
```
pip install -r requirements.txt
```
#### 步骤 4:配置环境
在项目根目录创建一个 `.env` 文件:
```
cp .env.example .env # If provided, or create new
```
编辑 `.env` 填入您的凭据:
```
# 必需 - Threat Discovery
SHODAN_API_KEY=your_shodan_api_key_here
SHODAN_QUERY= # Leave empty to use presets
SHODAN_QUERY_EMPTY_TO_PRESET=True # Use preset queries when SHODAN_QUERY is empty
# 可选 - 邮件告警
SENDGRID_API_KEY=your_sendgrid_key_here
SENDER_EMAIL=alerts@yourcompany.com # Must be verified in SendGrid
ALERT_RECIPIENTS=security@yourcompany.com,ciso@yourcompany.com
# 可选 - 内部丰富 (在 collectors/ 中实现)
CMDB_API_ENDPOINT=https://cmdb.internal/api
CMDB_API_KEY=your_cmdb_key
SIEM_API_ENDPOINT=https://siem.internal/api
SIEM_API_KEY=your_siem_key
# 配置
SCAN_INTERVAL_MINUTES=30 # How often to scan for new assets
RETRAIN_INTERVAL_MINUTES=60 # How often to retrain the model
MAX_SHODAN_RESULTS=50 # Results per Shodan query
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
# 路径 (可选)
SQLITE_PATH=data/db/threat_sentric_ai.db
MODEL_PATH=data/models/rf_model.pkl
LOG_FILE_PATH=data/logs/threat_sentric_ai.log
```
#### 步骤 5:初始化数据库
```
python -c "from data import init_db; init_db()"
```
#### 步骤 6:运行应用程序
```
python run.py
```
仪表板将启动,并在后台运行调度程序。
## 🚀 使用指南
### 仪表板组件概览
![Dashboard Main Interface with All Tabs]
*概览、分析和工具标签页用于全面的威胁评估*
### 1. 设备表与发现
![Organization and Country Filters with Device List]
*带有颜色编码风险指示器的可排序设备表(绿色=低,黄色=中,红色=高)*
- **颜色编码**:即时视觉风险评估
- **可排序/过滤**:点击列标题或使用快速过滤器进行快速搜索
- **实时更新**:仪表板在检测到新威胁时刷新
### 2. 风险分布图
![Risk Distribution Bar Chart]
*整体安全态势可视化,显示每个风险级别的设备数量*
- 显示所有风险类别的设备数量
- 随着模型预测的变化实时更新
- 识别需要立即关注的安全热点
### 3. 关键操作按钮
- **Scan Now**:手动触发 Shodan + NVD 富化,包含详细的错误报告
- **Refresh**:从最新数据库状态更新仪表板
- **Upload Data**:批量导入包含设备信息的 CSV/JSON
- **Train Model**:使用当前数据手动重训集成模型
### 高级功能
#### 分析标签页
![Analytics Panel - Risk Trends and Metrics]
- 随时间变化的详细风险趋势及历史分析
- 识别最易受攻击的服务
- 组织级风险指标和比较
- CVE 影响分析和漏洞趋势
#### 工具标签页
 获取指南。
增强领域:
- 额外的收集器实现(Nessus, Tenable, Qualys 集成)
- 用于程序化访问的 Web API
- 具有基于角色访问控制的多用户支持
- 高级可视化(Grafana/ELK 集成)
- Kubernetes 部署支持
## 📄 许可证
本项目根据 MIT 许可证授权——详情请参阅 [LICENSE](LICENSE) 文件。
## 📞 支持与联系
- **Issues**:使用 GitHub Issues 进行错误报告和功能请求
- **文档**:参阅 [docs/](docs/) 目录获取详细技术文档
- **Email**:维护者信息见 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## 🙏 致谢
- **Shodan**:提供全面的互联网设备发现
- **NVD/NIST**:提供权威的漏洞数据
- **Scikit-learn**:提供健壮的 ML 库和文档
- **PyQt5**:优秀的 GUI 框架
- **社区**:所有提供反馈的贡献者和用户
**由 EclipseManic 用 ❤️ 制作 | 即刻保障未来基础设施的安全**
pip install -r requirements.txt
```
---
## 🔐 配置
### 1. 环境变量 (`.env` 文件)
Create a `.env` file in the root directory with the following structure:
```bash
# --- Shodan API Key (必需) ---
SHODAN_API_KEY="YOUR_SHODAN_API_KEY"
# --- SendGrid 邮件告警 (必需) ---
SENDGRID_API_KEY="YOUR_SENDGRID_API_KEY"
SENDER_EMAIL="your_verified_sender@example.com"
ALERT_RECIPIENTS="recipient1@example.com,recipient2@example.com"
# --- 数据库 ---
SQLITE_PATH="threat_sentric_ai.db"
# --- 模型 ---
MODEL_PATH="threatsentry_model.pkl"
# --- 调度器 ---
SCAN_INTERVAL_MINUTES="30"
RETRAIN_INTERVAL_MINUTES="60"
RETRAIN_ON_SCHEDULE="True"
# --- Shodan 查询行为控制 ---
SHODAN_QUERY=""
SHODAN_QUERY_EMPTY_TO_PRESET="True"
# --- 日志记录 ---
LOG_LEVEL="INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL
# --- 内部系统凭据 (可选 - 根据您的 collectors 需要添加) ---
# CMDB_API_ENDPOINT="..."
# CMDB_API_KEY="..."
# SIEM_API_ENDPOINT="..."
# SIEM_API_KEY="..."
# PATCH_API_ENDPOINT="..."
# PATCH_API_KEY="..."
# NETWORK_MONITOR_ENDPOINT="..."
# NETWORK_MONITOR_KEY="..."
```
## 🔍 Shodan 查询预设 (`config.py`)
修改 `SHODAN_QUERIES` 字典以定义您的自定义查询预设:
```
SHODAN_QUERIES = {
"default": "product:apache",
"org": 'org:"Your Company Name"',
"net": 'net:"123.45.67.0/24"',
"ssl": 'ssl:"yourcompany.com"',
"hostname": 'hostname:".yourcompany.com"',
"rdp": 'port:3389 "remote desktop"',
"mongodb": 'port:27017 "mongodb"',
"ics_modbus": 'port:502 "modbus"',
"vuln_example": 'vuln:CVE-2024-12345',
"http_login": 'http.title:"Login" org:"Your Company"'
}
```
如果 `.env` 中的 `SHODAN_QUERY` 为空 **且** `SHODAN_QUERY_EMPTY_TO_PRESET=True`,
调度器将自动循环使用这些预设。
## 🧠 实现内部收集器
您需要:
- 使用 API、数据库或 SDK 获取内部数据。
- 将获取的数据映射到 `Device` 模型属性。
- 使用此富化信息更新数据库会话。
如果没有这些集成,模型将缺乏准确预测所需的上下文。
## 🧪 运行应用程序
### (可选)生成初始训练数据
```
python scripts/generate_realistic_training_data.py --count 1000
```
创建 `scripts/my_training_data.json`。
您可以通过 GUI 的 **Upload** 选项上传此文件以初始化训练数据。
### 启动应用程序
```
python run.py
```
GUI 将打开,调度器将自动开始扫描、富化和预测。
## ⚡ 使用生成数据的快速演示
1. 完成安装(步骤 1–3)。
2. 设置您的 `.env` 文件(即使使用占位符密钥)。
3. 可选择在 `config.py` 中调整 Shodan 预设。
4. 生成数据:
python scripts/generate_realistic_training_data.py --count 500
5. 启动应用:
python run.py
6. 在 GUI 中:
- 选择 **Upload** → 选择 `scripts/my_training_data.json`
- 点击 **Refresh** 查看填充的设备数据和风险级别。
## 🛠️ 脚本与使用指南
| 脚本 | 描述 |
|--------|--------------|
| **run.py** | 主入口点。启动 DB、调度器和 GUI。 |
| **scheduler.py** | 处理定期扫描、富化、预测和重训。 |
| **scripts/generate_realistic_training_data.py** | 生成用于测试或引导的仿真训练数据。 |
| **scripts/clear_db_enhanced.py** | 交互式清理数据库或重置通知标志。 |
| **scripts/reset_db.py** | 完全重置数据库。请谨慎使用。 |
### 示例命令
```
# 生成 1000 条记录
python scripts/generate_realistic_training_data.py --count 1000
# 查看清理选项
python scripts/clear_db_enhanced.py --help
# 删除所有设备与漏洞
python scripts/clear_db_enhanced.py --delete-devices --delete-vulns
# 重置通知标志
python scripts/clear_db_enhanced.py --reset-notified
# 危险操作:完全重置
python scripts/reset_db.py
```
## 💬 反馈与建议
本项目由 **EclipseManic** 开发。
虽然目前不接受代码贡献,但非常感谢您的 **反馈和错误报告**。
请打开一个 [Issue](https://github.com/EclipseManic/ThreatSentry-AI/issues) 分享您的想法或报告问题。
## 📄 许可证
本项目根据 **MIT 许可证** 授权。
详情请参阅 [LICENSE](./LICENSE) 文件。
*通过 SendGrid 发送的 HTML 格式邮件,包含风险摘要、CVE 详情和补救指导*
### 📈 模型透明度与持续改进
- **性能监控**:
- 跨训练周期的准确率跟踪
- 混淆矩阵和分类报告
- 特征重要性分析以理解模型决策
- 数据漂移检测指标
- **反馈循环**:
- 分析师手动修正风险标签
- 真阳性/假阳性跟踪
- 基于反馈调整模型权重
- 带有元数据记录的自动重训计划
### ⚡ 性能与可靠性
- **针对规模优化**:
- 5 个以上列的数据库索引,实现亚毫秒级查询
- 频繁访问数据的结果缓存(28.7 倍加速)
- 针对大数据集的分页与 "Load More" 功能(初始 50 行 + 每次增量 50 行)
- 使用工作线程的非阻塞 UI(QThread, ThreadPoolExecutor)
- **健壮的错误处理**:
- API 故障的指数退避重试逻辑(Shodan, NVD, SendGrid)
- 可选服务不可用时的优雅降级
- 带文件轮转的全面日志记录
- 线程安全的信号/槽架构防止竞争条件
- **内存高效**:
- 图表渲染后的垃圾回收
- UI 标签页延迟加载以减少启动时间
- 会话上下文管理器确保正确清理
## 🖼️ 视觉概览
### 主仪表板
![ThreatSentry AI Dashboard - Main Threat Hunting Interface]
*实时风险可视化,包含可排序的设备表和风险分布条形图*
### 设备风险评估表
![Device Table with Risk Indicators]
*可排序和过滤的设备列表,带有颜色编码的风险级别(绿色=低,黄色=中,红色=高)*
### 高级过滤面板
![Advanced Filters - CVSS Range, Organization, Country, Risk Level]
*强大的过滤控件,包含 CVSS 范围、组织、国家和风险级别过滤器 + "Clear All" 按钮*
- **CVSS 范围过滤器**:调整最小和最大 CVSS 分数(0-10)以关注特定严重级别
- **组织过滤器**:从数据库中所有组织的下拉菜单中快速筛选特定组织
- **国家过滤器**:按地理位置筛选以识别区域风险
- **风险级别过滤器**:仅显示高、中、低或所有设备,以便集中分析
- **清除所有按钮**:一键将所有过滤器重置为默认值,以再次查看完整数据集
- **应用过滤器**:立即应用所有选定的过滤器,结果实时反映
### 全数据库搜索能力
![Search Input - Multi-Column Search Across Entire Database]
*智能搜索涵盖整个设备数据库,而不仅仅是当前显示的行*
- **全面搜索**:跨 IP 地址、组织名称、国家和风险级别搜索
- **自动 IP 检测**:自动检测 IP 地址格式并据此搜索
- **全数据库覆盖**:搜索结果包括数据库中的所有设备,不限于前 50 行
- **实时结果**:300ms 防抖延迟,实现响应式搜索且不影响性能
- **分页集成**:搜索结果遵循分页系统以实现高效加载
### 智能分页与大数据集支持
![Load More Button - Pagination Controls]
*优化的分页系统,用于高效处理数千台设备*
- **默认显示 50 行**:仪表板加载初始 50 台设备以实现快速渲染
- **渐进式加载**:"Load More (50 rows)" 按钮允许增量加载而不超时
- **内存高效**:仅显示请求的行;从不将整个数据集加载到内存中
- **性能优化**:非阻塞 UI 防止加载大型数据集时冻结
- **状态指示器**:显示 "Showing X of Y devices" 以透明展示总可用数据
- **搜索集成**:搜索过滤器与分页无缝协作,实现快速结果
### 分析与报告面板
![Analytics Tab - Risk Trends and CVE Analysis]
*历史风险趋势、漏洞分析和按组织划分的安全指标*
### 工具与配置
![Tools Tab - Model Status and Data Export]
*模型训练信息、性能指标、数据导出和高级过滤选项*
### 邮件告警通知
![Automated Security Alert Email]
*HTML 格式邮件,包含执行摘要、漏洞详情和补救指导*
### 手动扫描工作流
![Scan Trigger Dialog]
*执行 Shodan + NVD 富化,包含详细的错误报告和进度指示*
## 🛠️ 技术栈
| 层级 | 技术 |
|-------|---------------|
| **后端 (Backend)** | Python 3.9+, SQLAlchemy ORM, APScheduler |
| **ML/AI** | Scikit-learn (Random Forest, Gradient Boosting, MLP), NumPy, Joblib |
| **前端 (Frontend)** | PyQt5, Matplotlib, 自定义主题管理器 |
| **数据** | Pandas, NumPy, SQLite3 |
| **APIs** | Shodan, NVDLib, SendGrid, Requests |
| **工具** | Python-dotenv, Logging 模块, 配置管理 |
## 🏗️ 架构与数据流
```
┌─────────────────────────────────────────────────────────────┐
│ ThreatSentry AI │
├─────────────────────────────────────────────────────────────┤
│ Scheduler (APScheduler) │
├──────────┬──────────────┬──────────────┬───────────┬─────────┤
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
Shodan NVD Lib CMDB SIEM Patch Network
Collector Collector Collector Collector Mgmt Monitor
│ │ │ │ │
└──────────────┴──────────────┴───────────┴─────────┘
│
▼
┌─────────────────┐
│ SQLite DB │
│ (40+ Columns) │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Feature Engine Model Training Predictions
│ │ │
└─────────┬───────┴──────────┬──────┘
▼ ▼
┌──────────────────────┐
│ Ensemble Model │
│ (RF + GB + MLP) │
└──────────┬───────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
PyQt5 GUI Email Alerts Analytics
```
### 数据处理流水线
1. **发现阶段**(可配置间隔,默认 30 分钟)
- 使用可配置查询进行 Shodan 扫描
- 使用 CVE 关联进行 NVD 富化
- 内部系统富化以提供上下文
2. **分析阶段**
- 从 40 多个属性中进行特征工程
- 集成模型预测(Random Forest 40% + Gradient Boosting 40% + MLP 20%)
- 风险标签生成(0=低, 1=中, 2=高)
- 置信度评分
3. **告警阶段**
- 检查新的高风险资产
- 通过 SendGrid 生成并发送邮件告警
- 更新通知状态
4. **模型重训**(可配置间隔,默认 60 分钟)
- 加载所有历史数据
- 提取特征
- 使用平衡类权重训练集成模型
- 验证性能指标
- 保存元数据以供审计
## 📋 入门指南
### 前置条件
- **Python**:3.9 或更高版本
- **API Keys**(必需):
- Shodan API key (https://www.shodan.io/)
- SendGrid API key (https://sendgrid.com/) - 用于邮件告警
- **可选 API Keys**(用于增强富化):
- CMDB 端点和凭据
- SIEM 端点和凭据
- 补丁管理系统端点和凭据
- 网络监控端点和凭据
### 安装
#### 步骤 1:克隆仓库
```
git clone https://github.com/EclipseManic/ThreatSentry-AI.git
cd ThreatSentry-AI
```
#### 步骤 2:创建虚拟环境
```
# 在 Windows 上
python -m venv .venv
.venv\Scripts\activate
# 在 macOS/Linux 上
python3 -m venv .venv
source .venv/bin/activate
```
#### 步骤 3:安装依赖
```
pip install -r requirements.txt
```
#### 步骤 4:配置环境
在项目根目录创建一个 `.env` 文件:
```
cp .env.example .env # If provided, or create new
```
编辑 `.env` 填入您的凭据:
```
# 必需 - Threat Discovery
SHODAN_API_KEY=your_shodan_api_key_here
SHODAN_QUERY= # Leave empty to use presets
SHODAN_QUERY_EMPTY_TO_PRESET=True # Use preset queries when SHODAN_QUERY is empty
# 可选 - 邮件告警
SENDGRID_API_KEY=your_sendgrid_key_here
SENDER_EMAIL=alerts@yourcompany.com # Must be verified in SendGrid
ALERT_RECIPIENTS=security@yourcompany.com,ciso@yourcompany.com
# 可选 - 内部丰富 (在 collectors/ 中实现)
CMDB_API_ENDPOINT=https://cmdb.internal/api
CMDB_API_KEY=your_cmdb_key
SIEM_API_ENDPOINT=https://siem.internal/api
SIEM_API_KEY=your_siem_key
# 配置
SCAN_INTERVAL_MINUTES=30 # How often to scan for new assets
RETRAIN_INTERVAL_MINUTES=60 # How often to retrain the model
MAX_SHODAN_RESULTS=50 # Results per Shodan query
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
# 路径 (可选)
SQLITE_PATH=data/db/threat_sentric_ai.db
MODEL_PATH=data/models/rf_model.pkl
LOG_FILE_PATH=data/logs/threat_sentric_ai.log
```
#### 步骤 5:初始化数据库
```
python -c "from data import init_db; init_db()"
```
#### 步骤 6:运行应用程序
```
python run.py
```
仪表板将启动,并在后台运行调度程序。
## 🚀 使用指南
### 仪表板组件概览
![Dashboard Main Interface with All Tabs]
*概览、分析和工具标签页用于全面的威胁评估*
### 1. 设备表与发现
![Organization and Country Filters with Device List]
*带有颜色编码风险指示器的可排序设备表(绿色=低,黄色=中,红色=高)*
- **颜色编码**:即时视觉风险评估
- **可排序/过滤**:点击列标题或使用快速过滤器进行快速搜索
- **实时更新**:仪表板在检测到新威胁时刷新
### 2. 风险分布图
![Risk Distribution Bar Chart]
*整体安全态势可视化,显示每个风险级别的设备数量*
- 显示所有风险类别的设备数量
- 随着模型预测的变化实时更新
- 识别需要立即关注的安全热点
### 3. 关键操作按钮
- **Scan Now**:手动触发 Shodan + NVD 富化,包含详细的错误报告
- **Refresh**:从最新数据库状态更新仪表板
- **Upload Data**:批量导入包含设备信息的 CSV/JSON
- **Train Model**:使用当前数据手动重训集成模型
### 高级功能
#### 分析标签页
![Analytics Panel - Risk Trends and Metrics]
- 随时间变化的详细风险趋势及历史分析
- 识别最易受攻击的服务
- 组织级风险指标和比较
- CVE 影响分析和漏洞趋势
#### 工具标签页
 获取指南。
增强领域:
- 额外的收集器实现(Nessus, Tenable, Qualys 集成)
- 用于程序化访问的 Web API
- 具有基于角色访问控制的多用户支持
- 高级可视化(Grafana/ELK 集成)
- Kubernetes 部署支持
## 📄 许可证
本项目根据 MIT 许可证授权——详情请参阅 [LICENSE](LICENSE) 文件。
## 📞 支持与联系
- **Issues**:使用 GitHub Issues 进行错误报告和功能请求
- **文档**:参阅 [docs/](docs/) 目录获取详细技术文档
- **Email**:维护者信息见 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## 🙏 致谢
- **Shodan**:提供全面的互联网设备发现
- **NVD/NIST**:提供权威的漏洞数据
- **Scikit-learn**:提供健壮的 ML 库和文档
- **PyQt5**:优秀的 GUI 框架
- **社区**:所有提供反馈的贡献者和用户
**由 EclipseManic 用 ❤️ 制作 | 即刻保障未来基础设施的安全**
pip install -r requirements.txt
```
---
## 🔐 配置
### 1. 环境变量 (`.env` 文件)
Create a `.env` file in the root directory with the following structure:
```bash
# --- Shodan API Key (必需) ---
SHODAN_API_KEY="YOUR_SHODAN_API_KEY"
# --- SendGrid 邮件告警 (必需) ---
SENDGRID_API_KEY="YOUR_SENDGRID_API_KEY"
SENDER_EMAIL="your_verified_sender@example.com"
ALERT_RECIPIENTS="recipient1@example.com,recipient2@example.com"
# --- 数据库 ---
SQLITE_PATH="threat_sentric_ai.db"
# --- 模型 ---
MODEL_PATH="threatsentry_model.pkl"
# --- 调度器 ---
SCAN_INTERVAL_MINUTES="30"
RETRAIN_INTERVAL_MINUTES="60"
RETRAIN_ON_SCHEDULE="True"
# --- Shodan 查询行为控制 ---
SHODAN_QUERY=""
SHODAN_QUERY_EMPTY_TO_PRESET="True"
# --- 日志记录 ---
LOG_LEVEL="INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL
# --- 内部系统凭据 (可选 - 根据您的 collectors 需要添加) ---
# CMDB_API_ENDPOINT="..."
# CMDB_API_KEY="..."
# SIEM_API_ENDPOINT="..."
# SIEM_API_KEY="..."
# PATCH_API_ENDPOINT="..."
# PATCH_API_KEY="..."
# NETWORK_MONITOR_ENDPOINT="..."
# NETWORK_MONITOR_KEY="..."
```
## 🔍 Shodan 查询预设 (`config.py`)
修改 `SHODAN_QUERIES` 字典以定义您的自定义查询预设:
```
SHODAN_QUERIES = {
"default": "product:apache",
"org": 'org:"Your Company Name"',
"net": 'net:"123.45.67.0/24"',
"ssl": 'ssl:"yourcompany.com"',
"hostname": 'hostname:".yourcompany.com"',
"rdp": 'port:3389 "remote desktop"',
"mongodb": 'port:27017 "mongodb"',
"ics_modbus": 'port:502 "modbus"',
"vuln_example": 'vuln:CVE-2024-12345',
"http_login": 'http.title:"Login" org:"Your Company"'
}
```
如果 `.env` 中的 `SHODAN_QUERY` 为空 **且** `SHODAN_QUERY_EMPTY_TO_PRESET=True`,
调度器将自动循环使用这些预设。
## 🧠 实现内部收集器
您需要:
- 使用 API、数据库或 SDK 获取内部数据。
- 将获取的数据映射到 `Device` 模型属性。
- 使用此富化信息更新数据库会话。
如果没有这些集成,模型将缺乏准确预测所需的上下文。
## 🧪 运行应用程序
### (可选)生成初始训练数据
```
python scripts/generate_realistic_training_data.py --count 1000
```
创建 `scripts/my_training_data.json`。
您可以通过 GUI 的 **Upload** 选项上传此文件以初始化训练数据。
### 启动应用程序
```
python run.py
```
GUI 将打开,调度器将自动开始扫描、富化和预测。
## ⚡ 使用生成数据的快速演示
1. 完成安装(步骤 1–3)。
2. 设置您的 `.env` 文件(即使使用占位符密钥)。
3. 可选择在 `config.py` 中调整 Shodan 预设。
4. 生成数据:
python scripts/generate_realistic_training_data.py --count 500
5. 启动应用:
python run.py
6. 在 GUI 中:
- 选择 **Upload** → 选择 `scripts/my_training_data.json`
- 点击 **Refresh** 查看填充的设备数据和风险级别。
## 🛠️ 脚本与使用指南
| 脚本 | 描述 |
|--------|--------------|
| **run.py** | 主入口点。启动 DB、调度器和 GUI。 |
| **scheduler.py** | 处理定期扫描、富化、预测和重训。 |
| **scripts/generate_realistic_training_data.py** | 生成用于测试或引导的仿真训练数据。 |
| **scripts/clear_db_enhanced.py** | 交互式清理数据库或重置通知标志。 |
| **scripts/reset_db.py** | 完全重置数据库。请谨慎使用。 |
### 示例命令
```
# 生成 1000 条记录
python scripts/generate_realistic_training_data.py --count 1000
# 查看清理选项
python scripts/clear_db_enhanced.py --help
# 删除所有设备与漏洞
python scripts/clear_db_enhanced.py --delete-devices --delete-vulns
# 重置通知标志
python scripts/clear_db_enhanced.py --reset-notified
# 危险操作:完全重置
python scripts/reset_db.py
```
## 💬 反馈与建议
本项目由 **EclipseManic** 开发。
虽然目前不接受代码贡献,但非常感谢您的 **反馈和错误报告**。
请打开一个 [Issue](https://github.com/EclipseManic/ThreatSentry-AI/issues) 分享您的想法或报告问题。
## 📄 许可证
本项目根据 **MIT 许可证** 授权。
详情请参阅 [LICENSE](./LICENSE) 文件。标签:Apex, GPT, HTTP/HTTPS抓包, NVD, PyQt5, Python, Scikit-learn, SQLAlchemy, 人工智能, 企业安全, 告警分流, 威胁搜寻, 安全仪表盘, 实时处理, 密码管理, 态势感知, 插件系统, 数据富化, 无后门, 无线安全, 机器学习, 漏洞管理, 用户模式Hook绕过, 结构化查询, 网络安全, 网络资产管理, 自动化安全, 逆向工具, 隐私保护, 风险优先级