PR

CodeQLでソースコードの脆弱性診断を行う方法(GitHub Actions / CodeQL CLI)

脆弱性診断レポートのイメージ図 Web開発
記事内に広告・アフィリエイトリンクが含まれています。
スポンサーリンク

CodeQLは,GitHubが提供する静的解析(SAST)ツールであり,ソースコードからセキュリティ上の脆弱性や品質上の問題を検出できます.

CodeQLで脆弱性診断を実施する方法は,大きく次の2通りあります.
ただし,いずれの場合においても利用条件・ライセンスがあるため,GitHubの公式ページで必ず確認しておきましょう.

  • GitHub Actionsに組み込んでCIで自動実行する方法
  • CodeQL CLIを利用してローカル環境で実行する方法

本記事では,それぞれの方法を紹介します.

スポンサーリンク
スポンサーリンク

GitHub ActionsとCodeQL CLIの違い

項目GitHub ActionsCodeQL CLI
導入の容易さ
ローカルプロジェクトの解析×〇(ライセンス条件あり)
CIへの組み込み
実行環境GitHub Actionsローカル

 GitHub Actions版は設定が簡単で,リポジトリへコードをPushするだけで自動解析できます.
GitHub ActionsによるCodeQL解析は,利用可能なGitHubプラン・リポジトリ設定に依存します.プランや設定によっては,GitHub ActionsによるCodeQL解析を実行できない場合があります.

ただし,CodeQL CLIにはライセンスがあります.オープンソースソフトウェア(OSI承認ライセンス)の解析や学術研究,デモ,GitHub Code Scanning対象外の用途など,利用条件を事前に確認してください.

CodeQL CLI は、パブリック リポジトリ上で無料で使うことができます。 CodeQL CLI は、GitHub Team または GitHub Enterprise Cloud を使い、GitHub Code Security のライセンスを持っている organization によって所有されるプライベート リポジトリでも使用できます。 詳しくは、「GitHub CodeQL の使用条件」と「CodeQL CLI」をご覧ください。

https://docs.github.com/ja/code-security/concepts/code-scanning/codeql/codeql-cli

 

スポンサーリンク

GitHub ActionsでCodeQLを利用する方法

1)GitHubで対象リポジトリを開きます.
2)Security(または Security and quality)タブを開き,Set up code scanning をクリックします.
3)続いて,CodeQL AnalysisSet up をクリックします.
  通常は Default を選択すれば、推奨設定が自動で適用されます.

4)設定をコミットすると,GitHub ActionsによってCodeQLが実行されます.
5)解析結果は Security and quality → View alerts から確認できます.

スポンサーリンク

CodeQL CLIでローカル解析する方法

 まずは,CodeQL CLIをローカルで使用できる(「codeql」コマンドを実行できる)ように,環境構築を行う必要があります.

CodeQL CLIの環境構築

 まずは,https://github.com/github/codeql-cli-binaries/releases/ から実行ファイルをダウンロードします.
例えば,Windowsの場合は「codeql-win64.zip」をダウンロードし,zipファイルを任意の場所で展開(解凍)します.

続いて,「codeql」や「codeql.exe」が存在するディレクトリのパス
(例:C\Users\UserName\Downloads\codeql-win64\codeql)をシステムの環境変数に追加します.

PowerShellやコマンドプロンプト等で以下のコマンドを実行し,CodeQLのバージョン情報が表示されたら,環境構築は成功です.

codeql --version

CodeQL command-line toolchain release 2.25.6.
Copyright (C) 2019-2026 GitHub, Inc.

ローカル解析の実行

 ローカル解析(SAST)の実行前に,クエリパックを入手または作成しておく必要があります.
今回は,既存のクエリパックを入手する方法をご紹介します.

クエリパックの入手

 以下のコマンドを実行し,クエリパックをダウンロードします.今回は,一例としてJavaScript,Pythonのクエリパックをダウンロードするコマンドをご紹介しています.
解析対象プロジェクトの記述言語に合わせて適宜ダウンロードしてください.

// JavaScript
codeql pack download codeql/javascript-queries

// Python
codeql pack download codeql/python-queries

データベースの作成

 CodeQLでは,ソースコードを直接解析するのではなく,ソースコードをもとに作成されたデータベースを解析対象としています.
従って,下準備としてソースコードのデータベースを事前に作成しておく必要があります.

ここでは,Next.jsやDjangoプロジェクトを例にデータベースを作成するコマンドをご紹介します.

// Next.js
codeql database create nextjs-db --language=javascript-typescript --source-root . --command "npm install; npm run build"

// Django
codeql database create django-db --language=python --source-root .

SASTの実行

 ここまできたら,いよいよ下準備は完了です.ここからは実際にSASTを実行していきます.

今回は,診断結果をCSVにエクスポートするオプションを付けて実行するコマンドをご紹介します.

// Next.js
codeql database analyze nextjs-db codeql/javascript-queries --format=csv --output results-nextjs.csv

// Django
codeql database analyze django-db codeql/python-queries --format=csv --output results-django.csv

 以上で下準備~SAST実行までの流れは完了です.エクスポートされたCSVを確認しましょう.

スポンサーリンク

注意点

 SASTの特性上,一定程度の偽陰性・偽陽性(過検知)が発生することがあります.言うまでもありませんが,「SASTを実行して満足」ではなく,「実行結果をいかにして解析・分析していくか」がカギになります.

今回ご紹介した方法自体は,比較的誰でも簡単に実行できますが,実行結果の分析には相応の知識と技術が必要になります.
また,セオリー的に1つの診断方法に依存するのは望ましくありません.近年は,DAST(動的診断)やビジネスロジックに着目した人間・AIエージェントによるコードレビューなど複数のレイヤーを組み合わせて診断する方法が推奨されています.

また,技術スタックによっては追加で別のクエリを入手したり,自前でクエリを記述したりする必要があります.(標準クエリでは検出対象となっていない脆弱性や,独自ルールで検出したい脆弱性(例:NoSQLインジェクション)を解析対象にしたい場合など)

スポンサーリンク
スポンサーリンク
Web開発セキュリティ
シェアする
しばをフォローする
タイトルとURLをコピーしました