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 的输出示例:

标签:GPT, Python, 报告分析, 无后门, 漏洞管理, 运维, 逆向工具