Skip to main content

CodeQL によるコード スキャンについて

CodeQL を使うと、コード内の脆弱性とエラーを特定することができます。 結果は、GitHub 内で code scanning アラートとして表示されます。

この機能を使用できるユーザーについて

Code scanning は、次のリポジトリに使用できます:

  • GitHub.com 上のパブリックリポジトリ
  • GitHub Advanced Security が有効になっている GitHub Enterprise Cloud の組織所有リポジトリ

CodeQL は、セキュリティ チェックを自動化するために GitHub が開発した、コード分析エンジンです。 CodeQL を使用してコードを分析し、結果を code scanning アラートとして表示することができます。

code scanningに対して CodeQL 分析を使用する方法には、主に 2 通りあります。

  • 既定の設定を使用して、リポジトリ上の code scanning の CodeQL 分析をすばやく構成します。 既定の設定では、分析する言語、実行するクエリ スイート、スキャンをトリガーするイベントが自動的に選択されます。 必要に応じて、実行するクエリ スイートと分析する言語を手動で選択できます。 CodeQL を有効にすると、GitHub Actions によってワークフロー実行が実行され、コードがスキャンされます。 詳しくは、「コード スキャンの既定セットアップの構成」を参照してください。

  • 詳細設定を使用して、CodeQL ワークフローをご利用のリポジトリに追加します。 これにより、github/codeql-action を使用して CodeQL CLI を実行するカスタマイズ可能なワークフロー ファイルが生成されます。 詳しくは、「コード スキャンの高度なセットアップの構成」を参照してください。

  • 外部 CI システムで CodeQL CLI を直接実行し、結果を GitHub にアップロードします。 詳しくは、「既存の CI システムでコード スキャンを使用する」を参照してください。

code scanning アラートについては、「Code scanningアラートについて」をご覧ください。

CodeQL について

CodeQL は、コードをデータのように扱うプログラミング言語および関連ツールです。 これは、コードの分析を容易にし、従来の静的アナライザーよりも信頼度の高いコード内の潜在的な脆弱性を見つけられるように、明示的に作成されました。

  1. ご利用のコードベースを表現する CodeQL データベースを生成します。
  2. 次に、そのデータベースに対して CodeQL クエリを実行して、コードベース内の問題を特定します。
  3. CodeQL を code scanning で使用すると、クエリ結果は GitHub に code scanning アラートとして表示されます。

CodeQL ではコンパイルおよびインタープリタ言語の両方がサポートされていて、サポートされている言語で記述されたコードの脆弱性とエラーを見つけることができます。

  • C/C++
  • C#
  • Go
  • Java/Kotlin
  • JavaScript/TypeScript
  • Python
  • Ruby
  • Swift

Note

  • java-kotlin を使用して、Java、Kotlin、またはその両方で記述されたコードを分析します。
  • javascript-typescript を使用して、JavaScript、TypeScript、またはその両方で記述されたコードを分析します。

詳細については、CodeQL Web サイトのドキュメント「サポートされている言語とフレームワーク」を参照してください。

カスタム フレームワークまたはニッチ フレームワークのモデリング

GitHub のエキスパート、セキュリティ研究者、コミュニティの共同作成者は、一般的なフレームワークとライブラリのデータ フローをモデル化するためのライブラリを作成します。 モデル化されていないカスタム依存関係を使用する場合は、Visual Studio Code の CodeQL 拡張機能を使用して、これらの依存関係のモデルを作成し、それらを使用して分析を拡張できます。 詳しくは、「CodeQL モデル エディターの使用」を参照してください。

CodeQL クエリ

GitHub のエキスパート、セキュリティ研究者、コミュニティの共同作成者は、code scanning に使用される既定の CodeQL クエリを作成して維持します。 クエリは、分析を改善し、誤検知の結果を減らすために定期的に更新されます。

独自のクエリを記述する

クエリはオープンソースであるため、github/codeql リポジトリ内のクエリを表示したり投稿したりできます。 詳細については、CodeQL ドキュメントにある CodeQL クエリに関するページを参照してください。

追加のクエリを実行する

詳細設定または外部 CI システムを使用してコードをスキャンする場合は、分析の一部として追加のクエリを実行できます。

これらのクエリは、公開された CodeQL クエリ パック、またはリポジトリ内の CodeQL パックに属している必要があります。

  • CodeQL クエリ パックが GitHub Container registry に公開されると、クエリとコンパイル キャッシュに必要なすべての推移的な依存関係がパッケージに含められます。 これにより、パフォーマンスが向上します。そして、パックまたは CLI の新しいバージョンにアップグレードするまでは、パックでクエリを実行するたびに確実に同じ結果が得られます。

  • CodeQL クエリ パックは、複数の GitHub コンテナ レジストリからダウンロードできます。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。

詳しくは、「CodeQL パックを使った分析のカスタマイズ」を参照してください。