
Choccyは、GitHubリポジトリの更新を監視し、CodeQL分析スキャンを自動的に実行するプロジェクトです。
実行する前に、コードコンピレーション環境を自分で構成する必要があります。CodeQL環境:
codeqlバイナリおよびライブラリhttps://github.com/github/codeql-cli-binaries/releases、https://github.com/github/codeql/tagsをダウンロードしてください
減圧後、それはChoccyバイナリファイルと同じディレクトリに配置されます。つまり、次のとおりです。
$ tree . -L 1
.
├── choccy
├── codeql
└── codeql-codeql-cli-v2.19.4
主な構成と関数はWebインターフェイスにあり、コマンドラインパラメーターは2つしかありません。
-addr string
监听地址和端口 (default "0.0.0.0:80")
-token string
系统Token
プログラムが初めて実行されると、データを保存するために配置されているディレクトリにchoccy_dataフォルダーが作成されます。トークンが指定されていない場合、ランダムに生成され、コマンドラインに出力されます。プロジェクト自体には、任意のコマンドの実行やファイルの読み取りなどの潜在的な機能があります。したがって、サービスがパブリックネットワークに開かれている場合は、必ず強力なパスワードを設定してください。
最初にフロントエンドをコンパイルするには、Webディレクトリを入力する必要があります。 Golangのバックエンドをコンパイルすると、フロントエンドのリソースファイルが自動的に埋め込まれます。
cd web
npm install
npm run build
cd ..
go build -o choccy main.go
# mac上交叉编译
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o choccy_linux_amd64 main.go
# CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o choccy_windows_amd64.exe main.go
# CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o choccy_darwin_amd64 main.go 使用する前に、CodeQL環境を構成すると、设置でGitHubトークンを構成することも最適です。そうしないと、GitHub APIによるアクセスから制限される場合があります。设置-其他CodeQL附加命令行选项の--ram 2048は、codeqlで使用できる最大メモリであり、ユニットはMBです。システムの構成に応じて適切に増やしてください。そうしないと、スキャン速度に影響したり、スキャン障害を引き起こす可能性があります。
現在、GitHubリポジトリのリリーススキャン、デフォルトのブランチスキャン、および元のCodeQLデータベーススキャンをサポートしています。 GitHubは、多くのリポジトリに対してCodeQLデータベースを自動的にコンパイルします(インターフェイスhttps://api.github.com/repos/<owner>/<repo>/code-scanning/codeql/databases <onser>/<po>/code-scanning/codeql/databasesを介して表示できます)。これにより、ローカルコンパイル環境を構成する手順と、データベースをローカルでコンパイルする時間が節約されます。したがって、スキャンモードは元のデータベースを優先します。 Java-Sec-Codeプロジェクトを例に取ります。

クエリスイートは、一連のクエリステートメントのコレクションです。メニューバーの查询套件をクリックして、表示および編集できます。ここでは、最初にPreset java_security.qlsを選択できます。
次に、プロジェクトの右側にある加入扫描队列クリックします。これにより、プロジェクトとスキャンのバージョンにタスクがすぐに作成されます。

任务タブで、現在のタスク実行ステータスと実行ログを確認できます。

実行が完了した後、分析结果タブで特定のスキャン結果を確認できます。結果の表示は、VSCodeのCodeQLプラグインの表示効果を完全に複製し、脆弱性情報、脆弱性の場所、対応するルールID、脆弱性の完全なコールリンク、脆弱性コンテキストコードなど、いくつかの最適化が行われました。ハイパーリンクをクリックして、GitHubリポジトリの対応するコードの場所にジャンプします。

プロジェクトが追加された後、最新バージョンはスキャンのために毎週プルされます。これは、设置で構成できます -其他-定时扫描Cron表达式:

さらに、设置-环境-环境变量システムがGitHubなどにアクセスするときにプロキシを構成できます。

独自のクエリライブラリまたはクエリステートメントをPacksディレクトリに入れることができます。配置が完了したら、查询包タブに移動して表示できます。


Query Suiteは查询套件タブで編集および表示できる一連のCODEQLルールのコレクションです。

公式構文参照文書:https://docs.github.com/zh/code-security/codeql-curi/using-the-advanced-functionality-the-codeql-codeql-query-sites
数据库ページで、右上隅のプラスアイコンをクリックして、ローカルデータベースをzip圧縮パッケージにパッケージ化し、アップロードし、アップロードしてインポートして完了します(アップロード中にページを閉じることはできません)
(アップロード関数はブロック送信を使用しないため、サーバーの使用可能なメモリはファイルサイズよりも大きくなければなりません)


任务ページで、右上隅のプラスアイコンをクリックし、データベースとクエリスイートを選択します。プロジェクト名は、デフォルトでデータベース名と同じです。

任务ページで、右上隅のプラスアイコンを選択し、从GitHub批量创建クリックします

搜索语句は、リポジトリの検索です。構文参照:https://docs.github.com/en/rest/search/search?apiversion=2022-11-28#search-repositories
扫描范围とは、特定の順序でソートした後のスキャンのどの部分を指します。次のスクリーンショットでは、星の数が逆の順序でソートされ、11番目と12番目の倉庫がスキャンされます。

このツールは、法的学習または研究行動のみを目的としています。このツールの使用中に、すべての行動が現地の法律や規制に準拠していることを確認する必要があります。このツールの使用中に違法行為がある場合、あなたはあなた自身の裁量ですべての結果を負担し、このツールのすべての開発者とすべての貢献者が法的または共同責任を負わないでしょう。本契約のすべての条件を完全に読み、完全に理解し、受け入れていない限り、このツールをインストールして使用しないでください。他の明示的または黙示的な方法によるお客様の使用または本契約の受け入れは、本契約の拘束力を読んで合意したとみなされます。