セキュリティ観点はAIに任せられるか?SASTツールとの棲み分け
はじめに
「セキュリティのレビューもAIに任せられるのでは?」という声を聞く機会が増えてきました。
確かにChatGPTやCodeWhisperer、CodeQLのようなツールが示す指摘は有用ですが、すべてをAIに任せきって良いのかという点については慎重に考える必要があります。
この記事では、セキュリティレビューにおけるAIの役割と限界を、静的解析ツール(SAST)との比較を軸に、レビューアー視点で検討していきます。
セキュリティレビューの2つの系統
コードセキュリティのレビューには、大きく以下の2系統があります:
- 構文・構造的な脆弱性の検出(バッファオーバーフロー、SQLインジェクションなど)
- 業務・設計レベルでのセキュリティ要件の検証(アクセス制御の妥当性、ロール管理など)
このうち、前者はSAST(Static Application Security Testing)ツールやAIレビューでも検出可能な領域が多く存在します。一方、後者は文脈依存性が強く、現時点でAIが網羅的に検出することは困難です。
SAST(Static Application Security Testing)とは、ソースコードを実行せずに解析し、セキュリティ上の問題を静的に検出する手法。
代表的なツールには SonarQube、Fortify、CodeQL などがあります。
AIとSASTのカバー領域の比較
以下の表は、セキュリティ観点でのAIとSASTのカバー領域を比較したものです。
検出項目 | SASTツール | AIレビュー | 人間のレビュー |
---|---|---|---|
SQLインジェクション | ◎ | ○(例示的) | ○(設計補助) |
XSS(クロスサイトスクリプティング) | ◎ | ○ | ○ |
コマンドインジェクション | ◎ | △ | ○ |
ハードコーディングされた秘密鍵 | ○ | △ | ◎ |
アクセス制御の妥当性 | × | △ | ◎ |
ロールベース認可 | × | × | ◎ |
このように、構文・構造レベルではSASTが強く、文脈理解では人間に依存することが見えてきます。AIはその中間に位置し、静的なルールベースにない「指摘のヒント」や「補足」を与える存在といえます。
SASTでは見つからない問題をAIは検出できるか?
結論から言えば、「ケースによるが、過信はできない」です。
例:ハードコーディングされたAPIキー
const API_KEY = "sk_test_abc123xyz";
fetch("https://api.example.com", {
headers: { Authorization: `Bearer ${API_KEY}` }
});
@Reviewer: 一部のSASTではこのようなハードコーディングされたキーを検出できない構成もあります。レビュー時は明示的にスキャン対象外の文字列構成を確認してください。
ChatGPTなどのAIは、プレーンな文字列に対しても学習的に「これはキーっぽい」と判断し指摘することがあります。一方で、文字列が分割されていたり変数化されている場合、見落とすケースもあります。
例:ロール管理の抜け漏れ
function deleteUser(userId) {
db.users.delete({ id: userId });
}
@Reviewer: 管理者権限のチェックが存在しません。意図的な処理であれば、その旨をコードコメントに明記してください。全削除可能なロジックにはアクセス制御の明示が必要です。
このような「設計レベルの意図に基づくロジックチェック」は、AIでは指摘が困難です。AIにできるのは、せいぜい「deleteUser
という関数名に対して注意喚起を行う」程度です。
AIが誤検出するケース:SASTにはないリスク
AIによるレビューでは、「指摘すべきでない箇所にコメントが付く」ケースも少なくありません。
例:形式上は危険に見えるが安全な処理
const safeEval = new Function("return 42;");
safeEval();
AIは Function
コンストラクタの使用を見て「evalと同等」と判定しがちですが、文脈によっては問題ないケースもあります。
SASTツールであれば、ベースラインルールに基づいて、リスクレベルを分類し出力しますが、AIは推論的に過剰反応することがあります。
AIレビューでは「正しいのに誤って指摘される」パターンをレビューアーが手動で切り分ける必要があることに注意してください。
棲み分け方針:AIは“補助的に使う”前提が現実的
1. SASTは前提として実行する
- セキュリティレビューにSASTは不可欠です。
- 主要言語・主要フレームワークに対応したSASTは、ルールベースの安心感を与えます。
2. AIはレビューアー補助として“指摘の足がかり”に使う
- 疑わしいロジックやキーワードに対して、セキュリティ観点の気づきを与える道具とみなすのが適切です。
- 「全自動で任せる」使い方は非現実的です。
3. 人間によるセキュリティポリシー準拠の確認は必須
- アクセス権、データフロー、インフラ連携などは、プロジェクトのセキュリティ要件に強く依存します。
- AIはそこまでの設計背景を理解しないため、チェックリストや設計書との突合が欠かせません。
棲み分けモデル図
まとめ:AIはセキュリティレビューを“任せるもの”ではない
AIによるレビューはセキュリティ観点における補助にはなり得るが、それだけで信頼するのはリスクを伴います。
レビューアーは以下の観点で棲み分けを意識することが求められます:
- SASTツールによる網羅的チェックを前提とする
- AIは“補助的なヒント装置”として使う
- セキュリティポリシーと設計意図は人間が確認する
レビューアーの役割は、AIやツールが提供するアウトプットを鵜呑みにするのではなく、設計背景・業務要件と照らし合わせて、判断の軸を持つことにあります。
この前提を忘れずに、AIレビューをうまく活用する立場で取り組むことが重要です。