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, 日志审计, 请求拦截