
ChopChop は、Michelin CERT が最初に作成した、Web アプリケーション向けの動的アプリケーションセキュリティテスト(DAST)を行うコマンドラインツールです。
その目的は、複数のエンドポイントをスキャンし、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 を実行し、その後 ./gochopchop scan http://localhost:8000 --verbosity Debug で chopchop を実行してください。
ChopChop は "no vulnerabilities found" と表示するはずです。
また、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 チェックに対して送信する必要がありません。1 回の 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 パラメータ | String | はい | 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 |