trailofbits/mrva
GitHub: trailofbits/mrva
一款命令行优先的 CodeQL 多仓库变体分析工具,支持通过 GitHub API 批量下载数据库并在本地运行查询。
Stars: 10 | Forks: 0
# mrva
`mrva` 是一种终端优先的 CodeQL [多仓库变体分析](https://docs.github.com/en/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/running-codeql-queries-at-scale-with-multi-repository-variant-analysis) 方法。你可以通过 GitHub API 下载现有的 CodeQL 数据库,运行变体分析,并在本地机器上查看所有结果。该工具的灵感来源于 VSCode [CodeQL 扩展](https://github.com/github/vscode-codeql),但它是作为独立的 CLI 工具运行的。
目录:
- [安装](#installing)
- [使用](#using)
- [开发](#developing)
- [测试](#testing)
- [Linting](#linting)
## 安装
首先,从 [PyPI](https://pypi.org/project/mrva/) 安装 `mrva`:
```
$ python -m pip install mrva
$ mrva -h
```
_或者,使用你喜欢的 Python 包安装器,如 `pipx` 或 `uv`。_
## 使用
`mrva` 具有以下命令树:
- `mrva`
- `download`
- `top`
- `org`
- `repo`
- `query`
- `from-file`
- `analyze`
- `pprint`
- `print-ast` (实验性)
使用 `mrva` 通常需要三个步骤:
1. 通过 GitHub API 下载现有的 CodeQL 数据库
2. 针对这些数据库运行 CodeQL 变体分析
3. 查看结果
首先,请确保你的 `$PATH` 中有一个 `codeql` 二进制文件(发布版本在[这里](https://github.com/github/codeql-cli-binaries/releases))。
接下来,创建一个目录来存储 `mrva` 数据:
```
$ mkdir dbs/
```
该目录最终将包含 CodeQL 数据库、工具配置、SARIF 结果以及 `mrva` 运行所需的其他信息。
使用 `mrva download` 命令下载 CodeQL 数据库:
```
$ mrva download --token $GITHUB_TOKEN --language ruby dbs/ top --limit 100
```
此命令将下载前 100 个 GitHub Ruby 项目(按 star 数量排序)的 CodeQL 数据库。你可以通过指定不同的 `--language`,或使用不同的下载策略(如 `download org` 或 `download repo`)来下载其他数据库。
使用 `mrva analyze` 命令分析已下载的数据库:
```
$ mrva analyze dbs/ /path/to/queries -- --rerun --threads=0
```
包含在 `--` 之后的任何标志都会直接传递给 CodeQL 二进制文件。
使用 `mrva pprint` 命令查看分析结果:
```
$ mrva pprint dbs/
```
你也可以使用 `pprint` 命令打印原始的 CodeQL SARIF 结果:
```
$ codeql database analyze \
--format sarif-latest \
--sarif-add-file-contents \
--output output.sarif \
-- db/ query.ql
$ mrva pprint output.sarif
```
其中许多命令接受额外的标志来修改其功能。例如,`analyze` 和 `pprint` 接受 `--select` 和 `--ignore` 标志来过滤仓库。使用 `--help` 标志探索给定命令提供的所有功能。
## 开发
`mrva` 使用 [`poetry`](https://python-poetry.org/) 进行依赖和配置管理。
在继续之前,请使用以下命令安装项目依赖:
```
$ poetry install --with dev
```
### Linting
使用以下命令对所有项目文件进行 Lint:
```
$ poetry run pre-commit run --all-files
```
### 测试
使用以下命令运行 Python 测试:
```
$ poetry run pytest --cov
```
标签:CodeQL, GitHub API, Python, SARIF, SAST, 云安全监控, 变种分析, 多仓库分析, 安全评估工具, 数据库下载, 文档结构分析, 无后门, 盲注攻击, 终端工具, 逆向工具, 静态分析