saasvista/aibom-scanner

GitHub: saasvista/aibom-scanner

一款扫描代码库中 AI SDK 使用情况并将合规风险映射到主流 AI 法规框架的 AI 物料清单生成工具。

Stars: 21 | Forks: 3

aibom-scanner

扫描代码库以检测 AI SDK 的使用情况。将合规风险映射到 NIST AI RMF、ISO 42001 和 EU AI Act。

PyPI License Python CI Zero Dependencies

## 快速开始 ``` pip install aibom-scanner aibom-scanner scan --path /path/to/your/repo ```

aibom-scanner output

## 扫描内容 `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, 代码分析, 凭证管理, 无后门, 硬件无关, 逆向工具