ファズテストを実行すると、多くのバグ(多くのクラッシュ)が発生しやすくなります。これにより、検出された各バグをトリアージする方法が重要になるため、バグに優先順位を付けて、悪用可能なセキュリティの脆弱性を表す可能性が最も高いバグに集中することができます。
トリアージプロセスを自動化するツールはありますか?私はLinuxのツールに最も興味があります。
Windowsには !exploitable アナライザーがあり、クラッシュしたプログラムの実行を分析して、おそらく悪用可能か、おそらく悪用不可能かなどのバグを表しているかどうかを判断します。Linuxの場合、このようなものはありますか?
CERTのオープンソースLinux Triage Toolsは、ファジングによって発見されたバグのトリアージに使用できます。ツールには、MSECの!exploitableに似ていますがLinux用のGDB拡張が含まれています。
http://www.cert.org/blogs/certcc/2012/04/cert_triage_tools_10.html
これが私が知っている最高のヒューリスティックです。 Valgrind memcheck でプログラムを実行し、Valgrindが出力する警告を確認します。それらをいくつかのカテゴリに分類できます。
無効な書き込み:アドレスを確認してください。アドレスが小さい場合(たとえば、0x0から0xFFFの間)、これはNULLポインター逆参照です。おそらく悪用できず、優先度は低くなります。それ以外の場合、これは範囲外の書き込みです。潜在的に悪用可能で、深刻な優先度の高いバグです。
無効な読み取り:アドレスを確認してください。アドレスが小さい場合(たとえば、0x0から0xFFFの間など)、これはNULLポインター逆参照です。おそらく悪用できず、優先度は低くなります。それ以外の場合、これは範囲外の読み取りです。運が悪いと悪用される可能性がありますが、多くの場合、これらのバグは悪用されません。中優先度と呼びます。
Invalid free():これはダブルフリーのバグである可能性があり、悪用される可能性がかなりあります。優先度が高い。
不一致のfree()/削除/削除[]:潜在的に悪用される可能性がある 、状況によって異なります。中優先度。
条件付きのジャンプまたは移動は、初期化されていない値に依存します:このようなバグは悪用される場合がありますが、悪用が保証されているわけではなく、簡単ではありません。多くの場合、これらは良性の誤検知です。中から低の優先度。
Syscall param ...は、初期化されていないバイトを指しますまたはSyscall param ...は、初期化されていないバイトを含みます:同じ上記のように。中から低の優先度。
...:でソースと宛先が重複しています。悪用される可能性はほとんどありません。優先度は低い。
メモリリーク:(例:まだ到達可能、完全に失われた、間接的に失われた、おそらく失われた):悪用される可能性はほとんどありません。優先度は低い。
これは私が知っている最高のヒューリスティックです。あなたのためにそれを実装するツールは知りませんが、自分でスクリプトを作成するのはそれほど難しくありません。 Linux/Unixシステムのより良いトリアージヒューリスティックまたはツールを知っている人はいますか?
Peach fuzzing platform を使用するのが好きです。これには、クラッシュからのメモリダンプを記録し、それらをファズテストケースにリンクするテストハーネスが含まれています。プロセスがクラッシュすると、テストハーネスはプロセスを再起動し、テストが完了するまで続行します。
私の知る限り!exploitableはかなりユニークです。 Valgrindは、ぶら下がりポインタのような欠陥を特定するのに役立ちます。クラッシュが悪用可能かどうかを判断する昔ながらの方法は、EIP
を調べることです。0x41414141は常に歓迎されます。ただし、スタック上のポインターを上書きしたため、関数が戻る前にアプリケーションがクラッシュする可能性があります。したがって、ebx 0x41414141のような汎用レジスターへの読み取り/書き込みのクラッシュでさえ、おそらく悪用される可能性があり、プロセスはその復帰前にクラッシュしています。 callstackを見て(== --- ==)、破損していないことを確認してください。
American Fuzzy Lopの姉妹プロジェクトの一部には、役立つツールがいくつかあります。特に:
afl-crash-analyzer は、exploitable
GDBスクリプトを実行してクラッシュが悪用可能かどうかをテストするなど、クラッシュするテストケースの分析に役立つ自動化機能を備えています。
crashwalk は、どのクラッシュが再現可能かをテストし、 exploitable
LinuxのGDBスクリプトを使用してそれらをトリアージするための自動化を備えています。 Mac OS X用の同様のスクリプトもあります。