FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework
FunFuzz は、適応的かつフィードバックに基づくプロンプトと周期的な候補の移動を活用してプロンプトの感度やサンプリングのばらつきを克服するマルチアイランド進化型ファジングフレームワークであり、これにより従来の LLM 駆動アプローチよりも優れたコンパイラカバレッジを達成し、より多くのユニークな失敗を誘発する入力を発見する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
巨大で複雑な迷路の中に隠された罠を見つけようとしていると想像してください。この迷路とは、人間が書いたコードをコンピュータが実際に実行できる命令に変換するソフトウェア、つまり「コンパイラ」です。コンパイラにバグがあれば、クラッシュしたり誤った答えを出したりする可能性があり、その上に構築されたすべてが破綻する恐れがあります。
長年、専門家たちはこれらのバグを見つけるために「ファズテスター(ファズラー)」を用いてきました。ファズラーとは、迷路に何百万ものランダムなテストケースを投げつけて、何か壊れるかどうかを確認するロボットのようなものです。しかし、現代のコンパイラはあまりにも複雑であるため、ランダムな投擲では、奥深く入り組んだ死角を見逃してしまうことがよくあります。
最近、人々はこれらのテストケースを作成するために**AI(大規模言語モデル)**を使い始めました。AIは賢く、非常に現実的なコードを書くことができます。しかし、この論文は、このように AI を使うことには問題があると主張しています:それは行き詰まりやすいのです。AI にコードを書くよう指示すると、異なる単語を使うだけで、同じ 5 種類の文を繰り返し生成し続けるかもしれません。迷路の新しい部分を探索するのをやめてしまうのです。
FunFuzz の登場です。
著者たちはこの問題を解決するために、FunFuzzという新しいシステムを開発しました。その仕組みを、簡単な比喩を使って説明します。
1. 「マルチアイランド」戦略
失われた都市を探す探検隊のチームがいると想像してください。
- 従来の方法(単一の AI): 1 人の探検家を派遣します。彼らは歩き始め、道を見つけ、その道を進み続けます。やがて退屈したり、ループにはまったりして、新しいものを見つけられなくなります。
- FunFuzz の方法: 5 つの別々のチーム(「島」と呼ばれます)を派遣します。各チームは、異なる地図と異なる目標を持って、ジャングルの全く異なる場所から出発します。
- チーム A には「古代の遺跡」を探すよう指示します。
- チーム B には「隠された洞窟」を探すよう指示します。
- チーム C には「川を渡る場所」を探すよう指示します。
異なる指示で出発するため、全員が同じ道を進むわけではありません。彼らは迷路の異なる部分を同時に探索します。
2. 「移動」システム
数時間ごとに、チームたちは焚き火の周りで集まります。
- チーム A が非常にクールで珍しい遺物(コンパイラをクラッシュさせたり、奇妙な動作をさせたりするプログラム)を見つけた場合、それを独り占めにはしません。チーム B とチーム C とコピーを共有します。
- 重要なのは: 彼らはチーム B をキャンプから追い出しません。単に新しい遺物をチーム B のコレクションに追加するだけです。これにより、チーム B はすでに達成した進捗を失うことなく、その新しいアイデアを使ってさらに深く掘り下げることができます。
これにより、グループ全体が同じループにはまるのを防ぎつつ、最高の発見が広まるようにしています。
3. 「適性スコア」(何が優れているかを知る方法)
AI はどのテストケースが優れているかをどうやって知のでしょうか?
- システムは、AI が書いたコードをコンパイルします。
- そのテストによって、コンパイラ自身の内部コードのどの新しい行が触れられたかを数えます。
- テストケースが、コンパイラが以前見たことのない部分を自身に認識させた場合、そのテストには高いスコアが与えられます。
- システムは、最も高いスコアを得たテストを選んで「次世代のテスト」を生成(繁殖)し、探索を絶えず洗練させていきます。
彼らは何を見つけましたか?
研究者たちは、FunFuzz を、AI を使用するがチームが 1 つだけというFuzz4Allや、何百万ものランダムな変異を投げるKittenといった他のトップクラスのツールと比較し、2 つの主要なコンパイラであるGCCとClangでテストしました。
- より良いカバレッジ: FunFuzz は、他のツールよりもコンパイラ内部のより多くの「新しい領域」を見つけました。それはより深く、より広く探索しました。
- より多くのバグ: 24 時間にわたるテストで、FunFuzz はコンパイラをクラッシュさせたり内部で失敗させたりする119 の固有のバグを発見しました。
- 実社会への影響: 開発者がこれらのバグの80 件を確認しました。
- 効率性: FunFuzz は最速のツールよりも多くのプログラムを生成したわけではありませんが、生成したプログラムははるかに高品質でした。時間あたりに発見したバグの数が多いのです。
結論
FunFuzz は、単一のランナーではなく、探検家のチームを利用する賢い宝探しのようなものです。チームを別々に保ちつつ、最高の発見を共有させることで、退屈なループにはまるのを避け、現代のコンパイラという複雑なメカニズムの奥深くまで掘り下げ、他の手法では見逃すバグを見つけ出します。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。