バッファーオーバーフローとは、アプリケーションが設定したメモリー領域(バッファー領域)より大きなサイズのデータを受け取っても、そのままメモリー領域に書き込んでしまう脆弱性を指す。「バファーオーバーラン」ともいう。様々なアプリケーションに共通する代表的な脆弱性の1つである。

 この脆弱性を悪用し、マルウエアを含むデータを送り付けてアプリケーションに想定外の動きをさせる攻撃を「バッファーオーバーフロー攻撃」と呼ぶ(図1)。

図1●バッファーオーバフローの仕組み
図1●バッファーオーバフローの仕組み
[画像のクリックで拡大表示]

 バッファーオーバーフロー攻撃では、入力データにマルウエアを忍び込ませておき、リターンアドレスにはそのマルウエアのプログラムコードの先頭を指示しておく。こうすると、プログラムがリターンアドレスを読み込むとマルウエアを実行する。

 マルウエアがサーバーの管理者権限を奪うものならば、不正アクセスが自由自在になる。外部に情報を発信するマルウエアであれば、管理者のIDやパスワードが外部に漏れる。

 自前のプログラムであれば、入力されるデータのサイズを常に確認してメモリー領域に書き込ませない処理を組み込むなどすれば、バッファーオーバーフロー攻撃を避けられる。

 オープンソースや製品のプログラムの場合は、脆弱性の発見情報に注意して、新たなセキュリティパッチが公開されたら迅速に適用するなどして、既知の脆弱性を放置しないようにするのが肝要だ