code scanning と CodeQL について
CodeQL は、セキュリティ チェックを自動化するために GitHub が開発した、コード分析エンジンです。 CodeQL を使用してコードを分析し、結果を code scanning アラートとして表示することができます。
code scanningに対して CodeQL 分析を使用する方法には、主に 2 通りあります。
-
既定の設定を使用して、リポジトリ上の code scanning の CodeQL 分析を自動的に構成します。 既定の設定では、分析する言語、実行するクエリ スイート、スキャンをトリガーするイベントを選択し、分析設定の概要を表示します。 CodeQL を有効にすると、GitHub Actions によってワークフロー実行が実行され、コードがスキャンされます。 詳しくは、「リポジトリの code scanning を構成する」を参照してください。
-
詳細設定を使用して、CodeQL ワークフローをご利用のリポジトリに追加します。 これにより、github/codeql-action を使用して CodeQL CLI を実行するカスタマイズ可能なワークフロー ファイルが生成されます。 詳しくは、「リポジトリの code scanning を構成する」を参照してください。
-
外部 CI システムで CodeQL CLI を直接実行し、その結果を GitHub にアップロードします。 詳しくは、「CIシステムでのCodeQL Code scanningについて」を参照してください。
CodeQL について
CodeQL はコードをデータのように扱い、コードの潜在的な脆弱性を従来の静的分析よりも高い精度で見つけることができます。
- ご利用のコードベースを表現する CodeQL データベースを生成します。
- 次に、そのデータベースに対して CodeQL クエリを実行して、コードベース内の問題を特定します。
- CodeQL を code scanning で使用すると、クエリ結果は GitHub Enterprise Cloud に code scanning アラートとして表示されます。
CodeQL ではコンパイルおよびインタープリタ言語の両方がサポートされていて、サポートされている言語で記述されたコードの脆弱性とエラーを見つけることができます。
- C/C++
- C#
- Go
- Java/Kotlin
- JavaScript/TypeScript
- Python
- Ruby
注:
- Kotlin の CodeQL 分析は、現在ベータ版です。 ベータ版の間、Kotlin の分析は他の言語の CodeQL 分析ほど包括的ではありません。
- Java、Kotlin、またはその両方で記述されたコードを分析するには
java
を使用します。 - JavaScript、TypeScript、またはその両方で記述されたコードを分析するには
javascript
を使用します。
詳細については、CodeQL Web サイトのドキュメント「サポートされている言語とフレームワーク」を参照してください。
CodeQL クエリについて
GitHub 専門家、セキュリティ研究者、およびコミュニティの貢献者は、code scanning に使用される既定の CodeQL クエリを作成して維持します。 クエリは、分析を改善し、誤検知の結果を減らすために定期的に更新されます。 クエリはオープン ソースであるため、github/codeql
リポジトリ内のクエリを表示して投稿できます。 詳細については、CodeQL Web サイトの CodeQL に関するページを参照してください。 自分で独自のクエリを記述することもできます。 詳細については、CodeQL ドキュメントにある CodeQL クエリに関するページを参照してください。
詳細設定または外部 CI システムを使用してコードをスキャンする場合は、分析の一環として追加のクエリを実行できます。 これらのクエリは、公開された CodeQL クエリ パック (ベータ) またはリポジトリ内の CodeQL パックに属している必要があります。 CodeQL パック (ベータ) には、従来の QL パックと比べて次の利点があります。
- CodeQL クエリ パック (ベータ) が GitHub Container registry に公開されると、クエリとコンパイル キャッシュに必要なすべての推移的な依存関係がパッケージに含められます。 これにより、パフォーマンスが向上します。そして、パックまたは CLI の新しいバージョンにアップグレードするまでは、パックでクエリを実行するたびに確実に同じ結果が得られます。
- QL パックには推移的な依存関係は含まれていません。その結果、パック内のクエリを、標準ライブラリ (つまり、ご利用のクエリ内の
import LANGUAGE
ステートメントによって参照されるライブラリ)、またはクエリと同じ QL パック内のライブラリにのみ依存させることができます。 - CodeQL クエリ パック (ベータ) は、複数の GitHub コンテナー レジストリからダウンロードできます。 詳しくは、「code scanning のカスタマイズ」を参照してください。
詳しくは、「CodeQL パックについて」を参照してください。
注: CodeQL パッケージ管理機能 (CodeQL パックを含む) は現在ベータ版であり、変更される可能性があります。