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