think-ahead-technologies/kunnus-scanner
GitHub: think-ahead-technologies/kunnus-scanner
一款用 Go 编写的开源 SBOM 生成器,帮助产品制造商快速生成符合 EU-CRA 法案标准的软件物料清单。
Stars: 8 | Forks: 0
# kunnus-scanner
**为需要了解其机器上运行什么软件的制造商提供的开源 SBOM 生成工具。**
从 2027 年 12 月 11 日起,[欧盟网络韧性法案 (CRA)](https://digital-strategy.ec.europa.eu/en/policies/cyber-resilience-act) 要求包含数字元素的产品制造商提供软件物料清单 (SBOM) —— 一份包含产品中所有软件组件的完整、机器可读的清单。这适用于在该日期之后新投放市场的每一款产品:带有嵌入式 IPC 的 CNC 机床、IoT 网关、AGV、带有 Web 仪表板的包装线 —— 只要它包含软件,您就需要一份 SBOM。
kunnus-scanner 用于生成该 SBOM。无需安装程序,无需连接云端,也无需注册账户。它可以在 Windows、Linux 和 macOS 上运行,检测已安装的软件,精确到单个库和版本号,并输出符合标准的 CycloneDX 1.6 文件。它基于 Google 的 [osv-scalibr](https://github.com/google/osv-scalibr) 构建,支持广泛的语言生态系统和操作系统级别的包检测。
## 快速开始
```
# 安装 (macOS)
brew install think-ahead-technologies/tap/kunnus
# 安装 (Linux) — releases 页面上的 .deb/.rpm 包
sudo dpkg -i kunnus_*.deb # or: sudo rpm -i kunnus_*.rpm
# 扫描 source-code repository
kunnus sbom repo
# 扫描正在运行的 OS / firmware image
kunnus sbom os --output machine.cdx.json
```
就是这样。不到三分钟即可生成您的第一份 SBOM。还可通过 [Docker 镜像](https://github.com/think-ahead-technologies/kunnus-scanner/pkgs/container/kunnus-scanner)、Windows 上的 [Scoop](https://github.com/think-ahead-technologies/scoop-bucket) 或[预编译二进制文件或 .deb/.rpm 包](https://github.com/think-ahead-technologies/kunnus-scanner/releases) 获取。
## 用例
### 机床上的工业 PC (IPC)
您的加工中心配备了一台运行 HMI、OPC UA server、驱动程序和各种实用工具的 Windows IPC。没有人有一份完整的已安装软件清单。将 `kunnus` 二进制文件复制到 U 盘,插入 IPC,然后运行:
```
kunnus sbom os --output machine-x200.cdx.json
```
您将获得一份完整的清单 —— 每一个已安装的程序、每一个库、每一个带有确切版本号的 OS 包。符合标准。无需网络连接。
### 用于 IoT 设备的自动化 CI/CD 流水线
您的 IoT 网关固件构建于一个每周发布且包含数十个开源依赖项的 CI/CD 流水线中。手动维护的 SBOM 在您创建的那一刻就已经过时了。将多架构 Docker 镜像拉取到您的 GitHub Actions 工作流中,每次发布都会自动生成最新的 SBOM:
```
- name: Generate SBOM
run: |
docker run --rm -v ${{ github.workspace }}:/src \
ghcr.io/think-ahead-technologies/kunnus-scanner:latest \
sbom repo /src --output /src/sbom.cdx.json
- name: Upload to kunnus platform
env:
KUNNUS_API_KEY: ${{ secrets.KUNNUS_API_KEY }}
KUNNUS_COMPONENT_ID: ${{ vars.KUNNUS_COMPONENT_ID }}
run: |
docker run --rm -v ${{ github.workspace }}:/src \
-e KUNNUS_API_KEY -e KUNNUS_COMPONENT_ID \
ghcr.io/think-ahead-technologies/kunnus-scanner:latest \
upload /src/sbom.cdx.json
```
### AGV 和移动机器人
带有基于 Linux 的导航栈、ROS 中间件和车队管理仪表板的 AGV 显然属于 CRA 管辖范围内的数字元素产品。kunnus-scanner 提供多架构 Docker 镜像(amd64/arm64),因此您可以直接在基于 ARM 的车载计算机上进行扫描:
```
docker run --rm -v /opt/agv-software:/scan \
ghcr.io/think-ahead-technologies/kunnus-scanner \
sbom os /scan --output /scan/agv-sbom.cdx.json
```
## 为什么选择开源?
每个制造商都有不同的软件栈。专有 runtime、自定义配置格式、专业的控制平台 —— 没有任何工具可以从一开始就涵盖所有的边缘情况。
kunnus-scanner 是基于 **Apache 2.0** 协议的开源软件。这意味着:
- **无需采购流程。** 今天就下载它,在采购订单起草完毕之前生成您的第一份 SBOM。
- **适应您的技术栈。** 您的团队 —— 或服务提供商 —— 可以为您的特定环境贡献解析器。
- **透明且可审计。** 您可以准确地追踪 SBOM 是如何生成的。对于审计师和市场监督机构来说,这一点至关重要。
## 超越 SBOM 文件本身
[kunnus 平台](https://kunnus.tech) 负责处理这些。上传您的 SBOM,集中监控您所有产品的安全状态。依赖项中出现新的 CVE?自动通知。市场监督机构要求提供文档?一切都有据可查。
## 功能说明
- **`kunnus sbom repo [path]`** —— 扫描源代码树,自动检测生态系统,输出 CycloneDX 1.6。
- **`kunnus sbom os [path]`** —— 扫描 OS 或固件文件系统(自动检测 Linux 发行版系列或 Windows 注册表)。
- **`kunnus sbom container `** —— 扫描容器镜像(通过注册表拉取、OCI/docker-save tarball,或本地 docker 守护进程),并提供逐层归属信息。
- **`kunnus upload `** —— 将 SBOM 推送到 `app.kunnus.tech`。
覆盖标志(`--target-os`、`--ecosystem`、`--source`、`--enable`、`--disable`)可让您绕过自动检测。`--online-licenses` 可选择加入 deps.dev 许可证查询(这是唯一使用网络的扫描功能;默认关闭)。
### 支持的生态系统
- **语言生态系统**(通过 osv-scalibr):npm/pnpm/yarn/bun、Python(requirements、poetry、pdm、Pipfile、uv)、Go、Rust (Cargo)、Java (Maven、Gradle)、.NET (NuGet)、PHP (Composer)、Ruby (Bundler)、Swift、Haskell (Stack/Cabal)、Lua (LuaRocks)、R (renv)、C/C++ (Conan)。
- **嵌入式与 C/C++ 清单**(kunnus 原生提取器):vcpkg、CMake `FetchContent`/`ExternalProject`/CPM 声明、git submodules、PlatformIO、ESP-IDF、Zephyr (west)、Arduino、CMSIS-Solution、Infineon ModusToolbox。
- **OS 包**:Debian/Ubuntu、RHEL、SUSE、Alpine、Arch、Gentoo、Nix、Container-Optimized OS、Flatpak、Snap;Windows 通过注册表。
- **非托管二进制文件**:一个基于 syft 派生的分类器会提取出没有任何包管理器追踪的纯 ELF 可执行文件(手动构建的 memcached、python 等),并通过 OS 包重叠抑制机制确保没有任何内容会被重复计算。
初次接触?[入门指南](docs/getting-started.md) 详细介绍了
安装、所有三种扫描模式(包括如何挂载固件镜像),以及
CI 集成;[docs/cli.md](docs/cli.md) 是完整的标志参考手册。
生成的 SBOM 包含 `bsi:*` 和 `kunnus:*` 组件属性;请参阅
[docs/sbom-properties.md](docs/sbom-properties.md) 获取完整参考,以及
[docs/licenses.md](docs/licenses.md) 了解各生态系统的许可证覆盖范围。
## 架构
```
cmd/kunnus/ # binary entry point
internal/
command/ # urfave/cli subcommand wiring
mode/ # repo, os + container scan-flavour implementations
detect/ # pure host introspection (no scalibr imports)
ecosystem/ # language-ecosystem registry: markers, hash + licence parsers, plugin names
osfamily/ # Linux distro fingerprints + per-family scalibr plugins
scan/ # thin scalibr Scan()/ScanContainer() wrapper
sbom/ # inventory -> CycloneDX encoder (dedup, CPEs, licences, layers)
hashes/ # native component-content hashes from lockfiles (BSI TR-03183-2)
license/ # licence normalization + classification (SPDX)
binclass/ # non-packaged ELF binary classifier (syft-derived catalog)
ownership/ # dpkg/apk/rpm file-ownership DBs for overlap suppression
arduino/ cmake/ cmakedecl/ cmsis/ espidf/ gitsubmodule/
modustoolbox/ platformio/ vcpkg/ zephyr/
# native extractors for ecosystems scalibr does not cover
upload/ # multipart POST to the platform
version/
```
内聚契约:`detect` 包没有任何对 scalibr 的导入;
`scan` 包是唯一运行 scalibr 的包;`command`
包是唯一涉及 `urfave/cli` 的包。
## 构建
```
make build # produces ./bin/kunnus
make test # go test -race -count=1 ./...
make lint # golangci-lint run ./...
make fmt # gofmt -s -w .
```
标签:AI应用开发, EVTX分析, LLM防护, LNA, 日志审计, 请求拦截