Skip to content

has2lab/RISCV_CVE_Dashboard

Repository files navigation

RISC-V CVE 数据库 + 可视化系统

Python Version License

一个全自动的RISC-V CVE数据库系统,每日自动更新并部署到GitHub Pages。

🌐 在线查看

访问地址: https://YOUR_USERNAME.github.io/RISCV_CVE_Dashboard

例如:https://has2lab.github.io/RISCV_CVE_Dashboard

系统每天北京时间上午自动更新CVE数据并重新部署(由于GitHub高峰负载,可能会出现延迟)

🎯 项目特色

  • 🔄 全自动更新: 使用GitHub Actions每日自动下载CVE增量包
  • 🤖 智能分类: 使用LLM对RISC-V CVE进行智能分类和总结
  • 📊 可视化展示: 交互式Web界面,支持筛选、搜索和统计
  • 🌐 在线访问: 部署到GitHub Pages,无需本地环境即可查看
  • 📈 实时统计: 自动生成年份分布、分类统计等可视化图表

📦 项目结构

RISCV_CVE_Dashboard/
├── .github/
│   └── workflows/
│       ├── update-cves.yml      # 自动更新CVE的workflow
│       └── deploy-pages.yml     # 部署到GitHub Pages
├── visualization/               # Web可视化系统
│   ├── index.html              # 主页面
│   ├── css/                    # 样式文件
│   ├── js/                     # JavaScript代码
│   ├── update_riscv_cves.py    # 增量更新脚本(整合提取和分类)
│   ├── riscv_cves_classified.json         # 分类数据(完整版)
│   └── riscv_cves_classified_summary.json # 分类数据(摘要版)
├── riscv_cves/                 # 提取的RISC-V CVE
├── extract_riscv_cves.py       # CVE提取脚本(独立使用)
├── classify_riscv_cves.py      # CVE分类脚本(独立使用)
├── llm_config_manager.py       # LLM配置管理器
├── llm_config.json             # LLM配置文件
├── README.md                   # 项目说明文档
└── DEPLOYMENT.md               # GitHub部署指南

🚀 GitHub Actions 自动化流程

1. 自动更新CVE (每日运行)

Workflow文件: .github/workflows/update-cves.yml

运行时间: 每天北京时间上午

工作流程:

  1. 下载前一天的CVE增量包
  2. 提取RISC-V相关的CVE
  3. 使用LLM进行分类(本地模拟模式)
  4. 更新JSON数据文件
  5. 提交更改到仓库
  6. 自动部署到GitHub Pages

手动触发:

# 在GitHub仓库页面
Actions → Update RISC-V CVEs → Run workflow

2. 部署到GitHub Pages

Workflow文件: .github/workflows/deploy-pages.yml

触发条件:

  • master分支的visualization/目录有更新时自动部署
  • 可以手动触发

📋 部署到您自己的仓库

步骤1: Fork或克隆仓库

# 方法1: Fork这个仓库到你的GitHub账号

# 方法2: 克隆并推送到新仓库
git clone https://github.com/YOUR_USERNAME/RISCV_CVE_Dashboard.git
cd RISCV_CVE_Dashboard
git remote set-url origin https://github.com/YOUR_NEW_USERNAME/YOUR_NEW_REPO.git
git push -u origin master

步骤2: 启用GitHub Pages

  1. 进入仓库的 SettingsPages
  2. Source 下选择 GitHub Actions
  3. 保存设置

步骤3: 配置Secrets

如果要使用真实的LLM API(OpenAI或Anthropic),需要添加API密钥,默认使用DeepSeek的baseurl和model。如需手动更改可以修改llm_config.json文件:

  1. 进入仓库的 SettingsSecrets and variablesActions
  2. 点击 New repository secret
  3. 添加以下secrets(根据需要):
Secret名称 说明 示例
OPENAI_API_KEY DeepSeek密钥 sk-...
ANTHROPIC_API_KEY Anthropic API密钥 sk-ant-...

注意: 如果不添加这些secrets,系统会使用本地模拟模式(基于规则的分类),不会调用API。

步骤4: 更新README中的链接

将以下内容中的 YOUR_USERNAME 替换为您的GitHub用户名:

[![Auto Update](https://github.com/YOUR_USERNAME/RISCV_CVE_Dashboard/actions/workflows/update-cves.yml/badge.svg)]
**访问地址**: https://YOUR_USERNAME.github.io/RISCV_CVE_Dashboard/

步骤5: 首次运行

# 方法1: 手动触发workflow
# GitHub仓库页面 → Actions → Update RISC-V CVEs → Run workflow

# 方法2: 推送一个更改触发
git commit --allow-empty -m "Trigger first run"
git push

🔧 本地开发

环境要求

# Python 3.11+
python --version

# 安装依赖
pip install -r requirements.txt

本地运行更新脚本

cd visualization

# 测试模式(不下载增量包)
python update_riscv_cves.py --no-download --provider local

# 下载并更新(下载昨天的增量包)
python update_riscv_cves.py

# 下载特定日期的增量包
python update_riscv_cves.py --date 2025-11-16

🔍 CVE 提取脚本详解 (extract_riscv_cves.py)

extract_riscv_cves.py 是核心的 CVE 提取脚本,支持直接关键词匹配扩展关键词 + LLM 验证两种模式。

设计思路

  1. 直接匹配: 使用正则表达式匹配明确的 RISC-V 关键词(如 risc-v, riscv, arch/riscv 等),匹配到的 CVE 直接加入结果
  2. 扩展关键词匹配: 匹配可能与 RISC-V 相关的关键词(如 BOOM, Rocket, XiangShan, Spike 等),但这些关键词可能存在同名的不相关项目
  3. LLM 验证过滤: 对扩展关键词匹配的候选 CVE,使用大模型判断是否真正与 RISC-V 相关
  4. 聚类优化: 当候选数量超过 50 个时,使用 HDBSCAN 聚类算法对 CVE 描述进行聚类,按簇批量提交给 LLM 验证,提高效率

扩展关键词列表

关键词 说明 可能的误匹配
BOOM Berkeley Out-of-Order Machine (RISC-V 处理器) 其他项目
rocket Rocket Chip Generator (RISC-V SoC 生成器) Rocket.Chat 等
XiangShan / 香山 开源 RISC-V 处理器项目 -
opentitan 开源安全芯片项目 (使用 RISC-V 内核) -
Spike RISC-V 官方指令集模拟器 Spike 游戏等
NEMU RISC-V 模拟器 -

基本用法

# 基本提取(直接匹配 + 扩展关键词 + LLM 验证)
python extract_riscv_cves.py --cves-dir /path/to/cves --output-dir ./riscv_cves

# 仅使用直接 RISC-V 匹配(不使用扩展关键词和 LLM)
python extract_riscv_cves.py --cves-dir /path/to/cves --no-extended

# 指定配置文件
python extract_riscv_cves.py --cves-dir /path/to/cves --config ./llm_config.json

命令行参数

参数 默认值 说明
--cves-dir cves CVE JSON 文件所在目录
--output-dir riscv_cves 输出目录
--config llm_config.json LLM 配置文件路径
--no-extended - 禁用扩展关键词匹配和 LLM 验证
--extended-only - 仅测试扩展关键词(调试用)

环境变量配置

# LLM API 密钥 (用于验证扩展关键词候选)
export OPENAI_API_KEY="your-api-key"       # 如果使用 OpenAI/DeepSeek

# Embedding API 密钥 (用于聚类,阿里云百炼)
export DASHSCOPE_API_KEY="your-dashscope-key"

配置文件说明 (llm_config.json)

Embedding 配置 (阿里云百炼)

用于对大量候选 CVE 进行文本嵌入和聚类:

{
  "embedding": {
    "provider": "dashscope",
    "api_key": "",
    "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "model": "text-embedding-v4",
    "dimensions": 1024,
    "batch_size": 10,
    "timeout": 60,
    "env_var": "DASHSCOPE_API_KEY"
  }
}

验证配置

控制 LLM 验证行为:

{
  "verification": {
    "max_cves_per_batch": 5,
    "clustering_method": "hdbscan",
    "min_cluster_size": 3,
    "max_retries": 5,
    "initial_retry_delay": 1.0,
    "max_retry_delay": 60.0,
    "retry_multiplier": 2.0,
    "riscv_criteria": [
      "RISC-V处理器",
      "RISC-V SoC",
      "RISC-V指令集",
      "RISC-V模拟器",
      "RISC-V漏洞",
      "RISC-V开发工具",
      "RISC-V固件或应用"
    ]
  }
}

处理流程图

CVE 文件扫描
    │
    ├─── 直接匹配 RISC-V 关键词 ──→ ✓ 直接加入结果
    │
    └─── 匹配扩展关键词 ──→ 候选列表 (去除直接匹配的)
                              │
                              ├─ ≤50 个 ──→ 直接分批 LLM 验证
                              │
                              └─ >50 个 ──→ Embedding 聚类
                                             │
                                             └─→ 按簇分批 LLM 验证
                                                     │
                                                     ├─ 相关 ──→ ✓ 加入结果
                                                     └─ 不相关 ──→ ✗ 丢弃

输出示例

Scanning /path/to/cves for RISC-V related CVEs...
Output directory: riscv_cves
Extended keyword matching: Enabled
----------------------------------------------------------------------
Total CVE files to scan: 250000
----------------------------------------------------------------------
✓ Found RISC-V CVE: CVE-2024-26619
✓ Found RISC-V CVE: CVE-2024-35847
Progress: 100000/250000 files scanned...
----------------------------------------------------------------------
Extended keyword candidates: 45
Using direct batch verification (≤50 candidates)

验证批次 1/9...
  ✓ CVE-2024-12345: RISC-V related - OpenTitan security chip uses RISC-V core
  ✗ CVE-2024-67890: Not related - This is about Rocket.Chat messaging app

----------------------------------------------------------------------
Extraction complete!
Total RISC-V related CVEs found: 87
  - Direct RISC-V matches: 83
  - Extended keyword candidates: 45
  - LLM verified: 4
  - LLM rejected: 41

本地预览网页

cd visualization

# 启动简单的HTTP服务器
python serve.py
#
python -m http.server 8000

# 在浏览器中访问
# http://localhost:8000

📊 数据文件说明

visualization/riscv_cves_classified.json

完整的分类数据,包含所有CVE的原始数据、分类信息、摘要等。

{
  "metadata": {
    "total_cves": 83,
    "classification_date": "2025-11-17T16:38:22",
    "categories": ["Linux Kernel", "RISC-V CPU/SoC", "Simulator", ...]
  },
  "statistics": {
    "by_category": {
      "Linux Kernel": 64,
      "RISC-V CPU/SoC": 9,
      "Simulator": 3,
      "RISC-V Development Tools": 2,
      ...
    }
  },
  "classified_cves": [...]
}

visualization/riscv_cves_classified_summary.json

简化版本,不包含CVE原始数据,文件更小,适合Web端快速加载。

🎨 可视化功能

访问在线页面后,您可以:

  • 📋 浏览CVE列表: 查看所有RISC-V相关的CVE
  • 🔍 搜索和筛选: 按CVE ID、分类、严重程度筛选
  • 📊 统计图表: 查看年份分布、分类分布等统计图表
  • 📝 详细信息: 点击CVE查看完整的描述和技术细节
  • 🏷️ 分类标签: 根据智能分类快速定位相关CVE

🔐 安全性说明

API密钥管理

  • ✅ API密钥存储在GitHub Secrets中,不会暴露在代码或日志中
  • ✅ Workflow日志不会显示敏感信息
  • ✅ 如果不配置API密钥,系统使用本地模拟模式,无安全风险

数据隐私

  • ✅ 所有CVE数据来自公开的CVE数据库
  • ✅ 不收集任何用户信息
  • ✅ 部署到GitHub Pages的都是静态文件

🛠️ 自定义配置

修改更新时间

编辑 .github/workflows/update-cves.yml:

on:
  schedule:
    # 修改为您想要的时间 (UTC时区)
    - cron: '35 1 * * *'  # 北京时间上午9:35

修改LLM配置

编辑 llm_config.json:

default:
  provider: local  # 改为 "openai" 或 "anthropic"
  model: gpt-3.5-turbo

classification:
  predefined_categories:
    - Linux Kernel
    - RISC-V CPU/SoC
    - Simulator
    - RISC-V Development Tools
    - Device-Specific Firmware & Applications
    - RISC-V Instruction Set Manual
    - Other
  allow_new_categories: true

修改更新脚本

如果要使用OpenAI API,修改 .github/workflows/update-cves.yml:

- name: Download and extract CVE delta package
  run: |
    cd visualization
    # 改为使用 openai provider
    python update_riscv_cves.py --provider openai --model gpt-3.5-turbo
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

📈 监控和调试

查看Workflow运行状态

  1. 进入仓库的 Actions 标签页
  2. 选择相应的workflow
  3. 查看运行历史和日志

查看部署状态

  1. 进入 SettingsPages
  2. 查看最新部署状态和URL

常见问题

Q: Workflow运行失败怎么办?

  • 检查Actions日志查看错误信息
  • 确认GitHub Pages已启用
  • 检查API密钥是否正确配置(如果使用)

Q: 页面无法访问?

  • 确认GitHub Pages已启用并选择"GitHub Actions"作为源
  • 等待几分钟让部署完成
  • 检查仓库是否为Public(Private仓库需要GitHub Pro)

Q: 如何跳过某天的更新?

  • 在Actions页面手动取消运行
  • 或临时禁用workflow

📚 相关文档

🤝 贡献

欢迎提交Issue和Pull Request!

📜 许可证

Apache License

🙏 致谢


免责声明:分析结果均由大模型生成,仅供参考。

Made with ❤️ for RISC-V Security Research

About

RISCV CVE Dashboard

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors