前回の記事
ベンダー(開発者)や攻撃者はどうやって脆弱性を見つけているのか。代表的なのは、「ファジング(fuzzing)」と呼ばれる手法だ。調査対象のソフトウエアに、「ファザー」と呼ばれるツールを使って様々なデータを入力し、その応答から脆弱性を探し出す(図4-1)。
脆弱性の多くは、ソフトウエアに想定外のデータが入力された場合に露呈する。そこでファジングでは、開発者が想定していないような、非常に長い文字列や非常に大きい値/小さい値、負の値などを次々とソフトウエアに入力する。異常な結果を返したり、ソフトウエアが異常終了したりした場合には、その処理した箇所に、脆弱性が存在する可能性が高い。
ベンダーなら、ソフトウエアのソースコードを検査して、脆弱性の有無を調べる場合も多い。ソースコードを持たない攻撃者は、ソフトウエアのプログラムをリバースエンジニアリングして、ソースコードを入手する(図4-2)。
未知の脆弱性を探すには、ソースコードを丹念に調べなければならないが、ベンダーからパッチや修正版が公開されている脆弱性については、修正前と修正後のソースコードの差分を取れば、修正箇所を特定しやすい。