ファジングとは?

ファジングとは

はじめに: ファジングとは?

2014 年、中国のハッカー 地域医療システムへのハッキング米国の営利病院チェーンである が、4.5 万人の患者データを盗みました。 ハッカーは、ハッキングの数か月前に OpenSSL 暗号化ライブラリで発見された Heartbleed と呼ばれるバグを悪用しました。

Heartbleed は、事前チェックに合格するのに十分な有効な不正なリクエストを送信することで、攻撃者がターゲットにアクセスできるようにする攻撃ベクトルのクラスの例です。 アプリのさまざまな部分に携わる専門家は、そのセキュリティを確保するために最善を尽くしますが、開発中にアプリを壊したり、脆弱にしたりする可能性のあるすべてのまれなケースを考えることは不可能です.

ここで「ファジング」の出番です。

ファジング攻撃とは?

ファジング、ファジング テスト、またはファジング攻撃は、ランダム、予期しない、または無効なデータ (ファズと呼ばれる) をプログラムにフィードするために使用される自動化されたソフトウェア テスト手法です。 プログラムは、バッファ オーバーフロー、クラッシュ、メモリ リーク、スレッド ハング、読み取り/書き込みアクセス違反などの異常または予期しない動作を監視されます。 次に、ファジング ツールまたはファザーを使用して、異常な動作の原因を明らかにします。

ファジングは、すべてのシステムに発見されるのを待っているバグが含まれており、それを行うのに十分な時間とリソースが与えられるという前提に基づいています。 ほとんどのシステムには、非常に優れたパーサーまたは入力検証があり、 サイバー犯罪者 プログラムの架空のバグを悪用することから。 ただし、前述したように、開発中にすべてのコーナー ケースをカバーすることは困難です。

ファザーは、構造化された入力を受け取るプログラムや、ある種の信頼境界を持つプログラムで使用されます。 たとえば、PDF ファイルを受け入れるプログラムには、ファイルの拡張子が .pdf であることを確認するための検証と、PDF ファイルを処理するためのパーサーがあります。

効果的なファザーは、これらの境界を通過するのに十分な有効な入力を生成できますが、プログラムのさらに下で予期しない動作を引き起こすのに十分な無効な入力を生成できます。 これは重要です。検証を通過できても、それ以上の害がなければ意味がないからです。

ファザーは、SQL インジェクション、クロスサイト スクリプティング、バッファ オーバーフロー、サービス拒否攻撃などと非常によく似た攻撃ベクトルを発見します。 これらの攻撃はすべて、予期しない、無効な、またはランダムなデータをシステムに送り込んだ結果です。 

 

ファザーの種類

ファザーは、いくつかの特性に基づいて分類できます。

  1. 攻撃対象
  2. 毛羽立ちの作り方
  3. 入力構造の認識
  4. プログラム構造の認識

1.攻撃対象

この分類は、ファザーがテストに使用されているプラ​​ットフォームの種類に基づいています。 ファザーは、ネットワーク プロトコルおよびソフトウェア アプリケーションで一般的に使用されます。 各プラットフォームには特定の種類の入力があるため、さまざまな種類のファザーが必要です。

たとえば、アプリケーションを扱う場合、すべてのファジングの試みは、ユーザー インターフェイス、コマンドライン ターミナル、フォーム/テキスト入力、ファイルのアップロードなど、アプリケーションのさまざまな入力チャネルで発生します。 したがって、ファザーによって生成されるすべての入力は、これらのチャネルと一致する必要があります。

通信プロトコルを処理するファザーは、パケットを処理する必要があります。 このプラットフォームをターゲットとするファザーは、偽造パケットを生成したり、傍受したパケットを変更して再生するプロキシとして機能したりすることさえできます。

2. ファズの作成方法

ファザーは、ファジングするデータの作成方法に基づいて分類することもできます。 歴史的に、ファザーはゼロからランダムなデータを生成することによってファズを作成しました。 これは、この技術の創始者であるバートン・ミラー教授が最初に行った方法です。 このタイプのファザーは、 世代ベースのファザー.

ただし、理論的には信頼境界をバイパスするデータを生成することはできますが、そうするにはかなりの時間とリソースが必要です。 したがって、この方法は通常、入力構造が単純なシステムに使用されます。

この問題の解決策は、有効であることがわかっているデータを変更して、信頼境界を通過するのに十分有効でありながら、問題を引き起こすほど無効なデータを生成することです。 これの良い例は、 DNS ファザー これは、ドメイン名を受け取り、指定されたドメインの所有者を標的とする潜在的に悪意のあるドメインを検出するために、ドメイン名の大きなリストを生成します。

このアプローチは、前のアプローチよりもスマートであり、可能な順列を大幅に絞り込みます。 この方法を使用するファザーが呼び出されます 突然変異ベースのファザー

遺伝的アルゴリズムを利用して、脆弱性を根絶するために必要な最適なファズ データに収束する XNUMX 番目の最近の方法があります。 プログラムに供給されたときの各テストデータのパフォーマンスを考慮して、ファズデータを継続的に改良することによって機能します。 

パフォーマンスの最も低いデータ セットはデータ プールから削除され、最高のデータ セットは変更または結合されます。 次に、新しい世代のデータを使用して、再びファジング テストを行います。 これらのファザーは、 進化的突然変異ベースのファザー。

3. 入力構造の認識

この分類は、ファザーがプログラムの入力構造を認識して積極的に使用してファジング データを生成するかどうかに基づいています。 あ 愚かなファザー (プログラムの入力構造を認識しないファザー) は、ほぼランダムな方法でファズを生成します。 これには、世代ベースのファザーと突然変異ベースのファザーの両方が含まれる可能性があります。 


ファザーにプログラムの入力モデルが提供されている場合、ファザーは、提供された入力モデルと一致するようにデータの生成または変更を試みることができます。 このアプローチにより、無効なデータの生成に費やされるリソースの量がさらに削減されます。 このようなファザーは、 スマートファザー.

4. プログラム構造の認識

ファザーは、ファジングしているプログラムの内部動作を認識しているかどうかに基づいて分類することもでき、その認識を使用してファジング データの生成を支援します。 プログラムの内部構造を理解せずにファザーを使用してプログラムをテストすることを、ブラックボックス テストと呼びます。 

ブラックボックス テスト中に生成されるファジング データは、ファジングの効果を監視し、それを使用することによって「学習」する進化的突然変異ベースのファザーでない限り、通常はランダムです。 情報 ファズ データ セットを改良します。

一方、ホワイトボックス テストでは、プログラムの内部構造のモデルを使用してファズ データを生成します。 このアプローチにより、ファザーはプログラム内の重要な場所に到達してテストできます。 

一般的なファジング ツール

ファジングが多い 豊富なツール群 ペンテスターに​​よって使用されています。 最も人気のあるもののいくつかは次のとおりです。

ファジングの制限

ファジングは非常に便利な侵入テスト手法ですが、欠点がないわけではありません。 これらのいくつかは次のとおりです。

  • 実行にはかなりの時間がかかります。
  • プログラムのブラック ボックス テスト中に発見されたクラッシュやその他の予期しない動作は、分析やデバッグが不可能ではないにしても、難しい場合があります。
  • スマート ミューテーション ベースのファザーのミューテーション テンプレートを作成するには、時間がかかる場合があります。 場合によっては、入力モデルが独自仕様または未知のものであるために、それが不可能な場合もあります。

 

それでも、悪者より先にバグを発見したい人にとっては、非常に便利で必要なツールです。

まとめ

ファジングは、ソフトウェアの脆弱性を発見するために使用できる強力な侵入テスト手法です。 ファザーにはさまざまな種類があり、常に新しいファザーが開発されています。 ファジングは非常に便利なツールですが、制限もあります。 たとえば、ファザーは非常に多くの脆弱性しか検出できず、リソースを大量に消費する可能性があります。 ただし、この驚くべきテクニックを自分で試してみたい場合は、 当社のプラットフォームで使用できる無料の DNS Fuzzer API。 

何を求めている? 

今日からファジングを始めましょう!