saasvista/aibom-scanner
GitHub: saasvista/aibom-scanner
一款扫描代码库中 AI SDK 使用情况并将合规风险映射到主流 AI 法规框架的 AI 物料清单生成工具。
Stars: 21 | Forks: 3
扫描代码库以检测 AI SDK 的使用情况。将合规风险映射到 NIST AI RMF、ISO 42001 和 EU AI Act。
## 快速开始
```
pip install aibom-scanner
aibom-scanner scan --path /path/to/your/repo
```
## 扫描内容
`aibom-scanner` 可检测代码库中的 AI SDK,并生成 **AI 物料清单 (AIBOM)**,其中包含映射到三个框架的合规风险发现结果。
| | |
|---|---|
| **70 种检测模式** | OpenAI、Anthropic、Google AI、AWS Bedrock、Cohere、Mistral、Groq、HuggingFace 等 21 余种 |
| **支持语言** | Python、JS/TS、Go、Java、Rust、Ruby、Swift、C#/.NET — 包含 import、API 调用和依赖清单 |
| **10 家中国 AI 提供商** | 3 家被列入 BIS 实体清单(Zhipu、iFlytek、SenseTime = CRITICAL),7 家被标记存在数据主权风险 |
| **Agentic AI 检测** | CrewAI、AutoGen、LangGraph、Semantic Kernel、MCP |
| **34 条风险规则** | 8 个类别,具备基于证据的严重性调整 |
| **48 项合规控制** | NIST AI RMF (23)、ISO 42001 (15)、EU AI Act (10) |
| **机密检测** | 硬编码 API 密钥、Vault、AWS Secrets Manager、dotenv |
| **开发工具检测** | Cursor、GitHub Copilot、Claude Code、Aider、TabNine |
| **覆盖率核算** | 每次扫描都会报告已读取的内容 — 以及无法读取的内容 |
| **零依赖** | 纯 Python 标准库。除了 Python 无需安装任何其他内容。 |
## 覆盖率:扫描实际读取的内容
如果一份 AI 物料清单在不声明的情况下遗漏了其无法解析的内容,那它
不是不完整,而是完全错误。每次扫描都会报告其自身的基数:
```
Scanned 86 of 173 source files (49.7%) — 86 test/fixture files excluded, 98.9% of source attempted
```
提供两个比率是因为,单独使用任何一个都会产生误导:
| 字段 | 含义 |
|---|---|
| `coverage_pct` | `files_scanned / source_files_seen` — 真实的核心指标。树结构中的每一个源文件都包含在分母中。 |
| `readable_coverage_pct` | `files_scanned / (source_files_seen - skipped_by_path)` — 将扫描器的能力与特意排除的测试和 fixture 区分开来。 |
如果只引用第二个指标,那么对于一个只读取了一半代码仓库的扫描,其报告结果可能会接近 ~99%。
每个未读取的源文件都准确归因于以下原因之一:
- **`skipped_by_path`** — 有意排除(测试、fixture、示例、vendor)。
- **`unscanned_by_extension`** — 当前版本的扫描器无法解析该语言。
**扫描器无法读取的语言会被报告,绝不会被判定为安全。** 当出现任何无法
读取的情况时,stderr 会打印警告,表格输出会显示 `INCOMPLETE
COVERAGE` 块,并且 SARIF 会携带 `toolExecutionNotification`,从而使运行结果
显示为部分完成,而不是静默通过。目前无法读取的文件:`.php`、`.scala`、`.clj`、
`.ex`、`.exs`、`.dart`、`.cpp`、`.c`、`.h`、`.hpp`、`.m`、`.mm`、`.pl`、`.lua`、`.r`、
`.jl`、`.ps1`、`.kts`。
## 观察到的发现与推断出的发现
每个发现都带有一个 `evidence_basis`:
- **`observed`** — 有扫描到的源代码作为支撑(例如某项检测、某个 provider)。
- **`inferred`** — 属于治理清单项。源代码中没有任何内容支撑它。
推断出的发现反映的是*缺乏证据,而不是不存在风险的证据*。表格输出
会将它们归入单独的部分,`--severity-threshold` 会忽略它们,并且 SARIF
不会将它们作为代码扫描警报发出 — 因为治理清单项并不代表
代码位置上存在缺陷。
## 输出格式
```
# 表格输出(终端中默认)
aibom-scanner scan --path . --format table
# JSON(通过管道输出时默认)— 包含 coverage 和 evidence_basis
aibom-scanner scan --path . --format json > aibom.json
# 用于 GitHub Code Scanning 的 SARIF — 仅包含 observed findings,coverage 位于 run properties 中
aibom-scanner scan --path . --format sarif > results.sarif
# 当存在高/严重级别的 OBSERVED findings 时使 CI 失败(exit 1)
aibom-scanner scan --path . --severity-threshold high
# 当 scanner 无法读取某些语言时使 CI 失败(exit 3)
aibom-scanner scan --path . --fail-on-incomplete-coverage
```
| 退出代码 | 含义 |
|:---:|---|
| `0` | 扫描完成,未触发任何拦截规则 |
| `1` | 观察到的发现达到或超过 `--severity-threshold` |
| `2` | 参数错误、路径无法读取或被中断 |
| `3` | 设置了 `--fail-on-incomplete-coverage` 且存在无法读取的语言 |
如果两个规则同时触发,以 `1` 为准 — 因为观察到的发现比覆盖率缺失问题更具可操作性。
覆盖率警告始终发送到 **stderr**,因此将 `--format json` 或
`--format sarif` 通过管道重定向到文件时,会得到纯净、有效的输出。
## GitHub Action
将 AI 合规扫描添加到每个 PR 中:
```
# .github/workflows/aibom-scan.yml
name: AIBOM Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: saasvista/aibom-scanner@v1
with:
severity-threshold: high
```
## 检测到的 AI 提供商
| 类别 | 提供商 |
|----------|-----------|
| **主要** | OpenAI、Anthropic、Google AI、AWS Bedrock、Azure OpenAI、Cohere、Mistral、Groq |
| **开源** | HuggingFace、Together AI、Fireworks、Replicate |
| **中国(BIS 实体清单)** | Zhipu AI、iFlytek、SenseTime |
| **中国(数据主权)** | DeepSeek、Alibaba Qwen、Baidu ERNIE、Moonshot、MiniMax、Baichuan、Yi |
| **Agentic** | CrewAI、AutoGen、LangGraph、Semantic Kernel |
| **协议** | MCP (Model Context Protocol) |
| **编排** | LangChain、LlamaIndex |
## 风险类别
| 类别 | 规则 | 示例 |
|----------|:-----:|---------|
| 数据隐私 | 4 | 缺少 DPA、数据分类、prompt 保留 |
| 模型治理 | 8 | 无清单、无版本控制、供应链风险 |
| 安全 | 4 | 硬编码密钥、无输入/输出验证 |
| 透明度 | 3 | 无 AI 披露、无决策日志 |
| 问责制 | 3 | 无风险所有者、无事件响应计划 |
| 偏见与公平性 | 2 | 无偏见测试、无公平性评估 |
| 出口合规 | 4 | BIS 实体清单、数据主权、EU AI Act |
| Agentic AI | 5 | 无 HITL、无访问控制、无可观测性 |
## 合规框架
| 框架 | 控制项 | 覆盖范围 |
|-----------|:--------:|----------|
| **NIST AI RMF** | 23 | GOVERN、MAP、MEASURE、MANAGE 功能 |
| **ISO 42001** | 15 | AI 管理体系要求 |
| **EU AI Act** | 10 | 第 5-52 条,高风险分类 |
## 工作原理
```
Your Codebase
│
▼
┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌────────────────┐
│ File Walker │────▶│ AI SDK │────▶│ Risk Engine │────▶│ Control Mapper │
│ git ls-files │ │ Detector │ │ 34 rules │ │ 48 controls │
│ os.walk │ │ 70 patterns │ │ 8 categories│ │ 3 frameworks │
└─────────────┘ └──────────────┘ └─────────────┘ └────────────────┘
│ │ │
Detections + Risk findings Gap analysis
model names + with severity NIST / ISO /
dependencies qualification EU AI Act
│
▼
Table / JSON / SARIF
```
## 为什么开发此工具
我们扫描了 5 个热门的开源 AI 代码仓库(GitHub Star 总计 47 万):
- **389** 项 AI SDK 检测
- **116** 项合规发现
- **0** 项完全映射的治理控制
一家企业安全公司在并购中静默继承了一家**被列入 BIS 实体清单的中国 AI 提供商**。
EU AI Act 的执行将于 **2026 年 8 月** 开始。如果您不知道代码库中存在哪些 AI SDK,您就无法对其进行治理。
## 许可证
Apache-2.0。请参阅 [LICENSE](LICENSE)。
由 SaaSVista 开发 — AI 风险与合规 Copilot
标签:AI 合规检测, EU AI Act, ISO 42001, LNA, NIST AI RMF, Python, SBOM, 代码分析, 凭证管理, 无后门, 硬件无关, 逆向工具