バッファオーバーフロー

ソフトウェアに共通するセキュリティホールの一つで、 バッファオーバーフローと呼ばれるものがあります。
バッファとは、プログラムが実行する時に使われる作業用のメモリ領域です。
システムにおいてプログラムが実行する時、プログラムが終わったら 戻り番地を記憶する領域と、バッファの関係が次のようになります。

ここであるプログラムが、 外部から受け取ったデータをバッファに記憶して、作業を行いその結果を外部に 送り返す機能とします。
さて、ここで外部からのデータに制限が無い場合、どうなるでしょうか?
その場合、バッファの領域をはみ出して、戻り番地を記憶する領域まで 上書きしてしまうという現象が起きます。 そうなると、プログラムが正しく動作できず、サービスが停止してしまいます。 (特にC言語で作成されたアプリケーションでは、作り方によってこのようなバグが発生します。)
また、これを利用して「戻り番地記憶領域」に不正のプログラムのスタート番地が 指定されるようにデータを送る不正アクセスがあります。

このようなオーバーフロー(またはバッファオーバーラン)を起こすためには 高度な知識が必要ですが、可能の場合は前に動作していたプログラム実行権限で動作するため、 それが管理者権限の場合、完全な乗っ取が行われてしまいます。 以前にIISに対して、これを悪用したCodeRedと呼ばれるワームの不正がありました。