web-dev-qa-db-ja.com

ファジングとそのテスト環境への影響

StackOverflowでこの質問をしましたが回答がありませんでした。ファジングはセキュリティと密接に関連しており、脆弱性評価テストでよく使用されるため、ここで頑張ろうと思いました。

現在、カスタム仕様フォーマットに基づいてペイロードを生成するファザーを作成しています。

すべて順調で、最初に書いたバージョンには満足していますが、このファザーを最初のユースケースではないタスクに適用しようとしたときに問題が発生しました。

この問題は、ファザーの入力がテスト環境に与える影響に関連しています。

例えば:

  • テストされたメソッドが可変サイズのバッファを構築する場合、生成された値が2^64そして、メモリ不足(OOM)エラーをトリガーしますか?

  • テストメソッドが変数ファイル名で指定されたファイルを削除すると、生成された値が*とディレクトリ全体が削除されますか?

もちろん、これらはほんの一部の単純な例にすぎませんが、重要なのは、テスト環境でのファジングの影響を軽減する方法を見つけようとしていることです(可能な場合は移植性を保ちます)。

これにより、ファザーをより安全に使用できるようになりますが、ファズテストケースを簡単にチェーンして、他のすべてのペイロードを破壊したり環境を破壊したりせずに並列で実行できるためです。

次のような抜本的な解決策があります:

  • 重大な副作用と結果をもたらす可能性のあるメソッドにファジングを使用しない
  • 特定のユースケースにおける特定の入力のブラックリスト/ホワイトリスト

どちらも私の意見では本当に制限的であり、ブラックボックスファズテストで一般的にファザーを使用することを困難にします。

他の可能な解決策:

  • ヘッドレスでテストを実行VM Vagrantのように
  • dockerのようなLinuxコンテナーでテストを実行する
  • i/O呼び出しなどの特定のsyscallをインターセプトし、それらの入力を無害化する

有効ですが、すべて非常に高レベルであるという問題に苦しんでいます。 SyscallsとDockerには、移植性があまり高くないという問題もあります。

よりプロフェッショナル/エンタープライズのファザーはこの問題をどのように処理しますか?

ブラックボックステストソフトウェアがこの問題をおそらくポータブルな方法で解決したと思いますか?

4
Awake Zoldiek

ファジングだけでなく、あらゆるテストは、ある種のサンドボックス(仮想マシンなど)で実行する必要があります。これには2つの主な利点があります。1)既知の構成にすばやくリセットできること、および2)バグ(ディレクトリのリストに..を含む暴走的な再帰的な削除など)が重要なデータに悪影響を与えないことです。

3
Mark

Sulley Fuzzing Frameworkは、「Fuzzing:Brute Force Vulnerability Discovery」という本とともに発表され、fuzzing.orgで両方の詳細情報を入手できます。

他のファズテストフレームワークは、おそらくSulleyの前、そして数回後は、ゲストVMテクニックを利用します。TavisOrmandyのiofuzz ISOなどのハイパーバイザー自体をテストするVMもあります。本は障害、クラッシュ、および状態(パケットの順序やシーケンスなど)を追跡しているので、完全に読む価値があります。

可能性としては、サリーを対象としたファズテストに関する最新の書籍は、「グレーハットハッキング:倫理的なハッカーのハンドブック」の最新の第4版です。サリーまたはこれらの本のリソースが役に立たない場合は、おそらくあなたが探しているものに正確に集中するのに役立つでしょう。

エンタープライズファズテストスイート、エンジン、さらにはアプライアンスもありますが、代わりに、興味のあるものや構築を検討しているような特殊なファズテストを作成して実行する人に相談することをお勧めします。たとえば、Deja Vu Securityは、仮想マシンのファズテストエンジンを長年にわたって拡張してきました。研究者のベテランの専門知識は、ブログ、コードベース、DEF CON、BlackHat、およびその他の情報セキュリティ会議での講演全体で見つかる可能性があります。

0
atdre