TimesysGit/vigiles-openwrt

GitHub: TimesysGit/vigiles-openwrt

这是一款用于 OpenWRT 镜像的漏洞管理工具,通过自动生成软件物料清单和 CVE 分析来识别安全风险。

Stars: 10 | Forks: 5

# 用于 OpenWrt 的 Vigiles 这是一套用于软件物料清单(SBOM)生成的工具集,旨在作为 **[Vigiles](https://www.lynx.com/solutions/vulnerability-mitigation-management)** 产品服务的一部分,用于漏洞监控与通知。 # 什么是 Vigiles? Vigiles 是一款漏洞管理工具,它为 OpenWrt 目标镜像提供构建时的 CVE 分析。它通过收集待安装软件包的元数据,并将其上传至 Vigiles CVE 数据库进行比对来实现。系统会返回检测到的漏洞的高层级概览,完整的详细分析可在线查看。 如需申请试用账户,请通过 sales@timesys.com 与我们联系。 # 使用 Vigiles CVE 检查 要生成漏洞报告,请遵循以下步骤: 1. 克隆 vigiles-openwrt 仓库。 git clone https://github.com/TimesysGit/vigiles-openwrt.git 2. 在此处下载您的 Vigiles API 密钥文件,并将其存储在(推荐的)路径。 mkdir $HOME/timesys cp $HOME/Downloads/linuxlink_key $HOME/timesys/linuxlink_key 3. 使用 **OpenWrt 构建目录**和 **Vigiles 输出目录**(用于存放生成的报告和清单)的路径,运行 **Vigiles CVE 扫描器** (vigiles-openwrt.py)。 cd {vigiles-openwrt 克隆目录} ./vigiles-openwrt.py -b {OpenWrt 目录路径} -o {Vigiles 输出目录路径} 4. 在本地查看 Vigiles CVE(文本)报告 CVE 报告将位于运行 Vigiles CVE 扫描器 (vigiles-openwrt.py) 工具时提供的 ```{Vigiles 输出目录}``` 中,文件名基于开发板名称;例如: wc -l vigiles/output/ath79-report.txt 240 vigiles/output/ath79-report.txtt 5. 查看 Vigiles CVE 在线报告 本地 CVE 文本报告将包含一个指向全面且图形化报告的链接;例如: -- Vigiles CVE Report -- View detailed online report at: https://vigiles.lynx.com/cves/reports/ **CVE 清单文件** Vigiles CVE 扫描器会创建一个清单文件,用于向 Vigiles 服务器描述您的构建配置。此清单文件位于运行 Vigiles CVE 扫描器 (vigiles-openwrt.py) 时提供的 ```{Vigiles 输出目录}``` 中(与其接收返回的文本报告位于同一位置)。 wc -l vigiles/output/ath79-manifest.json 854 vigiles/output/ath79-manifest.json 如果发生错误,或者结果似乎不正确,此文件可能有助于分析原因。在提交任何支持请求时,务必附上此文件。 # 配置 ### 报告与过滤 可以使用选项 **```-k / --kernel-config```** 和 **```-u / --uboot-config```** 来启用/禁用 Linux 内核和 U-Boot 的 .config 过滤功能。 如果为内核或 U-Boot 的 .config 文件使用了自定义位置,可以使用 **```-k / --kernel-config```** 和 **```-u / --uboot-config```** 指定路径。 这两个路径的默认值均为 _```auto```_,这将导致自动使用包配置的构建目录中的 .config。除非绝对必要,否则建议使用此默认值。 如果您想禁用 Linux 内核和 U-Boot 的 .config 过滤,请传递 _```none```_ 作为参数值。 ### 自定义/补充 Vigiles 报告 在某些情况下,可能需要修改 Vigiles 生成的 CVE 报告。 vigiles-openwrt 支持 _包含额外的软件包_、_排除软件包_ 和 _将已知 CVE 加入白名单_ 的功能。此外,本地生成的清单和 CVE 报告的文件名也可以自定义。 所有这些选项都通过 ```Vigiles CVE 扫描器 (vigiles-openwrt.py)``` 的一个参数支持,用户可以指定一个描述软件包或 CVE 的 CSV(逗号分隔值)文件。下面将逐一描述。 #### 清单和报告命名 默认情况下,将要上传的 Vigiles 清单文件和生成的 CVE 报告的文件名基于 kconfig 的值 ```CONFIG_TARGET_BOARD```,将产生如下文件: ``` output ├── ath79-manifest.json └── ath79-report.txt ``` 要为上传的本地 Vigiles 清单和生成的 CVE 报告使用自定义名称,可以使用 Vigiles CVE 扫描器参数 ```-N / --name```。 如果设置为 '**Custom-Name**',则生成的文件将为: ``` output/vigiles ├── Custom-Name-manifest.json └── Custom-Name-report.txt ``` #### 包含额外的软件包 要包含在标准 OpenWrt 流程之外构建的软件包(因此不会包含在 Vigiles CVE 报告中),可以将 Vigiles CVE 扫描器的参数 ```-A / --additional-packages``` (“包含在报告中的额外软件包”)设置为一个 CSV 文件的路径。 该 CSV 文件包含一个可选的头部和以下字段: * Product - 软件包在 CVE 中使用的 CPE 名称 * (可选)Version - 使用的软件包版本。 * (可选)License - 使用的软件包许可证 以下示例展示了表示额外软件包的可接受语法: ``` $ cat /home/user/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 报告之外,可以将 Vigiles CVE 扫描器的参数 ```-E / --exclude-packages``` 设置为一个 CSV 文件的路径。 该 CSV 文件每行期望一个软件包名称。任何额外的 CSV 字段都会被忽略。 例如: ``` $ cat /home/user/vigiles-exclude-packages.csv linux-libc-headers opkg-utils packagegroup-core-boot ``` #### 将 CVE 加入白名单 某些软件包可能关联着已知不影响特定机器或配置的 CVE。 用户可以将 Vigiles CVE 扫描器的参数 ```-W / --whitelist-cves``` 设置为一个包含要从 Vigiles 报告中省略的 CVE 列表的 CSV 文件路径。 该 CSV 文件每行期望一个 CVE ID。任何额外字段都将被忽略。 例如: ``` $ cat /home/user/vigiles-cve-whitelist.csv CVE-2021-37155 CVE-2018-12886 ``` ### 仅上传清单 在某些情况下,可能只需要上传构建的 Vigiles 清单,而不生成 CVE 报告。 可以通过 Vigiles CVE 扫描器的参数 ```-U / --upload-only``` 来启用此行为。 系统将显示一个指向 Vigiles 仪表板(通过 VIGILES_DASHBOARD_CONFIG 指定)或私有工作区(如果未指定仪表板配置)的链接,而不是文本报告和在线报告链接。之后可以由 Vigiles 服务对其进行扫描。 ### Vigiles 凭证 要指定 Vigiles API 密钥文件的替代位置(默认为:```$(HOME)/timesys/linuxlink_key```),可以使用 Vigiles CVE 扫描器的参数 **```-K / --keyfile```** 进行设置。 ### Vigiles 仪表板配置 可以通过 Vigiles CVE 扫描器的参数 **```-C / --dashboard-config```** 指定路径来设置自定义的 Vigiles 仪表板配置。如果未提供,将使用默认路径(```$(HOME)/timesys/dashboard_config```)。 默认情况下,您的清单将上传到 Vigiles 仪表板上的“Private Workspace”产品。这可以通过下载其他产品和/或文件夹的“仪表板配置”来更改。 仪表板配置文件默认将下载到例如 ```"${HOME}/Downloads/dashboard_config"``` 的位置。根据需要移动和/或重命名后,您可以通过上述方式传递仪表板配置参数来控制 openwrt 的 Vigiles 行为。 ### 动态创建子文件夹 如果使用了仪表板配置,可以通过 Vigiles CVE 扫描器的参数 **```-F / --subfolder```** 指定一个子文件夹名称,以便动态创建文件夹。 清单将上传到仪表板配置中指定位置下具有此名称的子文件夹中。如果该子文件夹不存在,则会被创建。此选项将被环境变量 ```VIGILES_SUBFOLDER_NAME``` 覆盖。 ### 指定用于生成报告的生态系统(仅限企业版 Vigiles) 可以指定生态系统,以便将特定于该生态系统的漏洞包含在漏洞报告中。 此功能目前仅适用于企业版 Vigiles。 这接受以逗号分隔的生态系统字符串,如下所示。 要包含所有生态系统,请将此设置为“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'] ``` ### 订阅 SBOM 报告通知(仅限企业版 Vigiles) 可以使用此设置配置 SBOM 报告通知,允许用户订阅并设置其报告通知的频率。 此功能目前仅适用于企业版 Vigiles。 要指定通知频率,请使用 ```-s / --subscribe``` 参数,并选择以下选项之一:`none`、`daily`、`weekly`、`monthly`。 ### 指定自定义内核源代码 此选项允许用户指定自定义内核源代码目录。如果通过此选项提供了路径,脚本将从指定的内核源代码收集元数据。如果留空,脚本将回退到使用默认的内核源代码路径。 ### 指定自定义 U-Boot 源代码 此选项允许用户指定自定义的 U-Boot 源代码目录。如果通过此选项提供了路径,脚本将从指定的 U-Boot 源代码收集元数据。如果留空,脚本将回退到使用默认的 U-Boot 源代码路径。 ### 下载转换后的 SBOM 在上传过程完成后,可以下载标准 CycloneDX 或 SPDX 格式的转换后 SBOM。配置的 vigiles CLI 二进制文件用于将请求的转换后 SBOM 下载到 Vigiles 输出目录中。 需要安装 [vigiles-cli](https://github.com/TimesysGit/vigiles-cli),并应提供其二进制文件的路径。 **注意:** 建议使用最新版本的 vigiles-cli。但是,如果您需要使用较旧的版本,请确保其版本为 v1.0.3 或更高。 示例用法: vigiles CLI 二进制文件路径可以通过 `--vigiles-bin` 或环境变量 `VIGILES_BIN_PATH` 提供。如果两者都设置,环境变量优先。 必需参数:```--download-sbom```、```--download-sbom-format```,以及通过 ```--vigiles-bin``` 或 ```VIGILES_BIN_PATH``` 指定的 vigiles CLI 路径。 每个参数的支持选项如下: * `--download-sbom-format`:`cyclonedx`、`spdx` 和 `spdx-lite` * `--download-sbom-file-type`(用于 `cyclonedx`):`json`(默认)和 `xml` * `--download-sbom-file-type`(用于 `spdx` 和 `spdx-lite`):`json`(默认)、`xml`、`yaml`、`tag`、`xlsx`、`xls` 和 `rdfxml` * `--download-sbom-version`(用于 `cyclonedx`):`1.7`、`1.6`(默认)、`1.5`、`1.4`、`1.3`、`1.2` 和 `1.1` * `--download-sbom-version`(用于 `spdx` 和 `spdx-lite`):`2.3`(默认)和 `2.2` ### 软件包生命周期信息 某些用户可能希望在软件包的 Makefile 中设置软件包生命周期信息,并将其包含在 SBOM 中。这可以通过在软件包的 Makefile 中使用以下自定义 Makefile 变量来实现: ``` PKG_RELEASE_DATE:=2025-01-15 PKG_END_OF_LIFE:=2027-01-15 PKG_LEVEL_OF_SUPPORT:=Actively maintained ``` 这些值将被收集并包含在相应软件包的 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 ``` ```PKG_LEVEL_OF_SUPPORT``` 和 CSV 列 `level_of_support` 的有效值均为:```Actively maintained```(积极维护)、```No longer maintained```(不再维护)、```Not available```(不可用)、```Abandoned```(已弃用)。 ### 高级选项 出于开发目的,提供了一些“专家”选项。 这些选项允许调试所收集的元数据。 这些功能不受支持,且未提供相关文档。 **将收集的元数据写入中间 JSON 文件**:```-I, --write-intermediate``` **启用调试消息**:```-D, --enable-debug``` **生成 SBOM 而不执行漏洞扫描**:```-M, --metadata-only``` ### 其他说明 #### 生成的 SBOM 中的软件包版本信息 Openwrt 包含一些缺少版本信息的软件包/配置脚本(例如 base-files、urandom-seeds 等)。 对于此类软件包,在生成的 SBOM 中,其版本被设置为 Openwrt 发行版版本。 # 维护 Vigiles CVE 扫描器和 OpenWrt 支持由 [Lynx 安全团队](mailto:vigiles@timesys.com) 维护。 如需获取更新、支持及更多信息,请参阅: [Vigiles 网站](https://www.lynx.com/solutions/vulnerability-mitigation-management)
标签:API集成, CVE分析, GPT, Homebrew安装, OpenWrt, SBOM生成, 可观测性, 安全扫描工具, 嵌入式Linux, 嵌入式系统, 构建时分析, 漏洞报告, 漏洞监控, 漏洞管理, 漏洞通知, 网络安全, 网络安全研究, 跌倒检测, 软件物料清单, 逆向工具, 隐私保护