【ふぁじんぐ】

ファジング とは?

最終更新:
💡 入力を次々に変えて、見落とした不具合を探す

多様な入力を自動で生成・変異させ、プログラムへ繰り返し与えて不具合を探すテスト手法。ランダム入力だけでなく、実行したコードの範囲などを手掛かりに入力を改良する方式もある。

📌 このページのポイント
入力を変えて、繰り返し試す 入力を生成 例を少し変える コード テスト対象 実行する 異常の記録 再現・調査へ 実行した範囲を手掛かりに 異常なし → 次の入力も試す 異常の検出 ≠ 脆弱性の確定
実行情報を使って入力を改良する方式の例。異常を起こした入力を保存し、原因と影響を調べる。
ひよこ ひよこ
ファジングってどんなテストなの?
ペンギン先生 ペンギン先生
入力を自動で次々に変え、プログラムが落ちたり止まったりしないか探すテストだよ。空のデータ、長い文字列、形式を崩したファイルなど、人が手で用意しきれない入力を試せるんだ。
ひよこ ひよこ
ただのでたらめな入力だけで調べるの?
ペンギン先生 ペンギン先生
ランダムに作る方法もあるけど、それだけではないよ。libFuzzerは入力例を少しずつ変え、まだ通っていないコードの範囲に届く入力を保存して、さらに探索する。入力の形式に合う例を用意することも役立つんだ。
ひよこ ひよこ
クラッシュしたら脆弱性を見つけたことになる?
ペンギン先生 ペンギン先生
調査が必要だよ。不具合の中には攻撃につながるものもあるけど、全てが脆弱性とは限らない。異常を起こした入力を保存し、再現して原因と影響を確かめるんだ。
ひよこ ひよこ
開発ではどう使うの?
ペンギン先生 ペンギン先生
入力を受け取るテスト用の入口を用意し、必要に応じてメモリの異常を検出するSanitizerなどと組み合わせるよ。見つけた入力を再発防止のテストにも使える。OSS-Fuzzはオープンソース向けに継続的な実行を提供しているんだ。
ひよこ ひよこ
異常が出なかったら安全なの?
ペンギン先生 ペンギン先生
試した入力で異常を見つけられなかった、ということだよ。通れていない処理や検出できない不具合もある。期待する動作を確認する通常のテストや静的解析などと組み合わせて使うんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ファジング」って出てきたら「多様な入力を自動で試し、予想外の不具合を探すテスト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Fuzzing / Fuzz Testing」 = ファズテスト
💬 古典的なファズテストはランダムな入力でプログラムの異常を探すもの。ウィスコンシン大学の研究ページでは、1988年の授業課題と1990年の研究報告が紹介されているよ。

参考資料

← 用語集にもどる