最新のファジング技術を使ったテストで 42 件のゼロデイ脆弱性が発見される

ある研究チームが、これまでの概念を覆す新しいアプローチを使用して、さまざまなソフトウェアツールに存在していた 42 件のゼロデイ脆弱性を発見しました。シンガポール、オーストラリア、ルーマニアの研究者から成るこのチームが採用したアプローチは、数十年前から使われているファジングと呼ばれるテスト技術を改良したものです。

標準的なソフトウェアテストでは、問題を発生させる可能性があるデータを開発者がソフトウェアに入力します。次に、プログラムを自動的に実行するスクリプトやツールを使用して、それらの入力をテストします。例えば、名前が入力される Web フォームをテストする場合には、空欄を許可しないことや、データベースを操作するコマンドが入力されたエントリーをブロックできていることを確かめます。

この手法は不具合の発見には有効ですが、包括的なテストには適していません。開発者がソフトウェアのあらゆる部分に考えを巡らせることは容易ではありません。また、音声ファイルや画像ファイルのアップロードが関わってくると、一層複雑化します。プログラムで問題を発生させるテストデータがどのようなものかを理解し、そうしたデータを作成するのは、はるかに困難な作業です。

この課題を解決するのが、予測不能なさまざまな方法でファイルなどの入力データを自動的に変更するファジングツールです。ファジングツールは、ファイルごとにビットを変更することで何千通りものデータを入力し、プログラムを壊すデータが無いか確認します。

ファジングは次の 3 種類に大きく分類されます。

ブラックボックスファジングでは、テスト対象プログラムの情報は一切不明な状態で、できるだけ多くの組み合わせを無差別にテストします。これは手っ取り早い方法ではありますが、プログラム内の奥深くにある不具合を発見するのには適しません。

対極にある手法がホワイトボックスファジングです。ホワイトボックスファジングは、プログラムの仕組みを理解するために、その構造を詳細に分析します。これにより、プログラムコード特有のロジックフローに合わせてテストを調整できるため、プログラムの 1 機能について調査できる割合 (カバレッジ) を高めることができます。

グレーボックスファジングは、上記 2 つの中間にあたる手法です。プログラムの構造を分析するのではなく、有効な入力データを生成するように設計された「種」となるシードファイルを使用し、その中のビットを反転させることでファイルを変容させます。テストプログラムは興味深い結果を発見すると、その結果を生成したデータをシードファイルのリストに追加し、反復します。

人が暗い部屋を手探りで進むように、グレーボックスファジングツールは自ら暗中模索しながらテストを実行します。グレーボックスファジングはホワイトボックスファジングよりも高速で、ブラックボックスファジングよりもカバレッジを向上させます。

American Fuzzy Lop (AFL) はグレーボックスファジングの良い例です。しかし、研究チームはさらなる技術向上を目指しました。入力ファイルのビットを反転させて、プログラムを少しずつ調査するというグレーボックスファジングの手法には限界があります。より深部にある不具合を発見する目的で、ファイルの構造を大きく変化させるのには適していません。研究チームはこの問題を解決すべく、入力ファイルの構造のマップを作成しました。「仮想構造 (virtual structure)」と呼ばれるこのマップは、ファイルフォーマットを説明するもので、ファイルのパーツ (チャンク) がどこから始まりどこで終わり、他のチャンクとどう異なるのかを示します。研究チームのマップは、音声ファイルの WAV といったメディアフォーマット向けに作成されました。

この手法でも従来のグレーボックスファジングと同様にビット反転を適用できますが、そのためにはファイルチャンクごとにシードファイルを使用します。ファジングツールはファイルのチャンクレベルでの追加、削除、接合が可能であるため、より効果的な組み合わせを生成することができます。そして、生成された組み合わせに基づいてプログラムをテストし、不具合が発見されやすいファイルの変異を調べることでカバレッジを高めます。

研究チームはこの概念を利用して AFL の技術を向上させ、AFLSmart というツールを開発しました。このファイル構造を使用することで、すでに優れた結果を出していた AFL のさらなる改良に成功しました。研究論文によると、AFLSmart はすでに幅広く利用され、十分にテストされていた複数のソフトウェアツールから 42 件以上のゼロデイ脆弱性を発見しました。AFLSmart ツールによって発見され、CVE に登録された脆弱性は、論文発表の時点で 17 件に上ります。

このツールにより、従来から非常に効果的だったグレーボックスファジングの手法にさらに磨きがかかりました。Google の OSS-Fuzz などにように、大規模なクラウドインフラストラクチャに基づいたホワイトボックス型ファジングツールとのパフォーマンス比較の分析結果を見たいものです。

カバレッジと速度のバランスの取れたアプローチで妥協するのと、鈍足でもカバレッジの高いアプローチに大量の安価なコンピュータリソースを投入するのと、どちらが良いでしょうか。

これは重要な問題です。なぜなら、ソフトウェアエンジニアだけでなく悪意のあるハッカーも、ゼロデイ脆弱性を見つけ出すためにますますファジングに頼るようになっているからです。

どちらが最善であるにせよ、1 つだけ明らかなことがあります。それは、先進技術による旧来のファジングプロセスの改良が進んでいるということです。