Skip to main content

CodeQL を使用したコード スキャン

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

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

Code scanning は、次のリポジトリの種類で使用できます。

  • GitHub.com 上のパブリックリポジトリ
  • GitHub Team、GitHub Enterprise Cloud、または GitHub Enterprise Server 上の組織所有リポジトリ。 GitHub Code Security が 有効になっています。

メモ

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

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

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

CodeQLにcode scanning分析を使用するには、主に次の 3 つの方法があります。

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

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

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

メモ

GitHub Enterprise Server3.19では、CodeQL アクションは既定でバージョンCodeQL CLI2.22.4使用します。 外部 CI システムで分析を実行する場合は、同じバージョンの CodeQL CLI を使用することをお勧めします。

code scanningアラートの詳細については、「コード スキャンのアラート」を参照してください。

CodeQL の概要

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

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

CodeQL はコンパイル済み言語と解釈言語の両方をサポートし、サポートされている言語で記述されたコードで脆弱性やエラーを見つけることができます。

CodeQL では、次の言語がサポートされています。

  • C/C++
  • C#
  • Go
  • Java/Kotlin
  • JavaScript/TypeScript
  • Python
  • Ruby
  • Rust (パブリック プレビュー)
  • Swift * GitHub Actions ワークフロー

メモ

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

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

重要

CodeQL では、上記に記載されていない言語はサポート されていません 。 これには、PHPScala などが含まれますが、これらに限定されません。 サポートされていない言語で CodeQL を使用しようとすると、アラートが生成されず、分析が不完全になる可能性があります。

カスタム フレームワークまたはニッチ フレームワークをモデル化する

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

CodeQL クエリ

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

独自のクエリを記述する

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

追加のクエリを実行する

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

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

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

  • CodeQL クエリ パックは、複数の GitHub コンテナー レジストリからダウンロードできます。 詳細については、「コード スキャンのワークフロー構成オプション」を参照してください。

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