ファズテスト (ファジング) チュートリアル

ファズテストとは何ですか?

ファジングテスト ファジングは、コーディング エラーやセキュリティの抜け穴を発見するために、FUZZ と呼ばれる無効なデータまたはランダムなデータをソフトウェア システムに入れるソフトウェア テスト手法です。 ファズ テストの目的は、自動または半自動技術を使用してデータを挿入し、システムのクラッシュや組み込みコードの障害などのさまざまな例外についてシステムをテストすることです。

ファズ テストは、1989 年にウィスコンシン大学のバートン ミラーによって最初に開発されました。ファズ テストまたはファジングはソフトウェア テスト手法の一種であり、 セキュリティテスト.

ファジングテスト

ファズテストを行う理由

  • 通常、ファジー テストでは、最も重大なセキュリティ上の欠陥または欠陥が検出されます。
  • ファズテストを使用すると、より効果的な結果が得られます。 ブラック Box テスト、ベータ テスト、およびその他のデバッグ方法。
  • ファズテストはソフトウェアの脆弱性をチェックするために使用されます。 非常に費用対効果の高いテスト手法です。
  • ファズ テストはブラック ボックス テスト手法の 1 つです。ファジングは、ハッカーがシステムの脆弱性を見つけるために使用する最も一般的な方法の 1 つです。

ファズテストのやり方

ファジー テストの手順には、基本的なテスト手順が含まれます。

ステップ1) ターゲットシステムを特定する

ステップ2) 入力を特定する

ステップ3) ファジーデータの生成

ステップ4) ファジーデータを使用してテストを実行する

ステップ5) システムの動作を監視する

ステップ6) ログの欠陥

ファザーの例

  • 突然変異ベースのファザー 既存のデータ サンプルを変更して新しいテスト データを作成します。 これは非常にシンプルで簡単なアプローチであり、プロトコルの有効なサンプルから開始して、すべてのバイトまたはファイルをマングルし続けます。
  • 世代ベースのファザー モデルの入力に基づいて新しいデータを定義します。 仕様に基づいて最初から入力の生成を開始します。
  • プロトコルベースのファザー、最も成功するファザーは、テスト対象のプロトコル形式についての詳細な知識を持っていることです。 理解は仕様に依存します。 これには、仕様の配列をツールに書き込み、モデルベースのテスト生成手法を使用して仕様を調べ、データの内容やシーケンスなどに不規則性を追加することが含まれます。これは、構文テスト、文法テスト、堅牢性テストなどとも呼ばれます。ファザーは既存のテスト ケースからテスト ケースを生成したり、有効または無効な入力を使用したりできます。

プロトコルベースのファジングには XNUMX つの制限があります。

  1. 仕様が完成するまでテストを進めることはできません。
  2. 多くの便利なプロトコルは、公開されたプロトコルの拡張です。 ファズテストが公開された仕様に基づいている場合、 テストカバレッジ 新しいプロトコルの場合は制限されます。

ファジング技術の最も単純な形式は、ランダムな入力をプロトコル パケットまたはイベントとしてソフトウェアに送信することです。 ランダムな入力を渡すこの手法は、多くのアプリケーションやサービスのバグを見つけるのに非常に強力です。 他のテクニックも利用でき、実装は非常に簡単です。 これらの手法を実装するには、既存の入力を変更するだけです。 入力のビットを交換するだけで入力を変更できます。

ファズテストで検出されるバグの種類

  • アサーションの失敗とメモリ リーク この方法は、重大な脆弱性であるバグがメモリの安全性に影響を与える大規模なアプリケーションで広く使用されています。
  • 無効入力 ファズ テストでは、ファザーは、エラー処理ルーチンのテストに使用される無効な入力を生成するために使用されます。これは、入力を制御しないソフトウェアにとって重要です。 単純なファジングは、ネガティブ テストを自動化する方法として知られています。
  • 正確さのバグ ファジングは、ある種の「正確さ」のバグを検出するためにも使用できます。 データベースの破損、検索結果の不良など。

ファズテストツール

Web セキュリティで使用されるツールは、次のようなファズ テストで広く使用できます。 Burp Suite、ピーチファザーなど。

  • ピーチファザー: Peach Fuzzer は、スキャナーよりも堅牢でセキュリティをカバーします。 他のテスト ツールでは既知のスレッドのみを検索できますが、Peach Fuzzer を使用すると、既知のスレッドと未知のスレッドを見つけることができます。
  • スパイクプロキシ: Web アプリケーションのアプリケーション レベルの脆弱性を探すプロ仕様のツールです。 SPIKE プロキシは、次のような基本をカバーします。 SQL インジェクションとクロスサイトスクリプティング、ただし完全にオープン Python インフラストラクチャー。 SPIKE プロキシは次の目的で使用できます。 Linux と Windows.
  • ウェブスカラベ: ウェブスカラブはで書かれています Java したがって、多くのプラットフォームに移植可能です。 アプリケーションの分析には、HTTP および HTTPS プロトコルを使用して通信する Webscarab フレームワークが使用されます。例: Webscarab はインターセプト プロキシとして機能し、ブラウザによって作成されたリクエストをサーバーが受信する前に確認して修正することができます。また、ブラウザが受信する前にサーバーによって生成された応答を確認および更新することもできます。このようにして、Web Scarab が抜け穴を発見すると、報告された問題のリストが作成されます。
  • OWASP WSFuzzer: WSFuzzerはGPLで書かれたプログラムで、 Python. GPLのプログラムは現在Webサービスを対象としています。現在のバージョンのOWASPWSFuzzer HTTPベースでは SOAPサービス が主なターゲットです。

ファズテストの利点

  • ファズテストによりソフトウェアが改善される セキュリティテスト.
  • ファジングで見つかるバグは重大な場合もあり、クラッシュ、メモリ リーク、未処理の例外など、ほとんどの場合ハッカーによって使用されます。
  • 時間とリソースの制限によりテスターがバグに気付かなかった場合、それらのバグもファズ テストで見つかります。

ファズテストの欠点

  • ファジー テストだけでは、全体的なセキュリティの脅威やバグの全体像を把握することはできません。
  • ファズ テストは、一部のウイルス、ワーム、トロイの木馬など、プログラムのクラッシュを引き起こさないセキュリティ脅威に対処する場合にはあまり効果的ではありません。
  • ファジー テストでは、単純な障害または脅威のみを検出できます。
  • 効果的に実行するには、かなりの時間がかかります。
  • ランダム入力で境界値条件を設定するのは非常に問題がありますが、現在では、ユーザー入力に基づく決定論的アルゴリズムを使用することで、ほとんどのテスターがこの問題を解決しています。

まとめ

ソフトウェア エンジニアリングでは、ファズ テストはアプリケーション内のバグの存在を示します。 ファジングでは、アプリケーション内のバグを完全に検出することは保証できません。 ただし、ファズ技術を使用すると、一般的な脆弱性のほとんどが露出されるため、アプリケーションの堅牢性と安全性が保証されます。