ファジングは、特にC/C++コードで、ある種の脆弱性を検出するための便利で比較的低コストの方法です。
私の質問:どれだけのファジングで十分ですか?標準やベストプラクティスはありますか?
例:MicrosoftのSDLでは、ファイルベースの入力を解析するセキュリティ上重要なコードにファジングを適用する必要があります。 SDLには、最小500,000回のファズテスト、および少なくとも250,000回の「クリーン」な反復が必要です。 ( ここに引用があります。 セキュリティバグが見つかったファズの反復では、「クリーン」な反復の数がゼロにリセットされます。)SDLでは、すべてのネットワークデータを少なくとも100,000回ファジングする必要もあります。 ( これが引用です )
他のガイドライン、または他の組織が使用する基準を知っている人はいますか?
番号や具体的なガイドラインはありませんが、指摘すべき重要な問題はあると思いますが、それらのリンクでは十分に強調されていませんでした。コードカバレッジです。
コードパスの観点から見ると、ファズの繰り返しをすべて同じように実行しても、ほとんど意味がありません。
つまり、「ダムファジング」は多くの異なる入力(ファイル/ネットワーク/ RPC /何でも)を生成する可能性があり、ルックは十分に異なりますが、すべてに同じ効果がありますコードにより、プログラムは同じコードパスを使用します。明らかに、これはあまり効果的ではありません。
Microsoftは、「スマートファジング」を実装する内部ツール(FuzzGuruについて知っています)も開発しました。 ( 数年前のこの議論についてのこの話を見てください )。これにより、MSは、はるかに少ない反復回数で(もちろん、非公式に)、はるかに効率的なファジングを実行できます。これは、反復ごとにコードカバレッジのパーセンテージをはるかに高くできるためです。
いずれの場合でも、ファジングの取り組みから適切な値を確実に得るには、コードカバレッジツールと組み合わせて、ファジング(「スマート」または「ダム」)を実行することが重要です。