Skip to main content

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

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

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

Code scanning は、GitHub Enterprise Server の Organization 所有のリポジトリで利用できます。 この機能には、GitHub Advanced Security のライセンスが必要です。 詳しくは、「GitHub Advanced Security について」を参照してください。

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

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

code scanning と CodeQL について

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

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

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

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

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

GitHub Enterprise Server 3.10 の場合は、CodeQL アクションの既定で CodeQL CLI バージョン 2.13.5 が使われます。 外部 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

注:

  • Swift の CodeQL 分析は、現在ベータ版です。 ベータ版の間、Swift の分析は他の言語の CodeQL 分析ほど包括的ではありません。 加えて、Swift 5.8 はまだサポートされていません。
  • Kotlin の CodeQL 分析は、現在ベータ版です。 ベータ版の間、Kotlin の分析は他の言語の CodeQL 分析ほど包括的ではありません。
  • java を使用して、Java、Kotlin、またはその両方で記述されたコードを分析します。
  • javascript を使用して、JavaScript、TypeScript、またはその両方で記述されたコードを分析します。

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

CodeQL クエリについて

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

独自のクエリを記述する

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

追加のクエリを実行する

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

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

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

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

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