前回の記事

 ベンダー(開発者)や攻撃者はどうやって脆弱性を見つけているのか。代表的なのは、「ファジング(fuzzing)」と呼ばれる手法だ。調査対象のソフトウエアに、「ファザー」と呼ばれるツールを使って様々なデータを入力し、その応答から脆弱性を探し出す(図4-1)。

図4-1●想定外のデータを入力して脆弱性を探す「ファジング」
図4-1●想定外のデータを入力して脆弱性を探す「ファジング」
「ファザー(Fuzzer)」あるいは「ファイルファザー(File Fuzzer)」と呼ばれるツールを使い、調査対象のソフトウエアに、通常は入力されないようなデータを入力して出力結果を調べる。異常な結果が返された場合には、その処理をした箇所に脆弱性が存在する可能性があると判断する。
[画像のクリックで拡大表示]

 脆弱性の多くは、ソフトウエアに想定外のデータが入力された場合に露呈する。そこでファジングでは、開発者が想定していないような、非常に長い文字列や非常に大きい値/小さい値、負の値などを次々とソフトウエアに入力する。異常な結果を返したり、ソフトウエアが異常終了したりした場合には、その処理した箇所に、脆弱性が存在する可能性が高い。

 ベンダーなら、ソフトウエアのソースコードを検査して、脆弱性の有無を調べる場合も多い。ソースコードを持たない攻撃者は、ソフトウエアのプログラムをリバースエンジニアリングして、ソースコードを入手する(図4-2)。

図4-2●ソースコードに変換して脆弱性を探す
図4-2●ソースコードに変換して脆弱性を探す
調査したいソフトウエアのプログラム(バイナリーコード)を、変換ツールでソースコードに戻してから脆弱性を探す方法もある。パッチが公開されている場合には、パッチを適用する前と後のソースコードの差分を取ると、脆弱性のある箇所を特定しやすい。
[画像のクリックで拡大表示]

 未知の脆弱性を探すには、ソースコードを丹念に調べなければならないが、ベンダーからパッチや修正版が公開されている脆弱性については、修正前と修正後のソースコードの差分を取れば、修正箇所を特定しやすい。