jacopotediosi/octoscanner
GitHub: jacopotediosi/octoscanner
针对 OctoPrint 插件的静态分析工具,自动检测版本间弃用与移除功能的使用、安全问题及常见编码坏习惯。
Stars: 1 | Forks: 0
# Octoscanner
一款用于 OctoPrint 插件的静态分析工具。可检测不同 OctoPrint 版本之间已弃用或移除的功能的使用情况、安全问题以及常见的编码坏习惯。
## 功能
- **自动规则生成** - 分析多个 OctoPrint 版本,生成用于检测弃用和移除功能的 [Semgrep](https://semgrep.dev) 规则
- **手写规则** - 包含用于解决插件中常见的安全问题和代码质量问题的额外规则
- **内置下载器** - 使用单条命令即可获取最相关的 OctoPrint 版本(以及插件 - TODO)
- **集成扫描器** - 一次扫描一个或多个插件,并输出清晰、具有可操作性的结果
## 生成器
Octoscanner 的核心是 `generator` 模块,它分析 OctoPrint 源代码并自动生成 Semgrep 规则。
生成器运行一个两阶段的 pipeline:
1. **分析器** (`generator/analyzers/`) - 解析 OctoPrint 源代码以提取有用的信息(例如,类层次结构和弃用标记)。
2. **处理器** (`generator/processors/`) - 消费分析器结果以构建 Semgrep 规则(例如,弃用和移除规则)。
## 安装
```
git clone https://github.com/jacopotediosi/octoscanner.git
cd octoscanner
python -m venv venv
source ./venv/bin/activate
pip install .
```
## 用法
以下是最常见的用法。有关命令和选项的完整列表,请参阅 `octoscanner --help`。
### 扫描插件
```
# 扫描插件
octoscanner scan /path/to/my_plugin
# 扫描多个插件
octoscanner scan /path/to/plugin1 /path/to/plugin2
# 按规则类别或特定规则文件过滤
octoscanner scan /path/to/my_plugin -r deprecation -r removal/python_removal.yaml
```
#### 忽略误报
在您的插件代码中添加[标记](https://semgrep.dev/docs/ignoring-files-folders-code#ignore-code-through-nosemgrep)(例如,`# nosemgrep: REM-0001`、`// nosemgrep`)以跳过特定行或代码块。
您还可以在扫描期间使用 `--exclude-rule` 排除特定规则(例如,`octoscanner scan /path/to/my_plugin --exclude-rule REM-0001 --exclude-rule DEP-0002`)。
#### CI 集成
如果任何被扫描的插件存在问题,Octoscanner 会返回退出代码 `1`,这使得 CI 集成变得非常直观。请在您的 workflow 中使用 `octoscanner scan`,可选择搭配 `--no-color` 或 `--format json`。
或者,使用 Octoscanner 生成的规则直接将 [Semgrep 集成到您的 CI 中](https://semgrep.dev/docs/semgrep-ci/sample-ci-configs)。
可以考虑将 [Opengrep](https://www.opengrep.dev/) 作为替代方案——在我的测试中,与 Semgrep 相比,它将扫描时间缩短了一半,从而节省了 CI 分钟数。
### 生成规则
规则通常由 Octoscanner 维护者生成,以便进行手动审查和改进。如果您只是想扫描插件,请使用随附的预先生成的规则。
相反,如果您想尝试探索一番...
```
# 步骤 1. 下载最相关版本的 OctoPrint 源码
octoscanner download octoprint all
# 步骤 2. 试运行:分析所有已下载的版本,打印将要生成的内容
octoscanner generate all
# 步骤 3. 生成规则并保存到磁盘
octoscanner generate all --save
```
您也可以仅分析两个 OctoPrint 版本之间的差异,并为此生成规则:
```
octoscanner generate 1.10.0 1.11.0
```
## 演示
为从 1.4.0 到 2.0.0 的所有 OctoPrint 版本生成规则只需不到 10 秒钟:
[](https://asciinema.org/a/D92aTuEyok1VJIl5)
扫描包含 400 多个 OctoPrint 插件的整个仓库只需不到一分钟:
[](https://asciinema.org/a/I7ZLwptHA3FHjyr5)
标签:3D打印, OctoPrint, Python, SDLC, Semgrep, WordPress安全扫描, 中间件漏洞, 云安全监控, 代码安全审计, 坏味道检测, 安全专业人员, 开源安全工具, 弃用特征检测, 插件开发, 无后门, 自动化规则生成, 逆向工具, 逆向工程平台, 静态分析