ソフトウェア脆弱性検出の革新的アプローチ
新しい方法は、ソフトウェアの脆弱性特定を改善するために異常検知を使う。
Weizhou Wang, Eric Liu, Xiangyu Guo, David Lie
― 1 分で読む
ソフトウェアの脆弱性検出はアプリケーションを安全に保つために重要だよね。脆弱性を見つけるための多くのツールは、教師あり学習っていう方法に頼ってる。この方法は、システムに何を探すか教えるために大量のラベル付きトレーニングデータが必要なんだけど、実際には十分なラベル付きデータが手に入らないことが多くて、これがツールがうまく機能するのを難しくしてるんだ。
最近、GPT-4みたいな大規模言語モデル(LLMS)が注目を集めてる。これらのモデルはコードを生成したりプログラミング言語を理解したりできるけど、脆弱性を特定するのはあまり得意じゃない。実際のコードの脆弱性を予測するように頼んでも、ランダムに予測するよりも少しマシな程度なんだ。この研究では、ラベル付きトレーニングデータを必要とせず、コードの異常を探すという新しいアプローチを提案するよ。
コード内の異常検出
このアプローチのアイデアは、ほとんどのコードには脆弱性がないってこと。LLMsが大量のコードでトレーニングされると、正常なコードがどういうものかを学ぶんだ。だから、この基準から大きく外れたコードに出くわした場合、それは潜在的に脆弱であるとマークできる。この方法なら、明示的なラベル付けなしで脆弱性を特定できるよ。
脆弱性検出を異常検出の問題として扱うことで、LLMsの強みを効果的に活用できる。LLMsにコードを再構築するように促し、脆弱な行と脆弱でない行を比較することで、ソフトウェアの脆弱性を行単位で見つけるツールを作成する。この問題に対する新しい視点を提供するよ。
現在の方法の制限
従来の教師ありメソッドで脆弱性を検出するにはいくつかの問題があるんだ。ラベル付きデータが必要なのは大きな障害だよね。コードから関連する特徴を選んだり、トレーニング用の合成脆弱性を生成する試みもあったけど、結果は限られたものだった。この理由は、合成データが実際のコードに見られる脆弱性の多様性を反映できないからなんだ。
LLMsは大量のデータセットからラベル付きの例なしで学べるから強力なんだ。でも、脆弱性を検出しようとすると、この強みが逆に弱点になることがある。なぜなら、モデルは実際の欠陥が含まれる部分がほんのわずかしかない不均衡なデータセットから学ぶことになるから。一般的なバグパターンを特定しようとする代わりに、モデルが「正常」と学んだコードから逸脱したときに現れる異常に焦点を当てることを提案するよ。
以前の研究
過去の研究では、ソフトウェアの欠陥を異常として扱うことができるという提案があった。一部の研究では、バグのあるコードと正しいコードの違いを特定するために統計分析が使われた。しかし、これらの従来のモデルは現代のLLMsの高度な機能を欠いていることが多い。最近のLLM技術の進展により、これらのモデルはコード内の異常をより良く検出できると考えている。
既存のツールはラベル付きデータや単純な距離測定に大きく依存しているけど、私たちの方法はもっとニュアンスのあるアプローチを取る。生成されたコード全体を見て、それが元のコードとどのように比較されるかを考える。より洗練されたスコアリングシステムを使うことで、異常をより正確に検出できるんだ。
方法論
私たちの提案するシステムは、コードの行をマスクして、その周囲のコンテキストに基づいてLLMに何があるべきかを生成するように頼むことで機能する。モデルが予測を生成した後、実際のコードと比較する。モデルの出力が大きく異なる場合、その行は潜在的に脆弱性を含むとスコアリングするよ。
マスクされたコード再構築
私たちの方法の最初のステップは、コードの行をマスクして、LLMに周辺コンテキストを使って再構築させること。これにより、モデルが正しいコードの行をどれだけうまく予測できるかを評価できる。モデルの出力と実際のコードの違いに基づいて異常スコアを計算することで、そのマスクされた行が脆弱性を含んでいる可能性を判断する。
コンテキスト選択
モデルが使用する適切なコンテキストを選ぶことは重要だよね。マスクされた行の前後に固定された数の行を使うこともできるし、分析中の行の周りの最大の複合文を適応的に選ぶこともできる。後者のオプションは、関連するすべてのコンテキストを提供しつつ、モデルに余分なコード行で圧倒されることがないから、より効果的だ。
異常スコアリング
行がどれだけ異常かを定量化するために、いくつかのスコアリング方法を使う。最初のオプションは、モデルの予測と実際の行との間のクロスエントロピー損失を見てみる。損失が低いほど、モデルが期待されていたものに近い何かを生成したことを示す。また、モデルの出力と実際の行が完全に一致するかどうかをチェックするオプションもある。これらのスコアを組み合わせることで、その行が脆弱である可能性を判断できる。
実験
私たちのアプローチを評価するために、いくつかの実験を行った。異なるスコアリング方法が脆弱性検出能力に与える影響、モデルのサイズによるパフォーマンスの違い、固定サイズに対して適応的なコンテキストサイズを使用することで結果が向上するかどうかに焦点を当てた。また、私たちの方法と他の最新の脆弱性検出ツールを比較した。
データセットの説明
私たちは、さまざまなオープンソースプロジェクトからの実際の脆弱性を含むMagmaデータセットを使用した。このデータセットは、各脆弱性に対してその正当性を保証する証拠が付随しているため、信頼性のあるラベリングがされている。他のデータセットは誤ったラベルの脆弱性が含まれている可能性があるので、私たちの結果はより信頼できるものになる。
結果の概要
私たちの調査結果は、異常に基づくアプローチが従来の脆弱性検出器よりもいくつかの重要な分野で優れていることを示している。例えば、ラベル付きトレーニングデータなしでも、検出能力を測る指標で大幅な改善を達成した。この結果は、未見の脆弱性で評価された場合でも維持されており、私たちの方法の一般化可能性を確認している。
データ漏洩への対処
考慮した重要な側面の一つは、データ漏洩の可能性だった。これはLLMが私たちがテストしている脆弱性を以前に見た場合に発生する可能性がある。リスクを軽減するために、モデルが未見の脆弱性のデータセットを作成した。私たちの結果は依然として強力で、この方法がデータ露出に関係なく機能することを裏付けている。
貢献
まとめると、私たちはこの研究でいくつかの貢献をした:
異常に基づく検出方法:ラベル付きトレーニングデータなしで既存のLLMsを使用した新しい脆弱性検出アプローチを提案した。
コンテキスト選択技術:コンテキストサイズ選択の分析は、最大の複合文を使用することでLLMにとってより関連性のある背景が提供されることを示している。
改善された異常スコアリング:異なる指標を組み合わせてコードの異常をより正確に特定するためのハイブリッドスコア関数を開発した。
優れたパフォーマンス:私たちのツールは、脆弱性を評価する際に既存の教師ありメソッドを一貫して上回り、より良い精度と検出率を達成した。
オープンソースの利用可能性:私たちは自分たちのコードとデータセットを公開して、さらなる研究と発見の検証を促進する予定だ。
結論
結論として、私たちの研究はソフトウェアの脆弱性特定に異常検出を使う可能性を強調している。問題を再定義し、LLMsの強みを活用することで、ラベル付きデータセットに依存せずに効果的な結果を達成できる。これにより、脆弱性検出における未来の研究の新しい道が開かれる。私たちは、この方法のさらなる探求と適応を奨励して、さまざまなコンテキストでのソフトウェアセキュリティの向上を続けてほしい。
タイトル: ANVIL: Anomaly-based Vulnerability Identification without Labelled Training Data
概要: Supervised learning-based software vulnerability detectors often fall short due to the inadequate availability of labelled training data. In contrast, Large Language Models (LLMs) such as GPT-4, are not trained on labelled data, but when prompted to detect vulnerabilities, LLM prediction accuracy is only marginally better than random guessing. In this paper, we explore a different approach by reframing vulnerability detection as one of anomaly detection. Since the vast majority of code does not contain vulnerabilities and LLMs are trained on massive amounts of such code, vulnerable code can be viewed as an anomaly from the LLM's predicted code distribution, freeing the model from the need for labelled data to provide a learnable representation of vulnerable code. Leveraging this perspective, we demonstrate that LLMs trained for code generation exhibit a significant gap in prediction accuracy when prompted to reconstruct vulnerable versus non-vulnerable code. Using this insight, we implement ANVIL, a detector that identifies software vulnerabilities at line-level granularity. Our experiments explore the discriminating power of different anomaly scoring methods, as well as the sensitivity of ANVIL to context size. We also study the effectiveness of ANVIL on various LLM families, and conduct leakage experiments on vulnerabilities that were discovered after the knowledge cutoff of our evaluated LLMs. On a collection of vulnerabilities from the Magma benchmark, ANVIL outperforms state-of-the-art line-level vulnerability detectors, LineVul and LineVD, which have been trained with labelled data, despite ANVIL having never been trained with labelled vulnerabilities. Specifically, our approach achieves $1.62\times$ to $2.18\times$ better Top-5 accuracies and $1.02\times$ to $1.29\times$ times better ROC scores on line-level vulnerability detection tasks.
著者: Weizhou Wang, Eric Liu, Xiangyu Guo, David Lie
最終更新: 2024-08-27 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2408.16028
ソースPDF: https://arxiv.org/pdf/2408.16028
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。