Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# 暗号とセキュリティ# 機械学習

脆弱性検出における機械学習の再評価

ソフトウェアの脆弱性を特定するための機械学習におけるコンテキストの検討。

Niklas Risse, Marcel Böhme

― 1 分で読む


ソフトウェアセキュリティのソフトウェアセキュリティのためのML再評価ストが重要なんだ。脆弱性検出において、機械学習ではコンテキ
目次

最近、ソフトウェアのセキュリティの欠陥を見つけるために機械学習を使うことが人気になってきてるね。多くの研究者が「脆弱性検出のための機械学習(ML4VD)」に注目しているんだ。このアプローチの主なアイデアは、コード内の関数を見て、その関数にセキュリティの脆弱性があるかどうかを判断することだよ。

でも、こういった技術の評価に関してはかなりの懸念があるんだ。ほとんどの研究は、この問題を単純な質問として扱っていて、「関数にはセキュリティの欠陥があるのか、ないのか?」ってね。このアプローチは、もっと複雑な問題を簡単にしすぎているんだ。この記事では、現在のML4VDの方法にあるいくつかの重要な限界を明らかにしたいと思う。

現在の定義の問題

過去5年間で、多くの論文がML4VDを単純に二項分類問題として定義してきた。この意味は、研究者がコードの関数を見て、それが安全かどうかを決めるってこと。この判断は、コードの周囲のコンテキストを考慮せずにされることが多いから、問題が生じる。

例えば、セキュリティパッチに関わった関数は脆弱性があるとラベル付けされるかもしれないし、逆に知られているセキュリティの問題に関連していない関数は脆弱性がないと判断されるかもしれない。でも、この分類は、関数の安全性がアプリケーション内でどのように呼ばれ、使われるかによって大きく左右されることを考慮していないんだ。

コンテキスト依存の脆弱性

この問題を調べた結果の重要な洞察は、多くの関数はそのコンテキストを理解しないと脆弱性を評価できないということ。つまり、ある関数は安全に見えても、特定の状況では脆弱であるかもしれない。例えば、予期していない入力が渡されたら、関数が壊れることもあるけど、適切なアプリケーションではその入力で呼ばれることはないかもしれない。

簡単な例で説明すると、割り算を行うために設計された関数を考えてみて。もし実行中にゼロを除数として呼び出されたら、クラッシュしてしまうよ。でも、周囲のコードがそのケースを適切にチェックしていれば、この関数は実際には脆弱ではない。

分析の結果、脆弱性があるとされる関数の90%以上は、その安全性を正確に判断するために追加のコンテキストが必要であることがわかった。これは、関数レベルの分類に基づいた結果が現実を反映していない可能性があることを示している。

現在の技術が誤解を招く理由

限界があるにもかかわらず、多くの研究者は脆弱性を検出するモデルの高い精度を報告している。これは、評価に使われるデータセットに虚偽の相関が存在するからだ。

虚偽の相関は、機械学習モデルがデータ内の問題を示していない関係を見つけ出すときに起こる。例えば、コードスニペットの単語数だけで訓練された単純なモデルでも、実際にはコードの構造や潜在的な脆弱性を考慮せずに、高い精度を達成できた。

これは、多くのML4VD技術が、実際にコードの脆弱性を効果的に検出するのではなく、誤解を招く相関を利用している可能性があることを示唆している。

研究方法論

現行の方法の欠陥をさらに調査するために、過去5年間に主要なソフトウェア工学の会議で発表された論文について体系的なレビューが行われた。このレビューは、さまざまな研究でML4VDがどのように定義されているかを分析し、研究者が技術を評価するために使用しているデータセットを調べることを目的としている。

分析には、脆弱性検出のための機械学習技術に焦点を当てた論文のみが含まれた。さまざまなデータセットが特定され、特に3つのデータセット(BigVul、Devign、DiverseVul)が多くの研究で広く使われていることがわかった。

多くの研究者がこれらのデータセットを使用している一方で、二項分類アプローチが標準になってしまっていて、あまりコンテキストが考慮されていないことが明らかになった。

データセットの検証

これらのデータセットをレビューしていくうちに、多くの脆弱性があるとされる関数が実際には不正確にラベル付けされていることが明らかになった。実際、いくつかの研究では、脆弱性があると思われていた関数のかなりの割合が実際にはそうではないことが示された。例えば、特定のデータセットで脆弱性があるとマークされた関数の38%から64%が、手動分析後に安全だと判明した。

これらの不正確さの原因はさまざまだ。データ収集中にセキュリティの問題を特定する際のエラーが、関数が不正確にラベル付けされる原因となった。例えば、一部のデータセットはセキュリティに関連するキーワードを含むコミットメッセージをフィルタリングすることに依存していて、容易に誤検出が発生する可能性がある。他にも、パッチ適用中の構造的変更が、いくつかの関数を脆弱であるかのように誤って示すこともある。

コンテキスト依存の脆弱性の詳細

コンテキスト依存の脆弱性は広く存在する問題であることがわかった。分析では、300の関数を徹底的にレビューした結果、すべての脆弱性は追加のコンテキストなしでは正確に特定できないことがわかった。つまり、研究で評価されたすべての脆弱性はコンテキスト依存であり、意思決定プロセスはこの重要な要因を考慮していなかった。

関数は、さまざまな外部要素に依存することが多い。例えば:

  1. 外部関数への依存:多くの関数は他の関数に依存して動作する。もしその外部関数に脆弱性があれば、分析中の関数の安全性にも影響が出る。

  2. 関数引数への依存:関数が受け取る入力によって、その脆弱性が決まることもある。引数が適切に処理されていないと、セキュリティリスクが生じる。

  3. 型宣言への依存:変数の宣言の仕方が、関数の安全性や脆弱性に影響を与えることがある。

  4. グローバル変数への依存:関数はグローバル変数に依存することもあるが、これらのグローバルを適切に管理しないと脆弱性が生じる可能性がある。

  5. 実行環境への依存:関数が実行されるコンテキストは、関数だけを見たときには分からない脆弱性を引き起こすことがある。

安全な関数への影響

面白いことに、研究では安全だとラベル付けされた多くの関数が、適切なコンテキストがあれば脆弱であることがわかった。別の分析では、90の安全と見なされた関数のうち、82の関数が脆弱性を示すシナリオに構築できることが示された。これにより、関数を孤立して安全性を判断するのは誤解を招くことであり、コンテキストが真のセキュリティの欠陥を特定する上で重要な役割を果たすことが示唆された。

今後の研究への示唆

この分析からの発見は、ML4VDのアプローチに変化が必要であることを示唆している。開発される技術が脆弱性を正確に特定するためには、評価プロセスが進化してコンテキストに配慮する必要がある。

  1. 二項分類を超える:研究者は、単に関数の二項分類に依存しない脆弱性検出の評価方法を考慮すべきだ。コンテキストが不十分な場合に判断を保留するメカニズムを導入することで、精度が向上するかもしれない。

  2. コンテキスト条件付き分類:関数を孤立して評価するのではなく、リポジトリの状態や外部依存関係など、すべての必要なコンテキストを考慮するように技術を進化させるべきだ。

  3. 大きなコンテキストの考慮:今後の研究では、ファイルレベルやモジュールレベルの分析を取り入れて、ML4VDをより大きなスケールで評価することを検討すべきだ。ただし、これらの広いカテゴリに関連する潜在的な落とし穴に注意する必要がある。

  4. 新しい指標の開発:従来の精度を主要な指標とするのではなく、これらの検出技術の効果をよりよく反映するために、精度や再現率などの幅広い指標を導入すべきだ。

  5. 虚偽の特徴への対応:データセット内の虚偽の相関を特定し、排除することが重要だ。モデルが誤解を招くパターンに単に頼ることがないような技術を実施する必要がある。

結論

脆弱性検出のための機械学習技術の評価は、大きな課題に直面している。コンテキストを考慮せずに二項分類に依存することは、これらの技術の真の効果を誤って表現することにつながる。

包括的なレビューと実証研究を通じて、多くの関数の脆弱性がコンテキスト依存であることが明らかになった。そのため、ML4VDの評価方法は変わるべきだ。よりコンテキストを意識したアプローチを取り入れ、現在の方法の限界に対処することで、ソフトウェア内のセキュリティの欠陥を特定するための、より信頼性が高く効果的なメカニズムを作成することができる。

最終的には、ソフトウェアの安全性を確保するためには、機械学習が実際のコーディング環境の複雑さに応じてどのように適応できるかを注意深く検討する必要がある。そうすれば、私たちの日常生活に欠かせないソフトウェアシステムのセキュリティを向上させることができるかもしれない。

オリジナルソース

タイトル: Top Score on the Wrong Exam: On Benchmarking in Machine Learning for Vulnerability Detection

概要: According to our survey of the machine learning for vulnerability detection (ML4VD) literature published in the top Software Engineering conferences, every paper in the past 5 years defines ML4VD as a binary classification problem: Given a function, does it contain a security flaw? In this paper, we ask whether this decision can really be made without further context and study both vulnerable and non-vulnerable functions in the most popular ML4VD datasets. A function is vulnerable if it was involved in a patch of an actual security flaw and confirmed to cause the vulnerability. It is non-vulnerable otherwise. We find that in almost all cases this decision cannot be made without further context. Vulnerable functions are often vulnerable only because a corresponding vulnerability-inducing calling context exists while non-vulnerable functions would often be vulnerable if a corresponding context existed. But why do ML4VD techniques perform so well even though there is demonstrably not enough information in these samples? Spurious correlations: We find that high accuracy can be achieved even when only word counts are available. This shows that these datasets can be exploited to achieve high accuracy without actually detecting any security vulnerabilities. We conclude that the current problem statement of ML4VD is ill-defined and call into question the internal validity of this growing body of work. Constructively, we call for more effective benchmarking methodologies to evaluate the true capabilities of ML4VD, propose alternative problem statements, and examine broader implications for the evaluation of machine learning and programming analysis research.

著者: Niklas Risse, Marcel Böhme

最終更新: 2024-08-23 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2408.12986

ソースPDF: https://arxiv.org/pdf/2408.12986

ライセンス: https://creativecommons.org/licenses/by/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事