🫥
脆弱性の検出手段「ファジング」を調べてみた
概要
色々あってファジングについて調べることになったので、備忘録にまとめていきます。
ファジングとは?
- 脆弱性を検出する検査手法の一つ
- 検査対象のソフトに 「ファズ(fuzz)」 と呼ばれる問題を引き起こしそうなデータを大量に送り込み、その応答や挙動を監視する
例えば……
- 検査対象のソフトに極端に長い文字列や、通常用いないような特殊文字などを送る
- 予期せぬ異常動作や異常終了、再起動などが発生した場合、このソフトウェア製品の処理に何らかの問題がある可能性が高いと判断できる
引用:ファジング活用の手引き(PDF)
ファズの例
-
ファズは検査対象のソフトに入力されるであろう形式に合わせて作成される。
- 画像ソフトならファイル形式、ウェブサーバならHTTPリクエスト、CUIプログラムならコマンドライン引数や環境変数など
-
ファズのパターンも様々あり、例えばウェブサーバに対してのファズでは以下のようなパターンがある
ファズパターン | ファズの例 | 説明 |
---|---|---|
正常値 | GET / HTTP/1.0 | |
リクエストURIに極端に長い 文字列を設定 | GET AAAAAAAAAAAAAAAAAAA… | スタック・ヒープオーバーフロー につながる可能性がある |
リクエストURIに書式文字列 を設定 | GET %s%s%s%s HTTP/1.0 | 書式文字列の問題につながる 可能性がある |
HTTPバージョンに数値の上限 を超える値を設定 | GET / HTTP/65537 | 整数オーバーフローにつながる 可能性がある |
ファジングツール
- ファジングツールは主に「ファズの生成・加工」「ファズの送信・入力」「ファジング対象の挙動・死活監視」の三つの機能がある
- ファズを作って、送って、様子を見るのを自動で繰り返し行う
ファジングの効果、課題
ファジングの効果
- バグや脆弱性の低減
何度も繰り返し実施することが比較的容易で、繰り返すことでバグや脆弱性の低減が期待できる
ファズは機械的に生成されるため、想定外の脆弱性を検出できる可能性がある - テストの自動化・効率化による労力削減
多くのファジングツールは人の操作をほとんど必要としないので、比較的楽でバグや脆弱性を検出可能
ファジングの課題
入力に用いるデータや文字の種類を増やすと試行回数が増え、その分検査時間も増えてしまう。ただ、十分な試行回数が無いとファジングの意味が無いので、検査時間と試行回数の折り合いをつける必要がある
Discussion