【ふぁじんぐ】

ファジング とは?

💡 でたらめな入力で弱点をあぶり出す探偵術
📌 このページのポイント
ファジングの仕組み ファザー ランダムデータ生成 AAAA...(超長文字列) %00\xff(特殊バイト) -1, 999999(境界値) 大量投入 テスト対象 ソフトウェア プログラム 正常動作 → 次の入力へ 異常検出! クラッシュ/リーク → 脆弱性レポート カバレッジ情報をフィードバック(グレーボックス型)
ファジングによる脆弱性発見の流れ
ひよこ ひよこ

ファジングってどんなテストなの?普通のテストと何が違うの?

ペンギン先生 ペンギン先生

普通のテストは「こう入力したらこう動くはず」って期待値を決めて確認するよね。ファジングは逆で、めちゃくちゃなデータを大量に投げつけて「壊れるところはないか」を探すんだ。サルにキーボードを叩かせるようなイメージだよ

ひよこ ひよこ

ランダムなデータで本当にバグが見つかるの?

ペンギン先生 ペンギン先生

これが驚くほど見つかるんだ。人間が想定しないような超長い文字列やゼロバイト、特殊文字の組み合わせで、バッファオーバーフローやクラッシュが発覚することが多い。GoogleのOSS-Fuzzは何万件もの脆弱性を見つけているよ

ひよこ ひよこ

ファジングにも種類があるの?

ペンギン先生 ペンギン先生

大きく3つあるよ。入力をまったくランダムに生成するブラックボックス型、ソースコードカバレッジを見ながら入力を賢く進化させるホワイトボックス型、そしてその中間のグレーボックス型。AFL やlibFuzzer はグレーボックス型の代表格だね

ひよこ ひよこ

開発の現場ではどう使われてるの?

ペンギン先生 ペンギン先生

CI/CDパイプラインに組み込んで、コードが変更されるたびに自動でファジングを回すのが理想的だよ。特にC/C++のようなメモリ管理が手動の言語では威力を発揮する。ブラウザやOSのセキュリティチームでは、何百台ものマシンで24時間ファジングを回し続けているんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ファジング」って出てきたら「ランダムな入力で脆弱性を自動発見するテスト」と思えればだいたいOK!
📖 おまけ:英語の意味
「Fuzzing / Fuzz Testing」 = ファズ(あいまいな)テスト
💬 Fuzz は英語で綿毛やぼやけたものという意味。でたらめでぼんやりしたデータを投げつけるイメージからこの名前がついたよ
← 用語集にもどる