「Black Hat Japan 2007 Briefings & Training」(開催期間:10月23日~26日)において「ファジングは最悪だ!(あなたの思うようにファジングするには)」というタイトルで講演を行ったのはPedram Amini氏ならびにAaron Portnoy氏。両氏はTippingPointに勤務しており、攻撃の防御対策を考えることが主な業務内容とのことだ。Amini氏は「PaiMei」というリバースエンジニアリングツール群も開発している。
本講演では、脆弱性を発見する手法である「Fuzzing」を実現するためのツールを使用者の視点で説明。一般的なツールの使いにくい点と、その欠点を補った独自のFuzzingツール「Sulley」が紹介された。
一般的なFuzzingツール
まず両氏は、一般的なFuzzingツールとして「DFUZ」「SPIKE」「Peach」「GPF」などを紹介したうえで、これらに関して下のカコミ記事にある内容を「使いにくい点」として指摘していた。
※講演中では各々のツールに対してそれぞれ使いにくい点を説明していたが、ここでは個別ツール名は割愛し、使いにくい、と指摘した点のみを列挙する。
一般的なFuzzingツールの使いにくい点(一部抜粋)
・特定のデータ定義のみに対応しており、自由度がない
・出力結果のデータフォーマットが分かりにくい
・拡張性がない
・ライブラリの追加がない
・プロセスが自動化されていない
・進捗結果の記録がユーザの目で見える形として表示出来るよう自動化されていない
・複数のプロトコルを利用してFuzzingを実行し、考察する技術がない
・どのくらいのコードをFuzzingに必要としたのか分からない
・記録/経過/経緯などのRAWレベルの操作が行えていない
・Fuzzingする過程において、未だマンパワーを必要としている
(出典:Pedram Amini & Aaron Protnoy, Black Hat Japan 2007)
独自のFuzzingツール「Sulley」
次に、両氏は前述のカコミ記事で指摘した点を補う独自のFuzzingツール「Sulley」を開発したと説明した。このツールはPythonを利用しており、4つの主要コンポーネント(表1)が存在するという。
表1 「Sulley」のメインコンポーネント
Data Generation | 任意の値を定義するなどの、データ生成を行うコンポーネント |
---|---|
Session Management / Driver | 一連のフローを整理し、かつ進捗情報や一時停止などの管理を行うコンポーネント |
Agents | 特定のツールを追加するなどの付加機能を扱うコンポーネント |
Utilities | Fuzzingの効率化や、その実行の管理などを行うコンポーネント |
それぞれの主要コンポーネントの詳細については、次のような内容であるという。
Data Genteration
Data Generationは、Primitives / Blocks / Utils / Legosの4つで構成されている。Primitivesはユーザが任意で値を定義する場所であり、Legosはそれらをグルーピングしておく場所であるという。また、Legosの利点としては様々なPrimitivesを予め作成し、グルーピングしておくことで、再利用するときに効率化が図れるという。
ession Management / Driver
Session Managementは様々なリクエストをまとめて整理し、それをグラフとして表示する場所であると両氏は説明。またWebインタフェースからFuzzingの進捗管理、停止箇所の検知、及びその時点においてのプロセスダンプとパケットのキャプチャ、作業の一時停止とレジューム機能などが利用できるという。
加えてDriverは主要な4つのコンポーネントの中心に存在する場所であり、それぞれのコンポートネントを接続し、補助していると説明していた。
Agents
Agentsはサブシステムとして定義され、任意の機能をFuzzingに追加できると説明していた。サンプルとして実装されている機能としてはネットワークモニタツール「Netmon」やプロセスの稼働に関する問題を診断する際に利用するプロセスモニタツール「Procmon」、その他としてVMwareのコントロールを行う「VMControl」があるという。
Utilities
Utilitiesは、Crashbin_explorer / ida_fuzz_library_extender / pcap_cleaner / pdml_parser /sequence_honer の5つで構成されていると両氏は説明していた。これら5つはそれぞれFuzzing作業の基盤となるライブラリや作業を効率よく行う為のライブラリなどであるという。
両氏はSulleyの構成を説明した後、デモを交えてこのツールを使用した実際のFuzzingの流れを紹介した。このデモでは、Fuzzingを開始させると、VMwareが自動的に起動しFuzzingが開始された。その後、ある一定の処理が終わると自動的にVMwareをクリーンな状態に戻し(revert)、再度VMwareを起動して次のパターンでFuzzingを開始させていた。またデモの中で両氏は「作業を始める前に、手動で設定を行い開始させれば後は寝ているうちに自動的にFuzzing作業とレポートの出力が終わるだろう」と説明していた。
最後に両氏はSulleyの今後の展開として、GUIの搭載やSulleyの全コンポーネントを入れ込んだVMwareのイメージを作成していきたいと語った。なお、現在このツールは「FUZZING」にて公開されている。VMwareのイメージはまだ公開されていないが、興味がある方は一度試してみるとよいだろう。