バッファ(メモリ容量)溢れ。バッファ・オーバーフローは、近年のサーバへの不正侵入事件でしばしば利用されています。プログラムは、一般にあらかじめ一定のサイズのバッファ(メモリ容量)を用意して、そこに入力したデータを読み込みます。一般に、入力されるデータの長さは不定ですから、このサイズをチェックしてバッファのサイズを超えないようにしています。しかし、プログラム・バッファのサイズを超えるデータが入力された場合、プログラム中のメモリ領域が破壊されることになりますから、一般にプログラムは誤動作ないしは異常終了することになります。これだけでも、サーバ・プログラムが落ちる(停止する)ことになります。 より巧妙なサービス妨害(DoS:Denial of Service)攻撃では、意図する特定のアクションを実行させることができます。現在の主なCPU(コンピュータの中央演算処理装置)のアーキテクチャ(構造)では、プログラムはある種のバッファをスタック(CPUが一時的に情報を蓄えておく特別なメモリ領域)上に取ります。スタックはサブルーチンを呼び出す際に戻りのアドレスを置くエリアなので、バッファ・オーバーフローを起こさせる場合、適切なデータを与えると、この戻りアドレスを上書きすることができます。CPUが命令を実行してサブルーチンから戻る際に、この上書きされたアドレスにジャンプすると、そのアドレスには、バッファ溢れによって送り込まれたCPUの命令コードが用意されていて、それを実行させられてしまうわけです。 その結果として、サーバ・プログラムが動作しているのと同じ権限で任意のコマンドが実行できることになります。サーバ・プログラムがroot権限(ルート権限。UNIXにおける管理者の権限)などの強い権限で動いている場合は、これは直ちに致命的な結果を招き、例えば外部からrootでのアクセス権限を取られるということになります。