ファジング(Fuzzing)とは?

ファジングの概要とメリット

ファジングは、ターゲットに大量のデータ(ファズ)を入力し、その応答や挙動を監視することでソフトウェアの欠陥や脆弱性を発見するテスト手法です。開発者が想定していないテストパターンを含む膨大なテストデータを生成し、効率的に網羅的な検証を行うことができます。

ファジングのメリット
  • 潜在的なバグや脆弱性を発見できる
  • 効率的に高いテストカバレッジ(網羅率)を実現できる
  • 偽陽性ゼロでランタイムエラーを検出できる

ファジング・テストイメージ図

ファジングによって検出できるバグ

ファジングを活用することで、網羅的にさまざまなパターンをテストし潜在的な欠陥を検出することができます。予期しない入力に対しての反応をチェックするネガティブテストに適した手法であり、セキュリティに深刻な影響を与えることが多いメモリ破壊系のバグなどを見つけるのに効果的です。

サイバー攻撃のリスクが高まるなかで、セキュリティ対策を目的としたファジングの導入も増えてきています。
例えば、ファジングで検出できる脆弱性としてバッファオーバーフローがあります。想定以上の大きさのデータを与えることで、意図的にあるデータ領域を書き換えるといった形で攻撃者に悪用される可能性のあるバグとして有名です。ファジングは膨大なテストパターンを自動でテストし、さまざまな予期せぬデータ入力に対してのプログラムの動作を検証することができるため、このようなバグの検証において特に有効な手法といえます。

一般的なランタイムエラー検出と比較したメリット

ファジングは実際にアプリケーションを動作させてランタイムエラーの検証を行う動的解析(DAST)に分類される手法のひとつです。ランタイムエラー検出では、デバッガーや単体テストケースなどを用いた手法が比較的一般的ですが、さまざまなパスを通すためのテストパターンを考えて実行する手間がかかり、十分なテストが行えない、テストの抜け漏れが発生する、といった課題を抱えるケースも少なくありません。

ファジングは膨大なテストデータを自動的に生成できるため、一般的なランタイムエラーの手法と比べ開発者の手間が少なく、より網羅的なテストが実行可能です。その他にも、プログラムを動作させずに検証を行う静的解析(SAST)を含め、さまざまなテスト手法があり、それぞれの強み・弱みを理解して活用することが重要です。

Mayhem for Codeによるファジングテスト

Mayhem for Codeは、単体・結合テストフェーズでのファジングテストを実施することができます。アプリケーションの挙動に合わせてテストケースをカスタムしながら自動生成するため、開発者は容易かつ継続的に単体・結合テストを強化することが可能です。 また、CIパイプラインに統合することで、DevSecOpsワークフローの一部として運用することもできます。

単体テストはファジングを導入できる最初のフェーズ

ファジングテストは一般的には完成品に対して行うため、開発の最終盤で行われ、「後付け」のセキュリティテストになりがちですが、ファジングテストを単体テストフェーズに取り込みことで、動的解析(DAST)の強化を図れます。

単体・結合テスト対応ファジングツール Mayhem for Codeに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
se-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。