Simple Science

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

# コンピューターサイエンス# 暗号とセキュリティ# ソフトウェア工学

ソフトウェアセキュリティのためのファジング技術の進展

新しい方法が入力の関係に焦点を当てて戦略を適応させることでファジングを改善する。

― 0 分で読む


セキュリティ向上のためのフセキュリティ向上のためのファジングの見直しアのバグ発見を強化する。革新的なファジング手法が複雑なソフトウェ
目次

ファジングは、複雑なソフトウェアのセキュリティ問題を見つけるための方法だよ。ランダムまたは少し変更された入力をプログラムに送って、その反応を観察することで動作するんだ。もしプログラムがクラッシュしたり、予期しない動作をしたら、それはバグがあるかもしれないってこと。ファジングはコンパイラから画像処理ツールまで、いろんなソフトウェアアプリケーションで既知のセキュリティ問題を見つけるのに成功しているんだ。

でも、従来のファジング技術にはいくつかの限界がある。例えば、入力にランダムな変更を加えることが多くて、複雑な判断ポイントを持つプログラムにはあまり効果的じゃないことがあるんだ。特定の比較やテストのような判断ポイントは、ファザーがバイパスするのが難しいことがあって、これが多くの潜在的なセキュリティの欠陥を見逃す原因になっちゃうんだ。

ファジングの課題

多くのプログラムには、特定のルールや条件があって、入力がそのルールを満たさないとコードの特定の部分にアクセスできないことがある。例えば、プログラムは特定の値と入力が一致するかをチェックしてから特定の関数を実行することがあるんだ。もしファザーがこれらの条件を満たす入力を生成できないと、バグが存在する可能性があるコードの部分を見逃しちゃう。

新しいファジング技術もいくつか開発されて、これらの複雑なシナリオをファザーが扱えるように改善されている。例えば、一部のツールはトラッキング方法を使って、どの部分の入力が異なるコードのブランチに到達するのに最も重要なのかを特定している。でも、これらの方法の多くはいつも真実であるとは限らない仮定をしているんだ。

新しいファジングアプローチ

既存のファジング技術の問題を解決するために、新しいアプローチが提案された。この方法は、入力とプログラムの決定との関係を理解することと、どれだけのブランチをカバーする必要があるかに基づいてファジングプロセスを適応させるという2つの主要なアイデアに焦点を当てている。

関係の理解

最初の部分は、入力値とプログラムが下す決定との重要なつながりをキャッチできるモデルを作ることだ。これによってファザーは、どの入力変更が新しいコードカバレッジにつながりやすいかを理解できるようになるんだ。

ファジング戦略の適応

2つ目は、プロセス中に学んだことに基づいてファザーの動作を変更することだ。ファザーが実行されるとき、新しいコードエリアに到達するのにどの入力がより効果的かを特定できて、それにもっと焦点を当てることができる。これにより、ファザーはテストされているプログラムについてもっと発見しながら戦略を動的に適応させることができるんだ。

技術的貢献

提案された方法にはいくつかの技術的進歩が含まれている:

  1. 冗長なテストの削減:アプローチには、ファザーが処理する入力の数を最小限に抑える方法が含まれていて、役に立たないものを排除し、役立つものに焦点を当てている。

  2. 機械学習の利用:アプローチは、どの部分の入力が新しいコードのブランチをカバーするのに重要かを特定するために機械学習を使っている。この学習プロセスによって、ファザーは実際の結果に基づいて時間とともに戦略を調整できる。

  3. オープンソースファザー:この方法はオープンソースのファザーに実装されていて、他の人がその進歩を使ったりテストしたりできるようになっている。

ファジングプロセスの概要

ファジングプロセスは、特定のプログラムと初期テスト入力のセットを選ぶことから始まる。これらの入力は変異されて新しいテストケースを生成する。それぞれの新しい入力はプログラムに対してテストされ、ファザーは新しいまたは予期しない動作につながる入力を監視するんだ。

入力の変異

入力の変異プロセスは、元の入力をさまざまな方法で変更することを含む。ビットを反転させたり、新しい値を追加したり、既存の値を変更したりすることがあるんだ。目標は、プログラムのコードの異なるブランチを探索できるような多様な入力セットを作ることだよ。

実行の監視

入力をテストしている間、ファザーはどの部分のコードが実行されているのかを追跡する。この情報は、各入力がバグを見つける効果的かどうかを判断するのに役立つ。もし新しい入力が異なるコードパスを明らかにしたり、クラッシュにつながったら、それがさらなる分析のために記録されるんだ。

ブランチ距離の活用

新しい方法の革新的な側面の一つは「ブランチ距離」の使用だ。この概念は、入力が新しいコードの部分を引き起こすためにどれくらい近いかを測るのに役立つんだ。ファザーはカバーされていないブランチへの距離を理解することで、どの入力をテストするか優先順位をつけられるんだ。

ブランチ距離の計算

ブランチ距離は、現在の入力がプログラムのコードの特定のブランチに到達するために必要な条件を満たすのにどれくらい遠いかに基づいて決定される。新しいブランチをカバーするのに近い入力には、変異フェーズで高い優先順位が与えられる。

重要なバイトに焦点を当てる

ブランチ距離に加えて、アプローチは新しいブランチに到達するのに最も影響力のある入力のどのバイトかも特定する。すべてのバイトを同じように扱うのではなく、ファザーは「ホットバイト」と呼ばれる、新しいコードパスを発見するのに重要なバイトの変更に焦点を当てているんだ。

ホットバイトの予測

機械学習モデルを使ってホットバイトを予測する。成功した変異の例でトレーニングすることで、モデルはさまざまなブランチへの到達に重要なバイトを学ぶ。このターゲットを絞ったアプローチが、より効率的な入力の変異を可能にして、新しいバグを見つける可能性を高めるんだ。

実験結果

提案された方法は、いくつかの有名なファジングツールに対してテストされた。結果は、従来のファジング方法よりもかなり高いコードカバレッジを達成し、より多くのユニークなバグを発見したことを示しているんだ。

エッジカバレッジの評価

評価は、ファザーがどれだけ多くの異なる実行パスを探索できるかに焦点を当てている。新しい方法は、特に複雑な意思決定が関与するアプリケーションにおいて、他のファザーを一貫して上回ったんだ。

バグ発見率

バグの発見に関しては、新しいファザーが数多くの問題を見つけた、以前は知られていなかった脆弱性も含めてね。この成功は、重要な入力の特性に焦点を当てた適応戦略を組み合わせることで効果的であることを示している。

発見の要約

適応型ファジングアプローチは、セキュリティバグを見つけるプロセスを改善するのに効果的であることが証明されている。入力とコードブランチとの関係を理解し、入力の重要な部分に焦点を当てることで、従来のファジング技術の限界をうまく乗り越えているんだ。

今後の方向性

新しい方法はさらに拡張され、洗練される可能性がある。今後の研究では、他のプログラミング言語に同様の戦略を適用したり、パフォーマンスをさらに改善するために追加の機能を統合したりすることが考えられる。オープンソースのファザーの特性がコミュニティの協力や改善を可能にしているんだ。

結論

ファジングは、ソフトウェアの脆弱性に対する戦いにおいて重要なツールであり続けている。よりスマートで適応的な方法を使うことで、この分野は進化を続け、ソフトウェアアプリケーションの安全性とセキュリティを向上させることができるんだ。これからも機械学習とターゲットを絞った変異戦略の統合が、効果的なファジング技術のさらなる発展に重要な役割を果たすだろうね。

オリジナルソース

タイトル: Fuzzing with Quantitative and Adaptive Hot-Bytes Identification

概要: Fuzzing has emerged as a powerful technique for finding security bugs in complicated real-world applications. American fuzzy lop (AFL), a leading fuzzing tool, has demonstrated its powerful bug finding ability through a vast number of reported CVEs. However, its random mutation strategy is unable to generate test inputs that satisfy complicated branching conditions (e.g., magic-byte comparisons, checksum tests, and nested if-statements), which are commonly used in image decoders/encoders, XML parsers, and checksum tools. Existing approaches (such as Steelix and Neuzz) on addressing this problem assume unrealistic assumptions such as we can satisfy the branch condition byte-to-byte or we can identify and focus on the important bytes in the input (called hot-bytes) once and for all. In this work, we propose an approach called \tool~which is designed based on the following principles. First, there is a complicated relation between inputs and branching conditions and thus we need not only an expressive model to capture such relationship but also an informative measure so that we can learn such relationship effectively. Second, different branching conditions demand different hot-bytes and we must adjust our fuzzing strategy adaptively depending on which branches are the current bottleneck. We implement our approach as an open source project and compare its efficiency with other state-of-the-art fuzzers. Our evaluation results on 10 real-world programs and LAVA-M dataset show that \tool~achieves sustained increases in branch coverage and discovers more bugs than other fuzzers.

著者: Tai D. Nguyen, Long H. Pham, Jun Sun

最終更新: 2023-07-05 00:00:00

言語: English

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

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

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

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

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

著者たちからもっと読む

類似の記事