TimesysGit/vigiles-buildroot

GitHub: TimesysGit/vigiles-buildroot

一款专为 Buildroot 嵌入式 Linux 构建系统设计的漏洞管理工具,可在构建时自动生成 SBOM 并进行 CVE 漏洞分析。

Stars: 11 | Forks: 5

# oper nouns, tool/library/framework names, and technical jargon in their original English form." 这是一套用于 **[Vigiles](https://www.lynx.com/solutions/vulnerability-mitigation-management)** 产品中进行漏洞监控与通知的 SBOM 生成工具集。 # 什么是 Vigiles? Vigiles 是一款漏洞管理工具,可在构建时对 Buildroot 目标镜像进行 CVE 分析。它通过收集待安装软件包的元数据,并将其上传至 Vigiles CVE 数据库进行比对来完成分析。系统会返回检测到的漏洞概览,完整详细分析可在线查看。 如需申请试用账户,请通过 sales@timesys.com 联系我们。 # 系统要求 - [Buildroot](https://github.com/buildroot/buildroot/) 版本 2018.11.x 及以上 - Python 版本 3.6 及以上 # 安装步骤 1. 将 vigiles-buildroot 仓库克隆至与 Buildroot 目录相同的层级。 git clone https://github.com/TimesysGit/vigiles-buildroot 2. 安装依赖项 python3 -m pip install -r vigiles-buildroot/requirements.txt # 配置 1. 在此处下载您的 Vigiles API 密钥文件,并将其存储在(推荐的)路径。 mkdir $HOME/timesys cp $HOME/Downloads/linuxlink_key $HOME/timesys/linuxlink_key 2. 指示 Buildroot 在其配置中包含 Vigiles 接口。 make BR2_EXTERNAL=/path/to/vigiles-buildroot menuconfig # 仅生成 SBOM 仅生成 SBOM 的选项可在 menuconfig 界面的高级 Vigiles 选项下找到。 ``` *** Advanced Vigiles / Debug Options *** [*] Generate SBOM only ``` 此选项仅生成 SBOM。默认情况下,生成的 SBOM 也会上传至 Vigiles 进行漏洞扫描。 设置环境变量 `GENERATE_SBOM_ONLY` 为 `True` 或 `False` 可以覆盖 menuconfig 中的当前设置。 # 使用 Vigiles CVE 检查 1. 使用 Vigiles 目标执行 Make make vigiles-check 2. 本地查看 Vigiles CVE(文本)报告 CVE 报告将位于您 Buildroot 构建输出的 `vigiles/` 子目录中,文件名基于目标配置;例如: wc -l output/vigiles/buildroot-imx8mpico-report.txt 3616 output/vigiles/buildroot-imx8mpico-report.txt 3. 查看 Vigiles CVE 在线报告 本地 CVE 文本报告将包含一个指向综合图形化报告的链接;例如: -- Vigiles CVE Report -- View detailed online report at: https://vigiles.lynx.com/cves/reports/< Unique Report Identifier> ## So for "CVE SBOM", "CVE" is a proper term (Common Vulnerabilities and Exposures), and "SBOM" is a technical term (Software Bill of Materials). So I should keep them in English. But in the translation, I might include the Chinese explanation. Vigiles CVE 扫描器会创建一个 SBOM,将其发送至 Vigiles 服务器以描述您的构建配置。此 SBOM 位于 Buildroot 输出的 `vigiles/` 子目录中(与其接收返回的文本报告位置相同)。 wc -l output/vigiles/buildroot-imx8mpico-manifest.json 557 output/vigiles/buildroot-imx8mpico-manifest.json 如果出现问题或结果似乎不正确,此文件可能提供有关原因的提示。在任何支持请求中包含此文件非常重要。 # 配置 如果已包含,Vigiles 将通过 Kconfig 选项 **`BR2_EXTERNAL_VIGILES`** 默认启用。此外,还有其他配置选项可用于控制子系统的行为。 ### 基本配置 使用 `make menuconfig`,Vigiles 配置菜单可在 **`External Options`** 下找到。 ``` External options ---> *** Vigiles CVE Checker (in /home/mochel/projects/buildroot/vigiles) *** [*] Enable Vigiles CVE Check ---> ``` ### 报告与过滤 Linux 内核和 U-Boot .config 过滤功能可以通过 **`VIGILES_ENABLE_KERNEL_CONFIG`** 和 **`VIGILES_ENABLE_UBOOT_CONFIG`** 选项启用/禁用。 如果为内核或 U-Boot .config 文件使用自定义位置,路径可以通过 **`BR2_EXTERNAL_VIGILES_KERNEL_CONFIG`** 和 **`BR2_EXTERNAL_VIGILES_UBOOT_CONFIG`** 指定。 两个路径的默认值都是 _`auto`_,这将自动使用软件包配置构建目录中的 .config。除非绝对有必要指定替代路径,否则建议使用此值。 ``` *** Vigiles Kernel CVE Reporting Options *** [*] Enable Linux Kernel .config Filtering (auto) Location of Linux Kernel .config file [*] Enable U-Boot .config Filtering (auto) Location of U-Boot .config file ``` ### 自定义/修订 Vigiles 报告 在某些情况下,可能需要修改 Vigiles 生成的 CVE 报告。 vigiles-buildroot 支持 _包含额外软件包_、_排除软件包_ 和 _将已知 CVE 加入白名单_ 的功能。此外,本地生成的 SBOM 和 CVE 报告的文件名也可以自定义。 所有这些选项都通过 `Kconfig` 选项支持,用户可以在其中指定描述软件包或 CVE 的 CSV(逗号分隔值)文件。下面分别说明。 #### SBOM 与报告命名 默认情况下,要上传的 Vigiles SBOM 和生成的 CVE 报告的文件名基于 `BR2_HOSTNAME` 和 `BR2_DEFCONFIG`(或目标 CPU)的值,将产生如下文件: ``` output/vigiles ├── buildroot-nitrogen6x-manifest.json └── buildroot-nitrogen6x-report.txt ``` 要为上传的本地 Vigiles SBOM 和生成的 CVE 报告使用自定义名称,可以使用 Kconfig 选项 `BR2_EXTERNAL_VIGILES_MANIFEST_NAME`。如果设置为 '**Custom-Name**',产生的文件将是: ``` output/vigiles ├── Custom-Name-manifest.json └── Custom-Name-report.txt ``` #### 包含额外软件包 要包含在标准 Buildroot 进程之外构建的软件包(因此不会包含在 Vigiles CVE 报告中),可以将 Kconfig 选项 `BR2_EXTERNAL_VIGILES_INCLUDE_CSV`(“报告中包含的额外软件包”)设置为 CSV 文件的路径。 CSV 文件包含一个可选标题和以下字段: * Product - 软件包在 CVE 中使用的 CPE 名称 * (可选) Version - 使用的软件包版本。 * (可选) License - 使用的软件包的许可证 以下示例展示了表达额外软件包的可接受语法: ``` $ cat $HOME/projects/buildroot/vigiles-additional-packages.csv product,version,license avahi,0.6 bash,4.0 bash,4.1,GPL 3.0 busybox, udev,,"GPLv2.0+, LGPL-2.1+" ``` #### 排除软件包 在某些情况下,可能需要更简洁的 CVE 报告,因此可以指定要省略的特定软件包列表(例如:仅安装数据文件的软件包)。 要从 CVE 报告中排除软件包,可以将 Kconfig 选项 `BR2_EXTERNAL_VIGILES_EXCLUDE_CSV` 设置为 CSV 文件的路径。 CSV 文件每行期望一个软件包名称。任何额外的 CSV 字段都将被忽略。 例如: ``` $ cat $HOME/projects/buildroot/vigiles-exclude-packages.csv linux-libc-headers opkg-utils packagegroup-core-boot ``` #### CVE 白名单 某些软件包关联的 CVE 可能已知不会影响特定机器或配置。Buildroot 软件包可以通过其 Makefile 中的 `IGNORE_CVES` 变量来表达这些 CVE。但是,可能还有其他需要忽略/加入白名单的 CVE。 用户可以将 Kconfig 选项 `BR2_EXTERNAL_VIGILES_WHITELIST_CSV` 设置为包含要从 Vigiles 报告中省略的 CVE 列表的 CSV 文件的路径。 CSV 每行期望一个 CVE ID。任何额外字段都将被忽略。 例如: ``` $ cat $HOME/projects/buildroot/vigiles-cve-whitelist.csv ``` ### 仅上传 SBOM 在某些情况下,可能希望为构建上传 Vigiles SBOM,而不生成 CVE 报告。这可以加快构建速度并简化自动化批量构建的报告。 可以通过 Kconfig 选项 `BR2_EXTERNAL_VIGILES_UPLOAD_ONLY` 启用此行为。 将不显示文本报告和在线报告链接,而是显示指向 Vigiles Dashboard 产品工作区(使用 VIGILES_DASHBOARD_CONFIG 指定)的链接,之后可以从那里通过 Vigiles 服务进行扫描。 ### Vigiles 凭证 要指定 Vigiles API 密钥文件的替代位置(默认:`$(HOME)/timesys/linuxlink_key`),可以通过字符串 **`BR2_EXTERNAL_VIGILES_KEY_FILE`** 设置。 ``` *** Vigiles Account Options *** ($(HOME)/timesys/linuxlink_key) Vigiles API Key Location ``` ### Vigiles Dashboard 配置 可以通过首先启用 **`VIGILES_ENABLE_DASHBOARD_CONFIG`** 并在字符串 **`BR2_EXTERNAL_VIGILES_DASHBOARD_CONFIG`** 中指定路径来设置自定义的 Vigiles Dashboard 配置。如果未设置,将使用默认路径(`$(HOME)/timesys/dashboard_config`)。 ``` *** Vigiles Dashboard Options *** [*] Use a custom Vigiles Dashboard Configuration ($(HOME)/timesys/dashboard_config) Vigiles Dashboard Config Location ``` 默认情况下,您的 SBOM 将上传到 Vigiles Dashboard 上您的“私有工作区”产品。这可以通过下载替代产品和/或文件夹的“Dashboard Config”来更改。 Dashboard Config 文件默认下载到例如 `"${HOME}/Downloads/__config"` 的位置。根据需要移动和/或重命名后,您可以通过设置上述配置变量来控制 Vigiles for Buildroot 的行为。 ### 动态子文件夹创建 ``` --- Enable Vigiles CVE Check *** Vigiles Kernel CVE Reporting Options *** *** Customizing / Amending Vigiles Report *** () Custom SBOM and Report Name () Subfolder name ``` 如果使用 Dashboard Config,可以指定子文件夹名称以动态创建文件夹。SBOM 将上传到 Dashboard Config 中指定位置下的具有此名称的子文件夹。如果不存在,将创建一个。此选项将被环境变量 `VIGILES_SUBFOLDER_NAME` 覆盖。 ### 高级选项 出于开发目的,可以通过首先启用 **`VIGILES_ENABLE_EXPERT`** 来使用一些“专家”选项。这些选项允许调试所收集的元数据。 这些功能不受支持且不提供文档。 ``` *** Advanced Vigiles / Debug Options *** [*] Enable Vigiles Advanced and Debugging Options (Expert) [ ] Enable Verbose Console Output [ ] Write Intermediate JSON Files of Collected Metadata [ ] Include virtual packages in SBOM () Vigiles output location [ ] Generate SBOM only (NEW) ``` ### 在生成的 SBOM 中包含虚拟包 此选项可在高级 Vigiles 选项下找到。 ``` *** Advanced Vigiles / Debug Options *** [ ] Include virtual packages in SBOM ``` 此选项将在生成的 SBOM 中包含虚拟包。默认情况下,vigiles-buildroot 将从生成的 SBOM 中排除虚拟包。 ### 指定 Vigiles 输出位置 此选项可在高级 Vigiles 选项下找到。 ``` *** Advanced Vigiles / Debug Options *** () Vigiles output location ``` 此选项指定 Vigiles 输出文件(如 SBOM、报告和 Vigiles 日志)的位置。默认位置是 `/output/vigiles` 目录。 环境变量 `VIGILES_OUTPUT_DIR` 可用于覆盖此配置。 ### 指定 SBOM 格式 此选项可在高级 Vigiles 选项下找到。 ``` Select SBOM format --> ``` 此选项可用于指定要生成的 SBOM 格式。目前,vigiles-buildroot 支持生成 `Cyclonedx 1.4 JSON` 和 `Vigiles JSON` 格式的 SBOM。默认情况下,将生成 `Vigiles JSON` 格式的 SBOM。 ### 下载转换后的 SBOM 此选项可在高级 Vigiles 选项下找到。 ``` *** Advanced Vigiles / Debug Options *** [*] Download Converted SBOM (CycloneDX/SPDX) () Path to vigiles CLI binary (required) SBOM format --> SBOM file type --> SBOM version --> ``` 此选项允许在上传过程完成后,下载转换为标准 CycloneDX 或 SPDX 格式的 SBOM。配置的 vigiles CLI 二进制文件用于将请求的转换后的 SBOM 下载到 vigiles 输出目录。 需要安装 [vigiles-cli](https://github.com/TimesysGit/vigiles-cli),并提供其二进制文件的路径。 **注意:** 建议使用最新版本的 vigiles-cli。但是,如果需要使用较旧版本,请确保它是 v1.0.3 或更高版本。 支持的选项包括: * SBOM 格式:`CycloneDX`、`SPDX` 和 `SPDX-Lite` * `CycloneDX` 的 SBOM 文件类型:`JSON` 和 `XML` * `SPDX` 和 `SPDX-Lite` 的 SBOM 文件类型:`JSON`、`XML`、`YAML`、`Tag`、`XLSX`、`XLS` 和 `RDFXML` * `CycloneDX` 的 SBOM 版本:`1.7`、`1.6`、`1.5`、`1.4`、`1.3`、`1.2` 和 `1.1` * `SPDX` 和 `SPDX-Lite` 的 SBOM 版本:`2.3` 和 `2.2` **注意:** CycloneDX SBOM 无法升级或降级。如果为 SBOM 生成选择了 SBOM 格式 `CycloneDX 1.4 JSON`,则下载 `SBOM version` 也必须设置为 `1.4`。 ### 所需文件检查 Vigiles-buildroot 解析 `.config` 和 `.hash` 文件以获取软件包依赖关系和校验和。用户可以在 menuconfig 中设置“需要所有配置文件”和“需要所有哈希文件”选项,以在任何文件缺失时引发错误。默认情况下,如果这些文件中的任何一个缺失,vigiles-buildroot 将仅显示警告消息。 ``` ... [*] Require all config files [*] Require all hashfiles ``` ### 指定用于生成报告的生态系统(仅限企业版 Vigiles) 可以指定生态系统以将特定于生态系统的漏洞包含到漏洞报告中。 此功能目前仅适用于企业版 Vigiles。 此选项可在高级 Vigiles 选项下找到。 ``` ... () Specify Ecosystems ``` 它接受逗号分隔的生态系统字符串,如下所示: ``` Linux, Maven, PyPI, Ubuntu:20.04:LTS ``` 要包含所有生态系统,请将其设置为 "all": ``` all ``` 以下是可用的有效生态系统列表: ``` AlmaLinux: ['AlmaLinux', 'AlmaLinux:8', 'AlmaLinux:9'] Alpine: ['Alpine', 'Alpine:v3.10', 'Alpine:v3.11', 'Alpine:v3.12', 'Alpine:v3.13', 'Alpine:v3.14', 'Alpine:v3.15', 'Alpine:v3.16', 'Alpine:v3.17', 'Alpine:v3.18', 'Alpine:v3.19', 'Alpine:v3.2', 'Alpine:v3.20', 'Alpine:v3.3', 'Alpine:v3.4', 'Alpine:v3.5','Alpine:v3.6', 'Alpine:v3.7', 'Alpine:v3.8', 'Alpine:v3.9'] Debian: ['Debian', 'Debian:10', 'Debian:11', 'Debian:12', 'Debian:13', 'Debian:3.0', 'Debian:3.1', 'Debian:4.0', 'Debian:5.0', 'Debian:6.0', 'Debian:7', 'Debian:8', 'Debian:9'] Rocky: ['Rocky Linux', 'Rocky Linux:8', 'Rocky Linux:9'] Ubuntu: ['Ubuntu', 'Ubuntu:14.04:LTS', 'Ubuntu:16.04:LTS', 'Ubuntu:18.04:LTS', 'Ubuntu:20.04:LTS', 'Ubuntu:22.04:LTS', 'Ubuntu:23.10', 'Ubuntu:24.04:LTS', 'Ubuntu:Pro:14.04:LTS', 'Ubuntu:Pro:16.04:LTS', 'Ubuntu:Pro:18.04:LTS', 'Ubuntu:Pro:20.04:LTS', 'Ubuntu:Pro:22.04:LTS', 'Ubuntu:Pro:24.04:LTS'] Others: ['Android', 'Bitnami', 'CRAN', 'GIT', 'GSD', 'GitHub Actions', 'Go', 'Hackage', 'Hex', 'Linux', 'Maven', 'NuGet', 'OSS-Fuzz', 'Packagist', 'Pub', 'PyPI', 'RubyGems', 'SwiftURL', 'UVI', 'crates.io', 'npm'] ``` ### 其他注意事项 #### Make 4.3 解决方法 Ubuntu 22.04 附带的 `make` 版本存在一个错误,描述如下: 在 Buildroot 论坛中讨论过: 不幸的是,这阻止了 Vigiles-Buildroot 的工作,因为它本质上依赖于 `make printvars` 命令。 为了启用 Vigiles 功能,我们不得不采取一个非常“特殊”的策略,当且仅当检测到 Make 4.3 时,通过 (a) 抑制 Buildroot 的解决方法(仅对该调用使用修复后的顶层 Makefile);以及 (b) 执行 `make printvars` 时使用增加的进程栈大小(用 `prlimit` 包装它)。 如果这与您的构建系统冲突,可以使用替代方法,尽管它需要对 vigiles-buildroot 和 Buildroot 本身进行自定义修改。 - 还原 vigiles-buildroot 提交 - 还原 Buildroot 解决方法 (25cec5ea733251eb) - 在构建前使用 `ulimit` 增加进程栈大小。 请注意,此方法不受官方支持,效果可能因环境而异。 #### 生成的 SBOM 中的软件包版本信息 Buildroot 包含一些缺少版本信息的软件包/配置脚本(例如 initscripts、urandom-scripts 等)。 在此类软件包的生成 SBOM 中,版本设置为 Buildroot 版本或 Buildroot 提交哈希。 #### 设置 CPE ID 变量 Buildroot 允许在软件包的 makefile(`.mk`)中定义一组变量来指定其 CPE 标识符。 例如,对于 busybox 软件包,这些变量如 product、version、vendor 等可以在 busybox.mk 中设置如下:
BUSYBOX_CPE_ID_PRODUCT = busybox
BUSYBOX_CPE_ID_VERSION = 1.36.1
BUSYBOX_CPE_ID_VENDOR = busybox

vigiles-buildroot 使用这些变量在未指定的情况下生成 cpe id。

### 软件包生命周期信息

某些用户可能希望在软件包的 makefile 中设置软件包生命周期信息,并将其包含在 SBOM 中。这可以使用软件包 .mk 文件中的以下自定义 makefile 变量完成:


```
FOO_RELEASE_DATE   = "2025-01-15"

FOO_END_OF_LIFE    = "2027-01-15"

FOO_LEVEL_OF_SUPPORT = "Actively maintained"
```


对于主机包,在定义变量时在包名前加 `HOST_`,例如:


```
HOST_FOO_LEVEL_OF_SUPPORT = "Actively maintained"
```


**注意:** `FOO` 是占位符,请将其替换为实际的包名。

这些值将被收集并包含在对应软件包的 SBOM 中。

您也可以使用 ```包含额外软件包``` 中引用的 CSV 文件为额外的软件包提供生命周期信息。示例 CSV 格式:


```
product,version,license,release_date,end_of_life,level_of_support

avahi,0.6,MIT,2025-09-01,2026-01-01,Actively maintained
```


`FOO_LEVEL_OF_SUPPORT` 和 CSV 列 `level_of_support` 的有效值是:```Actively maintained```、```No longer maintained```、```Not available```、```Abandoned```。

# 维护
标签:Buildroot安全工具, Buildroot集成, CVE分析, GPT, LLM防护, meg, SBOM生成, Vigiles工具, 二进制发布, 信息安全, 威胁情报, 安全扫描, 嵌入式Linux, 嵌入式系统, 开发者工具, 开源工具, 时序注入, 构建时安全分析, 漏洞监控, 漏洞管理, 网络安全, 软件供应链安全, 远程方法调用, 逆向工具, 隐私保护