Skip to main content

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

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

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

GitHub Advanced Security が有効になっている組織所有のリポジトリ

注: この機能を使用するには、サイト管理者が code scanning を有効にする必要があります。 詳しくは、「アプライアンス用コードスキャンの構成」を参照してください。

Enterprise の所有者が Enterprise レベルで GitHub Advanced Security (GHAS) ポリシーを設定している場合、code scanning を有効または無効にできない場合があります。 詳しくは、「エンタープライズのコード セキュリティと分析のためのポリシーの適用」を参照してください。

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 システムでコード スキャンを使用する」を参照してください。

GitHub Enterprise Server 3.14 の場合は、CodeQL アクションの既定で CodeQL CLI バージョン 2.17.6 が使われます。 外部 CI システムで分析を実行する場合は、同じバージョンの CodeQL CLI を使うことをお勧めします。

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

CodeQL について

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

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

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

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

注:

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

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

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

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

CodeQL クエリ

GitHub のエキスパート、セキュリティ研究者、コミュニティの共同作成者は、code scanning に使用される既定の CodeQL クエリを作成して維持します。 クエリは、分析を改善し、誤検知の結果を減らすために定期的に更新されます。 既定のパック、および拡張されたパックで使用できるクエリの詳細については、「default および security-extended クエリ スイートに含まれるクエリ」を参照してください。

独自のクエリを記述する

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

追加のクエリを実行する

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

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

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

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

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