popey/grummage
GitHub: popey/grummage
Grummage 是 Grype 漏洞扫描器的交互式终端前端,让用户无需掌握 jq 语法即可方便地浏览和分析漏洞扫描的 JSON 结果。
Stars: 47 | Forks: 7
# Grummage
Grype + Rummage = Grummage。
Grummage 是 [Grype](https://github.com/anchore/grype) 的一个交互式终端前端。

## 简介
[Grype](https://github.com/anchore/grype) 是一款出色的漏洞扫描器。它可以生成简单的文本输出,或者是详尽的 JSON 文件。我想要一个工具来仔细翻阅这些 JSON,而不需要去学习晦涩难懂的 jq 语法 ;).
于是,Grummage 诞生了。
## 安装说明
Grummage 使用 Python 编写,需要 Python 3.8 或更高版本。
### 前置条件
Grummage 需要你的路径中存在 [Grype](https://github.com/anchore/grype) 二进制文件才能运行。
你可能需要先确认 Grype 命令行能否正常工作,并且已经更新了漏洞数据库。
```
grype --version
```
```
grype 0.84.0
```
```
grype db update
```
```
✔ Vulnerability DB [no update available]
No vulnerability database update available
```
### 通过 PyPI 安装(推荐)
安装 grummage 最简单的方法是通过 PyPI:
```
pip install grummage
```
### 通过 GitHub Releases 安装
从 [GitHub releases 页面](https://github.com/popey/grummage/releases)下载最新版本。
### 使用 Homebrew (macOS/Linux)
```
brew tap popey/grummage
brew install grummage
```
### 使用 Docker
注意:需要使用 `-it` 来与应用程序进行交互。设置 `TERM` 环境变量可以获得更好的颜色支持。
```
docker run --rm -it -e TERM=xterm-256color -v $(pwd):/data ghcr.io/popey/grummage:latest /data/your-sbom.json
```
### 使用 Nix (macOS/Linux)
命令式安装
```
# 使用 channels
nix-env -iA grummage
# OR 与 nix flakes
nix profile install nixpkgs#grummage
```
声明式安装
```
environment.systemPackages = with pkgs; [
grummage
];
```
### 使用 Snap
```
sudo snap install grummage
```
### 从源码安装
用于开发,或者如果你倾向于从源码安装:
```
git clone https://github.com/popey/grummage
cd grummage
pip install -e .
```
### 使用 uv(可选)
如果你使用 [uv](https://github.com/astral-sh/uv) 来管理 Python 环境:
```
git clone https://github.com/popey/grummage
cd grummage
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .
```
## 使用说明
将 grummage 指向一个 SBOM (Software Bill of Materials):
```
grummage ./example_sboms/nextcloud-latest-syft-sbom.json
```
Grummage 会检查 grype 漏洞数据库,并在需要时进行更新,然后加载 SBOM 并使用 Grype 对其进行分析。在这些操作期间,会有一个加载界面显示进度。
加载完成后,使用方向键或鼠标在左侧窗格的树状结构中进行导航。
按下 Enter 键或用鼠标点击某个漏洞,可以获取有限的详细信息。
### 按键说明:
**导航:**
* 方向键或 `h`/`j`/`k`/`l` - 导航树状结构
* Enter - 选择项目
**视图:**
* `p` - 按包名查看
* `v` - 按漏洞 ID 查看
* `t` - 按包类型查看
* `s` - 按严重程度查看
**搜索:**
* `/` - 在当前视图中搜索
* `n` - 查找下一个结果
* `N` - 查找上一个结果
**操作:**
* `e` - 通过 `grype explain` 请求更多详细信息
* `q` - 退出
## 生成 SBOM
我使用 [Syft](https://github.com/anchore/syft) 来生成 SBOM,但也有其他工具可用。例如:
```
syft nextcloud:latest -o syft-json=nextcloud-latest-syft-sbom.json
```
```
✔ Loaded image nextcloud:latest
✔ Parsed image sha256:44c884988b43e01e1434a66f58943dc809a193abf1a6df0f2cebad450e587ad7
✔ Cataloged contents bdca3ed5b303726bba5579564ab8fe5df700d637ae04f00689443260b26cc832
├── ✔ Packages [418 packages]
├── ✔ File digests [10,605 files]
├── ✔ File metadata [10,605 locations]
└── ✔ Executables [1,317 executables]
```
## 发行渠道
Grummage 可通过多种渠道获取:
- **PyPI**: `pip install grummage`
- **Homebrew**: `brew tap popey/grummage && brew install grummage`
- **Docker**: `ghcr.io/popey/grummage:latest`
- **Snap**: `sudo snap install grummage`
- **GitHub Releases**: 提供预构建的安装包
## 注意事项
我是一名开源爱好者和自学成才的程序员,出于好奇心和解决问题的热爱来创建项目。这些代码可能存在 bug 或粗糙的边缘。如果你发现了任何问题,请通过 [issue](https://github.com/popey/grummage/issues) 告知我。非常感谢。
标签:Mutation, Python, TUI, 可视化, 无后门, 终端工具, 请求拦截, 逆向工具