とある企業の情報システム部門。頼りなかった若手社員の通称「ネコSE」も、セキュリティーに関する豊富な知識と経験を持つ「センパイ」のおかげで、少しずつ成長してきた。セキュリティー対策を極めるには、攻撃の具体的な手口を知ることも重要だ。これまで数々の手口を見てきたが、今回はいよいよ最終回。紹介するのは「バッファーオーバーフロー▼」の仕組みだ。攻撃者が入力データに仕込んだ攻撃コードがどのように実行されるのかを順を追って見ていこう。
ネコSE:うーん、うーん。
センパイ:珍しく考え込んでいるね。どうしたんだい?
ネコSE:それが、何を考えていたのか分からなくなってしまって。
センパイ:ははあ、それはバッファーオーバーフローの状態だね。ちょっと休憩するといいよ。
ネコSE:バッファーオーバーフローって何ですか。
センパイ:バッファーという言葉の意味は分かるかい?
ネコSE:例えば、プロジェクトのスケジュールを決めるときに「バッファーを設けておこう」とか言いますよね。「余裕」みたいな意味ですか?
センパイ:うん、だいたいそういう感じだ。コンピューター分野では、一時的な記憶領域のことをバッファーと呼ぶ。バッファーは、プログラムが必要に応じてメモリー上に確保する。入力データなどを入れておくことが多いね。
ネコSE:実際にはどんな感じで使われるんですか。
センパイ:例えば、プリンターの印刷速度は、コンピューターの印刷命令の速度よりも遅いのが普通だよね。そこで、印刷するデータをいったんバッファーにためておき、印刷を順次進めるんだ。
ネコSE:オーバーフローは「あふれる」という意味ですよね。
センパイ:そうだよ。バッファーよりも大きいデータをバッファーに入れようとするとあふれてしまう。そうなると、あふれ出たデータがバッファーの外のメモリーの内容を壊してしまう(図1)。その結果、処理が正常に行われなくなることがあるんだ。猫瀬君も考え過ぎて、処理が正常に行えなくなっていたわけさ。
英語ではbuffer overflowなので「BOF」と略すこともある。