From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers
本論文では、大規模言語モデルを利用してAPIの関係性を推論し、複雑な呼び出しシーケンスを生成することで、既存の最先端ツールと比較してコードカバレッジを大幅に向上させ、主要なPDFリーダーにおいて31個のゼロデイ脆弱性を発見した、新しいLLM駆動型ファザーであるPDFuzzerを紹介する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
単なる画面上の表示にとどまらず、思考し、計算し、反応することができるデジタル文書を想像してみてください。これは、JavaScriptエンジンと呼ばれる組み込みのコンピュータプログラムを備えた場合の、PDF(Portable Document Format)が約束する姿です。物理的な本に、特定のページをめくったときにだけ開く隠しコンパートメントがあるように、PDFはリーダーアプリケーション内で実行されるコードを含むことができ、それによってインタラクティブなフォーム、スペルチェック、動的なメニューなどが可能になります。しかし、この力にはリスクも伴います。もしハッカーがこのエンジンを騙してミスを犯させることができれば、ファイルを読み込んでいるコンピュータを制御し、データを盗んだり悪意のあるソフトウェアをインストールしたりできる可能性があるのです。長年、セキュリティ研究者たちは、ランダムなバリエーションの文書をPDFリーダーに投げつけることで、プログラムがクラッシュすることを期待して、これらの隠れた罠を見つけ出そうとしてきました。しかし、この手法はしばしば「暗闇の中でダーツを投げる」ようなものであり、最も危険な欠陥を引き起こすために必要な、複雑で特定の動作のシーケンスを見逃してしまうことがよくありました。
カリフォルニア大学サンタバーバラ校の研究チームは、この問題に対して、盲目的な推測から知的な推論へと移行する新しいアプローチを開発しました。彼らは、PDFuzzerと呼ばれるツールを作成しました。これは、ダーツを投げる人というよりも、タスクを実行する前に取扱説明書を徹底的に読み込んだ学生のように振る舞います。単純で孤立したコマンドに頼るのではなく、このシステムは、PDFエンジンのプログラミング言語の異なる部分がどのように互いに依存しているかを学習します。特定の動作を行うためには、まず条件を設定する必要があることや、2つの異なるコマンドが正しく連携するためには全く同じ名前を使用しなければならないことなどを理解しています。コンピュータに、これらのソフトウェアエンジンの複雑な記述文書を読み解く方法を教えることで、研究者たちは、従来のツールでは到底思いつかなかったような、非常に高度なテストケースを生成することができました。
この新しい手法の核心は、ソフトウェアの「ルール」をどのように扱うかにあります。過去には、自動テストツールは、一つのコマンドが次のコマンドへバトンを渡すように結果を受け渡すといった基本的なつながりしか理解できず、苦戦することがよくありました。彼らは、2つのコマンドが正しく相互作用するために同じ特定の値を共有しなければならない場合や、あるコマンドが後のコマンドが依存する隠れた状態を設定する場合といった、より微妙な関係性を見落としていました。PDFuzzerは、膨大な量のテキストで訓練された人工知能の一種である大規模言語モデルを使用して、ソフトウェアの公式マニュアルとテクニカルトレースを読み取ります。そして、あらゆる関数が他のあらゆる関数とどのように関連しているかを示す詳細なマップを構築します。システムは、これらの記述された説明を厳格な論理ルールへと翻訳し、テストを生成する際にパラメータが完全に一致するようにします。例えば、あるコマンドが特定の名称の使用を要求する場合、システムは、その名称を必要とする後続のコマンドでも同じ名称が使用されることを保証し、ランダムに推測することはありません。
彼らの創造物をテストするために、研究者たちはPDFuzzerを、世界中で使用されている最もポピュラーな3つのPDFリーダー(Adobe Acrobat Reader、Foxit PDF Reader、PDF-XChange Editor)に適用しました。彼らはこのツールを数週間にわたって実行し、そのパフォーマンスを現在セキュリティ専門家が使用している最高の既存手法と比較しました。結果は驚くべきものでした。古いツールがソフトウェアの内部ロジックのごく一部しか探索できなかったのに対し、PDFuzzerは大幅に深く到達し、コードの最大48パーセント多くをカバーしました。より重要なことに、この深い探索により、31個のこれまで未知であったセキュリティ上の欠陥、すなわちゼロデイ脆弱性が発見されました。これらは些細な不具合ではなく、攻撃者が被害者のコンピュータを完全に制御したり、機密情報を漏洩させたりすることを可能にする、多くの深刻な問題でした。対照的に、他のツールが同時期に見つけたものは、最大でも6つの脆弱性にすぎませんでした。
研究者たちはバグを見つけるだけでなく、ソフトウェアメーカーと直接協力して修正に取り組みました。調整されたプロセスを通じて、彼らは31の脆弱性の詳細を、PDFリーダーの責任がある企業に開示しました。業界は迅速に対応し、26の問題が確認・修正され、10件にはユーザーへの警告のための公式なセキュリティ識別子が割り当てられました。また、研究者たちは、彼らの仕事に対して合計2,450ドルのバグバウンティ(報奨金)を受け取りました。この結果は、彼らのアプローチの実用的な価値を浮き彫りにしています。複雑なソフトウェアの関係性を理解するという困難な作業を自動化することで、人間による専門家や古い自動化ツールが見逃していた危険を発見し、修正することができたのです。
成功の鍵となったのは、ソフトウェアマニュアルに含まれる膨大な情報の扱い方でした。これらのエンジンのドキュメントは数百ページに及ぶこともあり、コンピュータが自動的に解析するには困難な技術的詳細が含まれています。研究者たちは、人工知能にゼロからテストケースを生成させるだけでは、速度が遅く、しばしばデタラメなものが出力されることを発見しました。そこで、彼らはAIを「翻訳者」として使い、自然言語のマニュアルを精密で機械が読み取り可能なルールへと変換しました。彼らはプロセスをステップに分解しました。まず、コマンドの基本構造を抽出すること、次に、十分に文書化されていないコマンドの隠れた詳細を推論すること、そして最後に、数学的なソルバーを使用して、生成されたテストケースがすべての論理的制約を満たすようにすることです。人工知能の推論能力と数学的論理の精密さを組み合わせたこのハイブリッドなアプローチは、AIだけに頼るよりもはるかに効率的かつ効果的であることが証明されました。
この研究はまた、最も危険な脆弱性は、従来のツールでは再現できない特定のイベントのシーケンスを必要とすることも明らかにしました。例えば、ある欠陥は、ユーザーインターフェース要素が作成された直後に削除され、その後に別のコマンドがその要素を再び使用しようとする状況に関連していました。これを引き起こすには、テストケースは要素を作成し、使用し、削除し、さらにその要素に再びアクセスしようとする一連の流れを作る必要があり、その間、名前と値が各ステップで同一であることを保証しなければなりません。各コマンドを独立したイベントとして扱う古いツールは、この特定の連鎖を生成することができませんでした。PDFuzzerは、コマンド間の関係を理解することで、その欠陥を露呈させるために必要な正確なシーケンスを構築することができたのです。この複雑な依存関係をモデリングする能力こそが、新しい脆弱性の大部分を発見するための決定的な要因となりました。
研究者たちは、PDFリーダー以外にも、詳細なドキュメントが存在する他のソフトウェアセキュリティ分野にも、彼らの手法を応用できると考えています。彼らは、Microsoft Wordのマクロで使用されるプログラミング言語という、異なるものの同様に複雑な環境に対して彼らのパイプラインをテストしましたが、そこでも同様の種類のリレーションシップと依存関係が存在することを発見しました。これは、ソフトウェアコンポーネントがどのように相互作用するかを理解するという課題が、PDFリーダー特有のものではなく、現代のコンピューティングにおける広範な問題であることを示しています。書かれたマニュアルを厳格なテストルールへと自動的に変換する能力は、私たちの日常生活を支えるソフトウェアを保護するための新しい道筋を提示しています。
結局のところ、この研究は、ソフトウェアセキュリティの未来が、私たちが書いた指示をコンピュータに読み、理解させる方法にあることを示しています。人間が書いたドキュメントと機械が生成するテストとの間の溝を埋めることで、研究者たちは、以前よりも迅速かつ徹底的に危険な欠陥を見つけ出し、修正できることを示しました。彼らが明らかにした31の脆弱性は、私たちが毎日使用しているソフトウェアの中にどれほどの複雑さが隠されているか、そして、悪いアクターが現れる前にその隙間を見つけ出すことができるスマートなツールがあれば、どれほど安全になれるかを物語っています。このプロセスは、魔法や運によるものではなく、ソフトウェアの論理を考え抜き、すべてのテストケースがランダムな推測ではなく、システムを打破するための意味のある試みとなるようにするシステムを構築することだったのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。