
拓海さん、最近うちの若手がSASTツールの結果を見せてきて、「これAIで自動判定できますよ」と言うんですが、警告の多さに正直戸惑っています。こういう論文があると聞きましたが、要するに何が変わるんでしょうか。

素晴らしい着眼点ですね!今回の研究は、SAST(Static Application Security Testing、静的アプリケーションセキュリティ検査)ツールが出す「誤検知(false positive)」を、LLM(Large Language Model、大規模言語モデル)に正しく判断させるために、まずは「どのコードを見せるか」を徹底して正す、というものですよ。

なるほど。うちで言えば、現場のソースコードの一部だけ見て「要修正」と出されることが多い。これって要するに、見せる「情報不足」と「余計な情報」が判断を狂わせているということですか?

その通りです。大丈夫、一緒に整理しましょう。要点は三つです。まず、正確なコードの流れ(control/data flow)だけを抜き出すこと。次に、グローバル変数や他ファイルの関数など、判断に必要な補助情報を漏らさず含めること。最後に、その精緻化した情報をLLMに与えて自動判定させることで、誤検知を大幅に減らせるという点です。

実務で言うと、誰が何を検査しているか分散しているような現場で、全部を見せずに誤った結論を出される感じですか。効率が落ちるし、人に確認させるコストもかさみますね。

まさしくその通りです。今回のフレームワークはeCPG-Slicer(extended Code Property Graphスライサー)という道具で、コードの依存関係を広くきちんとたどるため、見なければならない箇所を正確かつ完全に抽出できるんです。これにより、LLMは無駄な情報に惑わされずに判断できるようになるんですよ。

それは興味深い。導入コストや作業時間はどれくらい増えるものですか。投資対効果で見ないと手を出せません。

良い質問ですね。論文ではFARF(ファイル依存解析アルゴリズム)を組み合わせ、対象ファイルの依存関係を効率的に解析しているため、抽出コストは限定的であると報告されています。要するに、完全性を高める代わりに全部を読み直すような膨大な負荷は避けつつ、人的レビューを減らせる設計になっているんです。

ただ、同じ警告コードでも文脈が違えば結果は変わる、と聞きましたが、その点はどうでしょうか。これって要するに、ツールがどの文脈を参照するかで判断が変わるということですか?

はい、その点は正直なところまだ課題です。現実のプロジェクトでは同じ警告コードが複数の文脈で出現することがあり、SASTがどの文脈を指すか明記しない場合は、当該フレームワークも関連する多数の文脈を抽出するしかありません。とはいえ、この方法でも誤検知の割合は下がり、現場のレビュー負荷は相当に削減できる結果が示されていますよ。

わかりました。これなら現場の無駄工数を減らせる期待は持てそうです。自分の言葉で言うと、要は「必要なコードだけを正しく見せて、AIに余計な推測をさせないようにすることで誤検知を減らす」ということですね。
結論
本稿で取り上げる研究は、SAST(Static Application Security Testing、静的アプリケーションセキュリティ検査)が生成する誤検知(false positive)を減らすために、LLM(Large Language Model、大規模言語モデル)へ与えるコードコンテキストを「正確(precise)」かつ「完全(complete)」に抽出するフレームワークを提示している点で大きく進歩した。結論を先に述べると、精緻化されたコードコンテキストを用いることで、LLMの判断精度が向上し、人的レビューコストが実務的に低減できることが示された。これは単なるモデル改良ではなく、プログラム解析とLLMの協調による工程改善を意味する。経営的にはツールの「ノイズ」を減らし、開発リソースを脆弱性対応へ集中させるインパクトが期待できる。導入に際しては初期解析コストと運用ルールの設計が鍵となる。
1. 概要と位置づけ
SAST(Static Application Security Testing、静的アプリケーションセキュリティ検査)は、ソフトウェア開発工程の早期段階で脆弱性を検出し品質を高めるための重要な手段である。だが一方で、多数の誤検知(false positive)を生むため、現場での手作業による確認コストが発生し効率を低下させる問題がある。近年はLLM(Large Language Model、大規模言語モデル)を用いて自動的に誤検知を判定する試みが増えたが、これらは与えるコードの「どの部分をどう見せるか」に敏感であり、適切なコンテキストの設計が欠かせない。対象研究はこのギャップに着目し、プログラム解析に基づくeCPG-SlicerとFARFアルゴリズムを組み合わせることで、LLMに与える情報を精密に整備するアプローチを提示している。本研究はソフトウェア解析技術と生成系AIの実務的統合を目指す点で、単なるモデル評価を越えた適用可能性を示している。
2. 先行研究との差別化ポイント
従来の手法は静的解析や動的解析、あるいは機械学習モデルの学習に依拠し、ファイルや関数単位での特徴抽出に留まることが多かった。これに対し本研究は、eCPG(extended Code Property Graph、拡張コードプロパティグラフ)に基づいて制御フローとデータフローを横断的に解析し、警告に直接関連するコード部分だけを選別する点が異なる。さらに、FARF(ファイル依存解析アルゴリズム)によって他ファイルへの参照を効率的に追跡し、しばしば欠落するグローバル変数や外部関数定義を含めることで「完全性」を担保している。結果として、LLMに渡す情報が過不足なく整備され、誤検知の原因となる「不適切な入力」が減るのだ。本研究は単なる判定器の改善ではなく、前処理としてのコードコンテキスト設計を主張している点で差別化される。
3. 中核となる技術的要素
技術的には三つの要素が中心である。第一にeCPG-Slicerは、拡張コードプロパティグラフ(eCPG)を用いて変数・関数・制御構造間の関係を詳細にモデル化し、警告と関連性の高い部分をスライスとして抽出する。第二にFARFは、ファイル間依存を効率良く解析するアルゴリズムであり、外部参照やグローバル状態を追跡してコンテキストの完全性を確保する。第三にLLMへのプロンプト設計であり、抽出した精確かつ完全なコードスニペットを与えることでモデルの誤判定を抑制する。これらを組み合わせることで、過剰な情報でモデルを混乱させず、かつ判断に必要な全情報を欠かさないバランスを実現している。実務的には、簡単なルールベースの前処理より高度なプログラム解析を導入している点が要となる。
4. 有効性の検証方法と成果
評価は公的ベンチマークであるJulietデータセットと実際のプロジェクトデータで行われ、誤検知率の低下とレビュー時間の削減が報告されている。具体的には、従来のLLMベース手法に比べて誤検知の割合が有意に減少し、人的レビューの必要度が下がった点が示された。加えて、FARFによる依存解析のオーバーヘッドは限定的であり、運用コストの増大を最小限に抑えることに成功している。とはいえ、同一の警告コードが複数の文脈で出現する場合の扱いなど、未解決の課題も提示されている。総じて、現場適用に耐えうる有効性を示したが、導入時の運用ルール設計が重要である。
5. 研究を巡る議論と課題
議論としては三点ある。第一に、SASTの警告が文脈依存であることから、元の警告がどの箇所を指すか不明確な場合、抽出が過剰になり判断がぶれる恐れがある点である。第二に、完全性を追求すると解析対象が広がり、実行時間やリソースの問題が生じ得る点だ。第三に、LLM自体の解釈性やバイアスが残るため、完全自動化の安全性には注意が必要である。これらを踏まえ、実務では「人のチェックを完全に廃止する」のではなく、「人が判断すべき箇所を減らす」合意形成が現実的だ。結論として、技術的前提と運用ルールを整備することが成果実現の鍵である。
6. 今後の調査・学習の方向性
今後は複数文脈にまたがる同一警告の精緻な判別手法や、依存解析のさらなる効率化、そしてLLMの説明可能性(explainability)を高める研究が必要だ。具体的には、ファイル単位ではなく関数や変数単位での依存追跡を実運用で低コストに行う手法や、LLMが下した判断の根拠を可視化するプロンプト設計の開発が期待される。また、産業界での実証事例を蓄積し、導入時のROI(投資対効果)を明確化することも重要である。長期的には、プログラム解析と学習型モデルの組み合わせがソフトウェア品質管理の標準的な工程になり得るだろう。研究者と実務者が協働して適用条件を整理することが次のステップである。
検索に使える英語キーワード
Utilizing Precise and Complete Code Context; LLM for False Positive Mitigation; eCPG-Slicer; FARF file dependency analysis; SAST false positive reduction; Juliet dataset evaluation
会議で使えるフレーズ集
「今回の方針は、SASTのノイズを減らしてレビュー工数を主要業務に振り向けることを目的としています。」
「導入は段階的に行い、まずは主要モジュールでパイロット運用を実施しましょう。」
「我々に必要なのはモデルの魔法ではなく、どの情報を与えるかという前処理の設計です。」


