Web教材一覧情報倫理・セキュリティ

バッファオーバーフロー攻撃

キーワード

バッファオーバーフロー攻撃


バッファオーバーフロー攻撃とは

バッファオーバーフロー攻撃とは、プログラムが確保した入力用のデータ領域(バッファ)を超えるサイズのデータを入力することで,攻撃者が仕組んだ悪意のプログラムを実行させる手口です。
 一般にWebサーバなど、インターネット経由でサービスを提供するプログラムが攻撃の対象になります。Webサーバへの攻撃の多くがバッファオーバーフロー攻撃だといわれています。

バッファとは

プログラムは何らかの情報を格納するための領域をメモリ上に確保します。その領域をバッファといいます。バッファの大きさはプログラムで規定しており、OSは関知しません。
 ここで対象になるのは外部からの入力データのためのバッファです。

バッファオーバーフローの発生

プログラムは、入力データのバッファへの追加やバッファからのデータの取出しなどに、そのための関数を使うのが通常です。プログラム(親プログラム)が関数を呼び出すときに、関数の戻り先のアドレス(リターンアドレス)をバッファ内に保管します。

入力データがバッファサイズよりも大きくても、OSはバッファサイズを知らないので、そのままバッファに格納するので、バッファオーバーフローが発生します。そのため、関数のリターンアドレスが壊されてしまいます。そのため、関数から親プログラムに戻ると、親プログラムの正規とは異なる位置から実行されるので、想定外の処理になります。これだけでも標的サーバーは機能停止になります。

悪意プログラムの実行

さらに、リターンアドレスを、攻撃者の仕組んだ悪意のプログラムが入っているアドレスに書き換えることにより、悪意のプログラムが実行してしまいます。
 しかも、Webサーバなど、インターネットで外部サービスをするプログラムは、管理者権限で稼働しているので、このプログラムで悪意のプログラムが実行されると、管理者権限が奪われることになります。

バッファオーバーフロー攻撃対策

バッファオーバーフローを発生させないためには、入力データをバッファに保存するときに、入力データのサイズをチェックする仕組みを組み込んでおく必要があります。
 組み込むのは簡単なことなのですが、プログラム作成時にそこまで留意していないとか、処理効率が落ちるなどのために、組み込まれていないことが多いのです。


本シリーズの目次へ