この論文は、大規模言語モデルが セキュリティコードレビュー をどの程度支援できるかを研究しており、それ以前の多くの研究で用いられてきた脆弱/非脆弱の二値判定ではなく、各セキュリティ欠陥の行番号、種類、説明、修正案という細粒度の出力を求めている。データセットは OpenStack Nova と Neutron、Qt Base と Creator から集めた 534 件のコードファイル(Python 258 件、C/C++ 276 件)で、それぞれにファイルのソースコード、そのパッチセットのコミットメッセージ、そしてコードレビューで人間のレビュアーが特定したセキュリティ欠陥が付随している。7 つの LLM — ChatGPT 経由と API 経由の GPT-4、GPT-4 Turbo、Gemini Pro、Llama 2 の 7B と 70B、DeepSeek-R1 — が、5 つのプロンプトテンプレート(基本プロンプト、プロジェクト情報の追加、CWE に関する一般的な指示、第 1 レベルの CWE の具体的なリスト、そしてまずコミットメッセージからコードのコンテキストを生成する 2 段階の Chain-of-Thought プロンプト)に加え、DeepSeek-R1 向けに、生成したコンテキストを用いずにコミットメッセージと段階的な指示を残したガードレール版のプロンプトのもとで評価され、静的解析ツールと比較された。応答は Instrumental、Helpful、Misleading、Uncertain のいずれかとして人手で評価され、各実験は 3 回繰り返された。
最も優れた 2 つのモデルとそれぞれの最良のプロンプトについて、著者らは応答中の品質上の問題をコーディングしてハルシネーションの分類体系に対応付け、さらに累積リンク回帰モデルを当てはめて、トークン数、欠陥の位置、ファイルの種類、コードの複雑度、アノテーションなど 11 の要因のうちどれが検出に影響するかを検証した。
要点
- LLM は、検証した静的解析ツール(Python では SonarQube、CodeQL、Bandit、Semgrep、C/C++ では CppCheck と Semgrep)を有意に上回った。推論に最適化されたモデルは汎用モデルを上回った。
- 最も優れていたのは DeepSeek-R1 で、ChatGPT 経由の GPT-4 がそれに続いた。データセット全体では、DeepSeek-R1 はコミットメッセージと Chain-of-Thought の指示を組み合わせたガードレール版のプロンプトで、ChatGPT 経由の GPT-4 は具体的な CWE リストで、それぞれ最良の結果を示した。
- それでも著者らは、現在広く使われている LLM のセキュリティコードレビューにおける能力は限定的であり、既存の汎用 LLM は人手によるセキュリティコードレビューの有効性に大きく及ばないと判断している。
- LLM にコミットメッセージから欠けているコードのコンテキストを生成させると DeepSeek-R1 の性能が低下した。著者らはこれを、実際のコードと矛盾しうる捏造されたコンテキストに起因するとしている。
- ChatGPT 経由の GPT-4 は API 経由の GPT-4 を上回り、より長い出力(平均 454 トークン対 94 トークン)を生成した。著者らは、これが部分的には公開されていないプラットフォーム側の最適化を反映している可能性を示唆している。
- 最も性能の高い 2 つのモデルは、繰り返し実行した際の応答の一貫性が最も低かった。著者らは、これがより多様な経路に沿った推論を反映している可能性を示唆している。
- GPT-4(ChatGPT)の応答の 20.19%、DeepSeek-R1 の応答の 36.45% に少なくとも 1 つのハルシネーションが含まれていた。GPT-4(ChatGPT)は曖昧な記述や指示への追従の不十分さに陥りやすく、DeepSeek-R1 は誤った行番号など不正確なコードの詳細を示すことが多かった(応答の 31.81%)。
- 両モデルとも、トークン数が少ないファイルや、セキュリティ関連のアノテーションを持つファイルでセキュリティ欠陥をよりよく検出した。DeepSeek-R1 では、メモリ関連以外の欠陥タイプについて、サイクロマティック複雑度が高いほど検出が良好であることと関連していた。
注記
著者らは、ファイルを難易度で分類し、LLM が最初のレビューを行い、レビュアーが LLM の指摘を確認または掘り下げるという多層的なレビュー戦略を提案しており、プロンプト中の CWE リストの適切な粒度を調査する必要性も訴えている。妥当性への脅威としては、データセットとモデルの学習データとの重複の可能性、入力としてパッチセット全体ではなく単一のファイルを用いたこと、そして産業界のコードを代表しない可能性がある 4 つのオープンソースプロジェクトからなるデータセットを挙げている。また、DeepSeek-R1 のトークン数と複雑度の効果を含む一部の要因について、統計的検出力が 0.80 を下回っていたことにも言及している。