情報セキュリティ
ウェブアプリケーションを含む、あらゆるプログラムは、指示された処理を行うためにメモリ上に自身が使用する領域を確保します。プログラムが入力されたデータを適切に扱わない場合、プログラムが確保したメモリの領域を超えて領域外のメモリを上書きされ、意図しないコードを実行してしまう可能性があります。このような問題を「バッファオーバーフローの脆弱性」と呼び、この問題を悪用した攻撃を「バッファオーバーフロー攻撃」と呼びます。
バッファオーバーフローにより、発生しうる脅威は次のとおりです。
バッファオーバーフローはC、C++、アセンブラなどの直接メモリを操作できる言語で記述されている場合に起こります。これらの言語を使って開発されたウェブアプリケーションを利用しているサイトは注意が必要です。
現在のウェブアプリケーションのほとんどはPHPやPerl、Javaなどの直接メモリを操作できない言語を使っており、バッファオーバーフローの脆弱性の影響を受ける可能性は低いといえますが、PHPやPerl、Javaのライブラリの中にはバッファオーバーフローの脆弱性が存在していたものがあります。
バッファオーバーフローの脆弱性がウェブサイトに見つかったという届出を受けたことはありません。ソフトウェア製品においては、全体の数パーセント程度と多くはありませんが、継続的に届出を受けています。下記は、IPAが届出を受け、同脆弱性の対策が施されたソフトウェア製品の例です。
ウェブアプリケーションを直接メモリ操作できない言語で記述することで、バッファオーバーフローの脆弱性が作りこまれることを防げます。現在のウェブアプリケーションの多くは直接メモリを操作できない言語(PHP、Perl、Javaなど)で記述されており、これらの言語で作成されたウェブアプリケーションではバッファオーバーフローの問題は発生しません。
プログラムの内部でC、C++、アセンブラなどの直接メモリにアクセスできる言語で記述された独自のプログラムを呼び出す場合は、その呼び出されるプログラムにバッファオーバーフローの脆弱性が存在する可能性があります。この直接メモリ操作可能な言語で記述作成された部分を最小限にし、その部分にバッファオーバーフローの脆弱性がないことを集中的に確認します。
一般に流通しているライブラリを使用する場合、古いライブラリの中にはバッファオーバーフローの脆弱性が存在する場合があるので、脆弱性が修正されたバージョンを使用してください。