@IT:Cの脆弱性とバッファオーバーフロー(後編) ~ 具体的なサンプルをベースにした解説で、よくわかりました。感動。

@IT: Cの脆弱性とバッファオーバーフロー(後編).

オーバーフローがどうして脆弱性になるのか、具体的なサンプル(ISCのDHCPのコード、よく使われるソフト)を使って説明してある。平明なので、よく分かる。授業もこうやるといいのかな、と思いつつ、感動。 曰く、

ここで問題になるのは、サブネットマスク情報をローカル変数にコピーする部分です。DHCPメッセージ中のサブネットマスク情報は、図3のオプション部分のフォーマットに従って、以下のように表現されています。

~~~ 図4 subnet maskオプションのフォーマット(RFC2132、§3.3) ~~~

オプション部分について記載しているRFC2132では、データサイズを表す「Lenフィールド」の値は「定数4」と明記されています。IPv4アドレスのバイト長ですね。

では、サブネット情報の扱いで問題となった部分のコードを以下に示します。ここでは、受け取ったDHCPメッセージの中からサブネットマスク情報を取り出し(lookup_option()およびevaluate_option_cache())、そのデータをローカル変数netmaskのiabufフィールドに、memcpy関数を使ってコピーしています。

以下略。