
ChopChop 是一个用于Web应用程序动态应用程序安全测试的命令行工具,最初由米其林CERT编写。
其目标是扫描多个端点,识别通过Web根目录暴露的服务/文件/文件夹。检查/签名在配置文件中声明(默认:chopchop.yml),完全可配置,尤其适合开发者。

"Chop chop" 是一个源于粤语的短语。"Chop chop" 意为"赶快",表示某事应该立即完成,刻不容缓。
我们尽量简化构建过程,希望以下步骤即可完成:
$ go mod download
$ go build .
文件夹中会生成一个 gochopchop 可执行文件。
得益于 Github Container Registry,我们可以提供一些新鲜构建的 Docker 镜像!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
如果你更喜欢,也可以本地构建,如下所示:
docker build -t gochopchop .
我们始终致力于让 goChopChop 尽可能简单。使用此工具扫描主机非常简单:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
Golang 重写工作已在几个月前完成,但仍有许多工作要做。以下是我们计划集成的一些功能: [x] 多线程提升性能 [x] 指定并发线程数 [x] 颜色和更好的格式化 [x] 过滤要搜索的检查/签名 [x] 模拟和单元测试 [x] Github CI 还有更多!
为了快速端到端测试 chopchop,我们在 tests/server.go 中提供了一个 Web 服务器。
要尝试它,请运行 go run tests/server.go,然后使用以下命令运行 chopchop:./gochopchop scan http://localhost:8000 --verbosity Debug。
ChopChop 应输出"未发现漏洞"。
还有单元测试,可以使用 go test -v ./... 运行。
这些测试已集成到 Github CI 工作流中。
以下是 scan 命令可用的标志:
以下是一些你可能感兴趣的高级用法。
注意:可以使用 > 等进行后处理重定向。
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins 或 plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 使用 4 个工作线程$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
编写新检查非常简单:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
一个端点(例如 /.git/config)映射到多个检查,从而避免为 X 个检查发送 X 个请求。通过单个 HTTP 请求可以完成多个检查。
每个检查需要以下字段:
有关更多信息,请参阅 third-party.txt 文件。
ChopChop 已根据 Apache License 2.0 发布。
有关更多信息,请参阅 LICENSE 文件。
| 标志 | 完整标志 | 描述 |
|---|
-h | --help | 帮助向导 |
-v | --verbosity | 日志详细级别 |
-c | --signature | 自定义签名文件路径 |
-k | --insecure | 禁用 SSL 验证 |
-u | --url-file | 包含待测试 URL 的文件路径 |
-b | --max-severity | 如果严重级别超过或等于指定标志,则阻止 CI 管道 |
-e | --export | 输出导出类型(csv 和/或 json) |
--export-filename | 指定导出文件的文件名 | |
-t | --timeout | HTTP 请求超时时间 |
--severity-filter | 按严重级别过滤插件 | |
--plugin-filter | 按插件名称过滤插件 | |
--threads | 并发线程数 |
| 属性 | 类型 | 描述 | 可选? | 示例 |
|---|
| name | string | 检查名称 | 否 | Git exposed |
| description | string | 检查的简短描述 | 否 | Ensure .git repository is not accessible from the webroot |
| remediation | string | 针对此"问题"的修复措施 | 否 | Do not deploy .git folder on production servers |
| severity | Enum("High", "Medium", "Low", "Informational") | 在环境中触发时的严重等级 | 否 | High |
| status_code | integer | 预期的 HTTP 状态码 | 是 | 200 |
| headers | List of string | HTTP 响应中应存在的头部列表 | 是 | N/A |
| no_headers | List of string | HTTP 响应中不应存在的头部列表 | 是 | N/A |
| match | List of string | HTTP 响应中应存在的字符串列表 | 是 | "[branch" |
| no_match | List of string | HTTP 响应中不应存在的字符串列表 | 是 | N/A |
| query_string | 需要传递给端点的 GET 参数 | 字符串 | 是 | query_string: "id=FOO-chopchoptest" |
| 库名称 | 链接 | 许可证 |
|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |