Transforming-Defense/rust-nvd-scanner
GitHub: Transforming-Defense/rust-nvd-scanner
一款基于 Rust 的 SBOM 漏洞扫描工具,通过比对 NVD 和 CISA KEV 数据库识别已知漏洞,并结合 AI 提供修复优先级排序与处置建议。
Stars: 4 | Forks: 0
# NVD CVE Scanner
一款漏洞扫描工具,可根据国家漏洞数据库(NVD)和 CISA KEV 检查您的软件物料清单(SBOM),并提供 AI 驱动的分析和修复指导。
[](https://opensource.org/licenses/MIT)
[](https://www.rust-lang.org/)
## 功能
- **📦 SBOM 支持** - 解析 CycloneDX 和 SPDX (JSON) 格式
- **📚 多 SBOM 聚合** - 扫描单个 SBOM 文件或整个目录,并将结果整合到一个优先级报告中
- **🤖 AI 驱动的分析** - 使用 Claude 或 OpenAI/Codex 来划分漏洞优先级并提供修复指导
- **🎯 智能匹配** - 通过 CPE、PURL、供应商和产品名称进行匹配
- **📊 多种输出格式** - Markdown、JSON 和纯文本报告
- **🔒 低温度 AI** - 一致且基于事实的分析,不进行推测
- **🛡️ CISA KEV 集成** - 使用 [CISA 已知被利用漏洞](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) 目录自动丰富结果,将被积极利用的 CVE 置于最高优先级
## 快速开始
### 前置条件
- Rust 1.78 或更高版本
- NVD API 密钥(免费) - [在此申请](https://nvd.nist.gov/developers/request-an-api-key)
- AI API 密钥(用于分析):
- Claude (Anthropic):[在此获取](https://console.anthropic.com/)
- OpenAI (Codex):[在此获取](https://platform.openai.com/)
### 安装
```
git clone https://github.com/scherrie-td/rust-nvd-scanner.git
cd rust-nvd-scanner
cargo build --release
```
### 配置
在项目根目录创建 `.env` 文件:
```
cp .env.example .env
```
使用您的 API 密钥编辑 `.env`:
```
NVD_API_KEY=your-nvd-api-key-here
ANTHROPIC_API_KEY=your-claude-api-key-here
OPENAI_API_KEY=your-openai-api-key-here
AI_PROVIDER=claude
```
### 基本用法
```
# 1. 同步 CVE 数据库(一次性,随后定期更新)
cargo run -- sync --days 30
# 2. 扫描你的 SBOM(文件或目录)
cargo run -- scan --sbom ./your-sbom.json
# 3. 扫描目录中的所有 SBOM 并汇总报告
cargo run -- scan --sbom ./sboms --output markdown -f report.md
# 4. 获取 AI 驱动的整合优先级排序
cargo run -- analyze --sbom ./sboms --min-severity 7.0 -f report.md
# 5. 改用 OpenAI/Codex
cargo run -- analyze --sbom ./sboms --ai-provider openai --ai-model gpt-5.4 -f report.md
```
## 命令
### `sync` - 将 CVE 下载到本地数据库
从 NVD 下载 CVE 并在本地存储以供快速扫描。
```
# 同步最近 7 天(默认)
cargo run -- sync
# 同步最近 30 天
cargo run -- sync --days 30
# 强制完整重新同步
cargo run -- sync --days 30 --force
```
**选项:**
- `-d, --days ` - 要同步的天数(默认值:7,最大值:120)
- `-f, --force` - 强制完整重新同步,忽略现有数据
- `--no-kev` - 跳过 CISA KEV 目录同步
如果您看到本地数据库过大的错误,扫描器现在会打印一条准确的覆盖命令,例如:
```
export RUST_NVD_SCANNER_DB_MAX_SIZE_BYTES=
```
然后重新运行您的命令。除非您选择加入,否则这将保持 500MB 的默认安全防护。
### `scan` - 根据本地数据库扫描 SBOM
快速本地扫描。自动获取最新的 CISA KEV 目录,以包含已知被利用状态来丰富结果。
```
# 基础扫描
cargo run -- scan --sbom ./sbom.json
# 扫描目录中的所有 SBOM JSON 文件
cargo run -- scan --sbom ./sboms
# 按最低严重性过滤
cargo run -- scan --sbom ./sbom.json --min-severity 7.0
# 将报告保存为 markdown
cargo run -- scan --sbom ./sbom.json -o markdown -f report.md
# 将报告保存为 JSON
cargo run -- scan --sbom ./sbom.json -o json -f report.json
# 使用手动下载的 KEV 目录(适用于 air-gapped 环境)
cargo run -- scan --sbom ./sbom.json --kev-file ./known_exploited_vulnerabilities.json
```
**选项:**
- `-s, --sbom ` - SBOM 文件的路径,或包含 SBOM JSON 文件的目录(必需)
- `-m, --min-severity ` - 要报告的最低 CVSS 分数(默认值:0.0)
- `-o, --output ` - 输出格式:`text`、`json` 或 `markdown`(默认值:text)
- `-f, --output-file ` - 将扫描结果保存到文件
- `--kev-file ` - 手动下载的 CISA KEV 目录 JSON 文件的路径
### `analyze` - AI 驱动的漏洞分析
扫描您的 SBOM,并使用您选择的 AI 提供商(Claude 或 OpenAI/Codex)来提供风险优先级划分和修复指导。KEV 数据包含在 AI 提示中,因此被利用状态会被纳入优先级划分的考量。
```
# 通过 markdown 输出进行分析
cargo run -- analyze --sbom ./sbom.json
# 分析目录中的所有 SBOM JSON 文件并进行整合优先级排序
cargo run -- analyze --sbom ./sboms
# 使用 OpenAI Codex 模型进行分析
cargo run -- analyze --sbom ./sbom.json --ai-provider openai --ai-model gpt-5.3-codex
# 重点关注 critical vulnerabilities
cargo run -- analyze --sbom ./sbom.json --min-severity 9.0
# 将报告保存到文件
cargo run -- analyze --sbom ./sbom.json -f vulnerability-report.md
# JSON 输出
cargo run -- analyze --sbom ./sbom.json --output json -f report.json
```
**选项:**
- `-s, --sbom ` - SBOM 文件的路径,或包含 SBOM JSON 文件的目录(必需)
- `-m, --min-severity ` - 要分析的最低 CVSS 分数(默认值:7.0)
- `-o, --output ` - 输出格式:`markdown`、`json` 或 `text`(默认值:markdown)
- `-f, --output-file ` - 将分析结果保存到文件
- `--kev-file ` - 手动下载的 CISA KEV 目录 JSON 文件的路径
- `--ai-provider ` - AI 提供商:`claude` 或 `openai`(默认值:`AI_PROVIDER` 环境变量,或 `claude`)
- `--ai-model ` - 覆盖模型名称(默认值:Claude 为 `claude-sonnet-4-20250514`,OpenAI 为 `gpt-5.3-codex`)
- `--reasoning-effort ` - OpenAI 推理努力程度:`none`、`minimal`、`low`、`medium`、`high`、`xhigh`
### `stats` - 数据库统计信息
查看有关本地 CVE 和 KEV 数据库的信息。
```
cargo run -- stats
```
### `lookup` - 查找特定 CVE
通过 ID 搜索 CVE(先检查本地数据库,然后检查 NVD API)。如果该 CVE 是已知被利用的漏洞,还会显示其 CISA KEV 状态。
```
cargo run -- lookup CVE-2024-1234
```
**选项:**
- `--kev-file ` - 手动下载的 CISA KEV 目录 JSON 文件的路径
### `recent` - 获取最新 CVE
直接查询 NVD API 以获取最新 CVE(不保存到数据库)。
```
# 最近 7 天
cargo run -- recent
# 最近 14 天,限制为 50 个结果
cargo run -- recent --days 14 --limit 50
```
## 支持的 SBOM 格式
### CycloneDX (JSON)
```
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"components": [
{
"name": "lodash",
"version": "4.17.20",
"purl": "pkg:npm/lodash@4.17.20"
}
]
}
```
### SPDX (JSON)
```
{
"spdxVersion": "SPDX-2.3",
"packages": [
{
"name": "lodash",
"versionInfo": "4.17.20",
"externalRefs": [
{
"referenceType": "purl",
"referenceLocator": "pkg:npm/lodash@4.17.20"
}
]
}
]
}
```
## 匹配机制
扫描器使用多种策略将 SBOM 组件与 CVE 进行匹配:
1. **CPE 匹配** - 与 NVD 的 CPE 配置直接匹配
2. **PURL 匹配** - 解析包 URL 以提取供应商/产品/版本
3. **Vendor:Product 匹配** - 与 CPE 供应商和产品字段匹配
4. **名称匹配** - 对组件名称进行模糊匹配
当 CVE 配置中指定了版本范围时,将会严格遵循。
## CISA KEV 集成
扫描器会在每次扫描时自动获取 [CISA 已知被利用漏洞(KEV)](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) 目录。被 CISA 确认在野外被积极利用的漏洞将会:
- **排在所有非 KEV 漏洞之上**,无论其 CVSS 分数如何(一个 CVSS 7.0 但存在积极利用的漏洞,其排名将高于一个 CVSS 9.8 但未被利用的漏洞)
- **标有 KEV 标记**,显示添加日期、修复截止日期、勒索软件关联以及所需采取的行动
- **输入到 AI 分析中**,以便您配置的模型能够将被利用状态纳入其优先级划分的考量
在 KEV 级别中,结果将进一步按以下条件排序:
1. 优先排列与勒索软件相关的 CVE
2. 最早的修复截止日期(最紧急)
3. CVSS 分数降序排列
KEV 目录(约 400KB)会在本地缓存以供离线回退使用。对于物理隔离的环境,可使用 `--kev-file ` 提供手动下载的副本。
## AI 分析
`analyze` 命令支持 Claude 和 OpenAI/Codex。两者使用相同的提示和漏洞上下文,因此输出在不同提供商之间能保持一致。AI 提供:
1. **执行摘要** - 整体安全态势评估
2. **风险优先级列表** - 根据实际风险对漏洞进行排名,综合考虑 CISA KEV 状态、勒索软件关联、CVSS 分数、攻击向量和源 SBOM 上下文
3. **修复指导** - 针对每个 CVE:
- 需要采取的紧急行动
- 需要升级到的具体版本
- 在没有可用修复方案时的应对措施
4. **汇总表** - 用于行动规划的快速参考
5. **CISA KEV 摘要** - 被积极利用的漏洞概述及其合规影响(BOD 22-01)
### 成本估算
成本因提供商和模型而异。使用 `--min-severity` 可以将重点放在高优先级漏洞上,从而降低成本。
## 示例
### 完整工作流
```
# 初始设置
cargo run -- sync --days 30
# 通过快速扫描了解你正在处理的内容
cargo run -- scan --sbom ./my-app-sbom.json
# 为 critical/high vulnerabilities 生成详细报告
cargo run -- analyze --sbom ./my-app-sbom.json \
--min-severity 7.0 \
--output markdown \
-f security-report.md
```
### CI/CD 集成
```
#!/bin/bash
# CI 脚本示例
# 更新 CVE 数据库
cargo run -- sync --days 7
# 扫描并在发现 critical vulnerabilities 时失败
OUTPUT=$(cargo run -- scan --sbom ./sbom.json --min-severity 9.0)
if echo "$OUTPUT" | grep -q "Critical (9.0+): [1-9]"; then
echo "Critical vulnerabilities found!"
exit 1
fi
```
## 数据存储
CVE 数据库和 KEV 目录存储在本地:
- **macOS**:`~/Library/Application Support/com.nvd.nvd-cve-scanner/`
- **Linux**:`~/.local/share/nvd-cve-scanner/`
- **Windows**:`C:\Users\\AppData\Roaming\nvd\nvd-cve-scanner\data\`
文件:
- `cve_database.json` - 已同步的 NVD CVE 数据
- `kev_catalog.json` - 缓存的 CISA KEV 目录(每次运行时自动刷新)
## 速率限制
### NVD API
- 无 API 密钥:每 30 秒 5 个请求
- 有 API 密钥:每 30 秒 50 个请求
### Claude API
- 根据您的 Anthropic 计划应用标准速率限制
### OpenAI API
- 根据您的 OpenAI 计划应用标准速率限制
## 贡献
欢迎贡献!请随时提交 Pull Request。
1. Fork 本仓库
2. 创建您的功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交您的更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 打开一个 Pull Request
## 许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。
## 致谢
- [国家漏洞数据库(NVD)](https://nvd.nist.gov/) 提供的 CVE 数据
- [CISA 已知被利用漏洞目录(KEV)](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) 提供的漏洞利用数据
- [Anthropic](https://www.anthropic.com/) 提供的 Claude AI
- [OpenAI](https://openai.com/) 提供的 Codex/OpenAI 模型支持
- Rust 社区提供的优秀 crates
## 免责声明
本工具仅供参考。在生产环境中实施更改之前,请务必验证漏洞发现和修复步骤。AI 分析旨在辅助人类决策,而非取代它。
标签:AI分析, CISA KEV, CISA项目, Claude, CVE, CVE检测, CycloneDX, DevSecOps, GPT, NVD, OpenAI, Petitpotam, Rust, SBOM, SPDX, 上游代理, 人工智能, 修复建议, 内存规避, 加密, 可视化界面, 威胁情报, 开发者工具, 数字签名, 漏洞优先级评估, 漏洞扫描器, 漏洞管理, 用户模式Hook绕过, 硬件无关, 网络安全, 网络流量审计, 聊天机器人, 跌倒检测, 软件物料清单, 通知系统, 隐私保护