序論
Emiは、最新の侵害、攻撃、防御について報告するサイバーセキュリティジャーナリストです。この記事では、iPhoneを攻撃するために使用されたlibwebp脆弱性CVE-2023-4863を、AFL++を使ってファジングで再発見する方法のガイドに取り組みます。
ファジングについて学ぶ
クリエイターは、vanhauserがAFL++を使ってlibwebp脆弱性を見つけた成功を目にして、ファジングについてさらに学ぶことに触発されました。クリエイターは、単にセットアップをコピーするのではなく、より高度なAFL++ワークフローを学ぶ手段として、vanhauerのメソッドを複製することにしました。クリエイターは、AFL とカバレッジガイドファジングの基本について概説し、脆弱性を発見するための強力なツールとしてその活用について説明しています。
AFL++によるファジングのセットアップ
クリエイターは、クリーンでポータブルなセットアップができるようにDockerの環境でファジングの実験を行いました。クリエイターは、libwebpとサンプルのD_webpプログラムをAFL++インストルメンテーションでコンパイルする手順に従いました。クリエイターは、アドレスサニタイザー、CMPログ、KCOVなど、さまざまなカバレッジ戦略を活用し、それらがファジングプロセスにどのような影響を与えるかを探りました。
初期のファジング試行
クリエイターは、ドキュメントの推奨に従って、複数のAFL++インスタンスでファジングキャンペーンを開始しました。2日間待っても、OSS-Fuzzがlibwebpで行った広範なファジングにもかかわらず、クラッシュは見つからませんでした。クリエイターはvanhauerにアドバイスを求め、ホワイトリストを使ってファジングを特定の関数に集中させる方法について学びました。
Persistent Modeファジング
クリエイターは、AFL++のPersistent Modeを使って、CVE-2023-4863の脆弱性のターゲットとなった、build_Huffman_table関数を直接ファジングする別のアプローチを試すことにしました。クリエイターは、必要なパラメータを準備し、ターゲット関数を直接呼び出すPersistent Modeファジングプログラムを設定しました。Persistent Modeファジングは数分で、クラッシュを見つけることができ、このターゲットアプローチの有効性を示しました。
得られた教訓
クリエイターは、libwebpコードの構造、特に共有テーブルバッファーとHuffmanテーブルのループが、通常のファジングでは脆弱性をトリガーするのが困難だったことについて説明しています。クリエイターは、開発者はコンポーネントを明確に分離し、関数ごとに分けるなど、ファジングしやすいコードを書くべきだと提案しています。セキュリティ研究者にとっては、ファジングは強力なツールになりうるが、ターゲットを深く理解し、適切に適用する必要があるという教訓です。
結論
この記事では、Emiが、AFL++ファジングを使ってlibwebp脆弱性CVE-2023-4863を再発見するプロセスについて詳しく説明しました。記事では、セットアップ、初期の試行、そして迅速に脆弱性を発見したPersistent Modeの使用について取り上げています。得られた教訓は、ターゲットコードの構造を理解し、難しい脆弱性を発見するための適切なファジング手法を使うことの重要性を強調しています。
要点:
- クリエイターはDockerを使ってクリーンでポータブルなファジング環境を設定しました。
- ファジングプロセスにどのような影響があるかを見るために、さまざまなカバレッジ戦略をテストしました。
- 通常のファジングでは脆弱性が見つからなかったが、特定の関数に焦点を当てるためのホワイトリストの使用について学びました。
- Persistent Modeファジングは、関連する関数を直接ターゲットにすることで、数分でクラッシュを見つけることができました。
- libwebpコードの構造が、通常のファジングで脆弱性をトリガーするのを困難にしていたことから、ファジングしやすいコードを書くことの重要性が示されました。
- ファジングは強力なツールですが、難しい脆弱性を発見するには、ターゲットを深く理解し、適切に適用することが必要です。