SeedSmith: LLM-Driven Seed Synthesis for Directed Fuzzing
SeedSmithは、間接呼び出しとクラッシュの前提条件を反復的に解決することで、標的を絞った初期シードを合成し、それによってディレクテッドファジングを大幅に加速させ、多様な入力形式にわたって以前は到達不可能であった脆弱性の発見を可能にするエージェンティックなLLMパイプラインである。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
巨大で暗い城の中で、隠された宝箱を探そうとしている場面を想像してください。あなたには、歩き回り、壁にぶつかり、ドアを開けようとするロボット(「ファザー」)がいます。通常、ロボットは宝箱に偶然出くわすことを期待して、ランダムに徘徊します。しかし、時には宝箱がどこにあるのか(コード内の特定の「シンク」関数)を正確に知っており、ロボットをそこへ直行させたい場合があります。これを**ディレクテッド・ファジング(Directed Fuzzing)**と呼びます。
問題は? ロボットが迷ったり、行き詰まったりすることがよくあるのです。なぜでしょうか? ロボットが使う地図が不完全であり(鍵のかかったドアの背後にある秘密の通路が見えていない)、たとえ宝箱のある部屋を見つけたとしても、それを開けるための「秘密の手順」を知らないからです。ロボットはただ棒で宝箱を突き続け、それが壊れることを願っていますが、これでは時間がかかりすぎます。
そこで登場するのが、ロボットが動き出す前に、超スマートな探偵として機能する新しいシステム、SeedSmithです。ロボットを盲目的に彷徨わせる代わりに、SeedSmithは、まずAI(LLM)を使用して探偵のような調査を行います。
SeedSmithが解決する2つの大きな問題
1. 見えない地図(間接コール / Indirect Calls)
城の中に、ドアに名前が付いておらず、「衛兵が指差すドアへ行け」というメモだけがある廊下があると想像してください。ロボットの地図は直接的な接続しか示さないため、ロボットはその廊下を行き止まりだと判断してしまいます。現実の世界では、これはコード内の「間接コール」として発生します。この問題を修正しない限り、ロボットはその経路を一生見つけることができないことが論文で示されています。SeedSmithの探偵AIはコードを読み、どの衛兵がどのドアを指しているのかを解明し、欠落していた経路を地図に描き込みます。
2. 秘密の手順(クラッシュの前条件 / Crash Preconditions)
時には、正しい部屋にたどり着いても、宝箱が複雑なパズルでロックされていることがあります。例えば、特定のキーを保持しながら、3つのボタンを特定の順番で押す必要があるかもしれません。ロボットのランダムな突っつき(ミューテーション)は、ピアノの鍵盤を叩く猿のようなものです。いつかは正しい音を叩けるかもしれませんが、それには100万年かかるかもしれません。SeedSmithの探偵は指示書を読み、正確な組み合わせを解明し、それに完璧にフィットする鍵を作り上げます。
SeedSmithの仕組み:探偵と職人
SeedSmithは単に推測するのではなく、2段階のプロセス、つまり2人組のチームのように機能します。
- 分析エージェント(探偵): このシステムは宝箱から逆方向にスタートします。特殊なツールを使用して、人間のセキュリティ専門家が行うように、関数の本体や型定義を「探索」し、コードを読み解きます。単なる静的な地図を見るのではなく、「この関数を誰が呼び出しているのか?」「この変数にはどのような値が必要か?」といった問いを投げかけます。探偵は、正確な経路と、クラッシュを引き起こすために必要な正確な条件を見つけるまで、掘り下げを続けます。
- シード生成エージェント(職人): 探偵がレポートを書き終えると、次は職人の番です。職人は、完璧な「シード」(初期入力)を作成するためのPythonスクリプトを記述します。もし宝箱に複雑な画像ファイルや特定のネットワークパケットが必要な場合、職人はランダムなバイトを投げつけるのではなく、(デジタルな絵筆のような)ライブラリを使用して、それを完璧に構築します。
もし最初の試みで宝箱を壊せなかった場合、システムは結果を確認し、失敗から学び、正解に到達するまで最大10回まで再試行します。
SeedSmithが証明したこと(および証明していないこと)
研究者たちは、2つの大きな課題セット、Magma(23個の特定のバグ)とARVO(26のプロジェクトから集められた115個の実世界のバグ)を用いてテストを行いました。
結果:
- 速度: SeedSmithのシードを使用した場合、ロボットは、有名なツールであるAFL++では平均で11.51倍、AFLGoでは14.66倍、デフォルトの開始シードを使用した場合よりも速くクラッシュを発見しました。
- 新たな発見: ARVOの課題において、SeedSmithは、24時間実行しても一度も見つからなかった16個のバグを発見する助けとなりました。これらのバグは、非常に異なるファイル形式を持つ10のプロジェクトに含まれていました。
- ワンショットの成功: 一部のバグについては、SeedSmithが作成したシードがあまりに完璧であったため、ロボットが入力にミューテーションを加える前に、即座にクラッシュを誘発しました。これはMagmaセットにおいて5回発生しました。
SeedSmithが「ではない」もの:
- これはロボット自体を修正する魔法の杖ではありません。論文では、SeedSmithはロボット(ファザー)の内部動作を変更するものではないと明記しています。単に、より良い出発点を与えているだけです。
- すべてのファジングの代わりになるものでもありません。論文では、シードが与えられた後でも、ロボットが依然として作業を行う必要があるバグがあることを指摘しています。
- すべての問題を解決すると主張しているわけではありません。論文では、クラッシュ条件が極めて複雑な場合、ロボットが依然としてタイムアウト(時間がかかりすぎる)してしまうことがあると認めています。
結論
SeedSmithを、GPSとマスターキー職人を組み合わせたものだと考えてください。ロボットを暗い城に送り出す前に、SeedSmithは正確なルートを割り出し、完璧な鍵を作り上げます。このアプローチは、測定に基づき証明されており、ソフトウェアのバグ発見を大幅に高速化し、以前は到達不可能だったバグを見つける助けとなります。これにより、汎用的なロボットであっても、目的を持った「宝探しハンター」として振る舞うことができるのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。