皆さんごきげんよう。本記事は、2021 年 7 月 7 日(米国時間)ポストされた Code Scanning C++ with GitHub Actions の速報的なアレというか意訳のようななにかとなります。内容については下記が原文で、正となります。
昨年、GitHub は Code Scanning をリリースしました。これにより、開発者はセキュリティ チェックの仕組みを CI/CD 環境や開発ワークフローに組み込むことができます。この記事では、GitHub Actions で Code Scanning のバックエンドの解析エンジンを利用するやり方について紹介します。
CodeQL とは
CodeQL は、コードベースから生成されたデータベースに対してクエリを実行することで、セキュリティ チェックを自動化する解析エンジンです。CodeQL データベースは、ビルド プロセス中に作成され、ソースコードを表形式で表現します。既定では、Code Scanning は GitHub の研究者やコミュニティが作成した標準的な CodeQL クエリを実行しますが、独自のカスタムクエリを作成して利用することもできます。
既定のセットに含まれるクエリは以下の通りです。
- Pointer Overflow Check
- Potentially overflowing call to snprintf
- Uncontrolled format string
など。
uikou 注 : CodeQL は、ソースコードにおいて、セキュリティ脆弱性を分析し、発見してくれます。もともとは、アメリカの Semmle 社が開発していたものです。なお、Semmle 社は 2019 年 9 月に GitHub が買収しました。Code Scanning は、いわゆる静的アプリケーションセキュリティテスト (SAST) 手法を実現するために、GitHub のワークフローの一部として実装できる仕組みです。
GitHub Actions での CodeQL 設定
Code Scanning (with CodeQL) は、Public リポジトリであれば無料で利用可能です。GitHub Enterprise では、GitHub Advanced Security の一部として提供されています。
ここでは、4 クリックであらびっくり、簡単にセットアップする手順を紹介します。以下に GIF ファイルもありますので、手順を見てみてくださいね。
これで対応 done です。
既定の CodeQL 解析ワークフローは、Default の branch に対して、Push したり、Pull Request を上げたりするたびに、コード解析をしてくれるように構成されています。つまり、新しいファイルを直接 main branch に commit したあと、コード解析が自動的に走ってくれるという事です。
コード解析のログは、Actions
タブで確認できます。また、アラートは Security
タブで表示、管理することができます。
アラートのベースラインを管理する
時に、とりわけ大規模なレガシー コードベースでは、圧倒的な数のアラートが出力されることがあります。そのため、CodeQL では Pull Request に含まれる新規、または修正されたアラートのみを表示するようになっています。既存のアラートを管理したい場合は、Security
タブの Code scanning aleats
セクションから対応します。
Dismiss と Delete の違いは重要です
この二つの違いを理解することは、とっても重要です。
特に重要なポイントを例にあげると、アラートを解除する (Dismissing) と、(次にスキャンされても)同じコードがアラートを再生成することはないが、アラートを削除する (Deleting) と、同じコードが次にスキャンされたとき、また同じアラートが生成されるという動作の違いがあるという事です。
アラートを一括して解除したい(bulk-dismiss) 場合は、アラートのサマリから行うことができます。(解除したいアラートのセットにリストをフィルタリングした後に行いましょう)
フィードバックおまちしてます
今回の記事は、CI/CD 環境における Code Scanning のほんのさわりです。基本を理解した後は、ご自身でオリジナルの CodeQL クエリを作成してみたり、解析頻度を調整したりしてみてください。
GitHub Actions での Code Scanning、是非おためしくださいね!
以上、Nick さんからでした。
それではみなさんごきげんよう。