stackhpc/grype-analyse

GitHub: stackhpc/grype-analyse

一款用于分析 Grype 漏洞扫描器输出的 Python 工具,帮助团队审计忽略规则有效性并追踪未被忽略的严重漏洞。

Stars: 0 | Forks: 0

# grype 分析 分析 [Grype](https://oss.anchore.com/docs/guides/vulnerability/) 漏洞扫描输出,以帮助调查严重漏洞 并管理 Grype 忽略规则。 `grype-analyse` 工具接收 Grype 的 json 输出以及(可选的) 用于扫描的 Grype 配置,并输出: - INFO 消息:针对配置中未匹配到任何漏洞的忽略规则, 即可以删除的规则。 - WARNING 消息:针对配置中带有 "FIXME:" 注释且确实匹配到了漏洞的忽略规则,即需要修复的漏洞。 - ERROR 消息:针对任何未被忽略的严重漏洞, 包含 CVE 编号(如果有)、"原生" ID 以及匹配位置的摘要。 因此,像这样的 [Grype 配置](https://oss.anchore.com/docs/reference/grype/configuration/) : ``` ignore: - vulnerability: CVE-2025-68121 package: location: /usr/bin/ondemand_exporter ... # FIXME: - vulnerability: CVE-2026-27143 ... ``` 可能会产生如下输出: ``` INFO: 1 ignore rules were not used: - vulnerability: CVE-2025-68121 package: location: /usr/bin/ondemand_exporter WARNING: 1 ignore rules tagged FIXME were used: - vulnerability: CVE-2026-27143 ERROR: 1 critical vulnerabiliies were not ignored: CVE Native IDs Locations -------------- ------------ -------------------------- CVE-2026-39821 GO-2026-5026 /usr/bin/apptainer /usr/bin/ondemand_exporter ``` 这里的“原生 ID”是 Grype 用于引用此项的 ID,即应该在忽略规则中使用的 ID。 ## 用法 - 通过 pip/uv 安装。 - 运行 Grype 扫描并输出 json 格式的结果,例如: grype -c ./.grype.yaml --only-fixed "sbom:myimg-sbom.syft-json" -o json > grype.out.json - 运行 `grype-analyse`,并传入用于扫描的同一个 Grype 配置文件: grype-analyse -c ./.grype.yaml grype.out.json 请注意,如果没有将 `-c` 选项传递给 `grype-analyse`,它将不会 加载配置,因此无法分析忽略规则。这与 `grype` 本身不同,如果配置存在于默认位置,后者会自动加载配置。 ## Grype 忽略规则 Grype 配置和扫描输出中的忽略规则仅根据以下字段来判定是否匹配 ——所有其他字段都会被忽略: - `vulnerability` - `package.location` 或 `package.name` 可以通过在 `ignore` 配置键中规则的前一行添加注释,将忽略规则标记为 "FIXME" 规则。该行的第一个非空白字符必须是 `#`,并且必须包含 "FIXME:"。 参见上面的示例。 ## GitHub 集成 如果在 GitHub workflow 中运行,可以使用 `-g` 或 `--github-checks` 选项 让 `grype-analyse` 创建 check runs,以显示第一部分中描述的 INFO、WARNING 和 ERROR 消息的状态。如果提供了此选项,可以将环境变量 `GRYPE_ANALYSE_MATRIX` 设置为任意字符串,以区分在同一 SHA 下不同运行的检查,例如在 matrix job 中。请注意,如果未在 job env 中设置,则必须将 `GITHUB_TOKEN` 显式传递给该步骤。 示例用法: ``` jobs: scan: runs-on: ubuntu-latest permissions: checks: write # required to write check run statuses strategy: matrix: image: ["rocky8.qcow2", "rocky9.qcow2"] steps: - name: Generate sbom and attach to release if applicable uses: anchore/sbom-action id: generate-sbom with: path: "${{ matrix.image }}" artifact-name: "${{ matrix.image }}}-sbom.syft-json" output-file: "${{ matrix.image }}-sbom.syft-json" format: syft-json - name: Scan sbom with Grype uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0 id: scan with: sbom: "${{ matrix.image }}-sbom.syft-json" severity-cutoff: low only-fixed: true output-format: json fail-build: false - name: Analyse scan and fail workflow if fixed CRITICAL vulnerabilities are not ignored run: | . venv/bin/activate pip install git+https://github.com/stackhpc/grype-analyse@main grype -c .grype.yaml --only-fixed "sbom:${{ SBOM }}" -o json > grype.out.json grype-analyse --config .grype.yaml --github-checks grype.out.json env: SBOM: "{{ matrix.image }}-sbom.syft-json" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GRYPE_ANALYSE_MATRIX: ${{ matrix.image }} ``` matrix job 的输出示例: ![alt text](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/09c3bce982001618.png)
标签:GPT, Python, 报告分析, 无后门, 漏洞管理, 运维, 逆向工具