F5 GLOSSARY

バッファオーバーフロー

バッファ オーバーフローとは、コンピューター上で動くプログラムが、そのプログラムに与えられた一時記憶領域(バッファ)の範囲を超えた場所に、データを格納してしまうことを意味します。バッファ オーバーフローによって「溢れたデータ」は、その領域に本来存在すべきだったデータを上書きしてしまい、コンピューターの動作に深刻なダメージを与える危険性があります。「バッファ オーバーラン」とも呼ばれています。

バッファ オーバーフローは、C言語やC++言語のように、十分なメモリー管理機能を持たない言語で記述されたプログラムで、発生しやすい現象です。多くの場合、入力されたデータのサイズをチェックせず、そのまま処理するプログラムによって引き起こされます。

例えばC言語の場合、標準入出力関数である「gets関数」は、バッファ長のチェックを行わずに標準入力をバッファに書き込むため、バッファ オーバーフローを引き起こす危険性があります。

このようなプログラムのバグを利用し、攻撃を行う手法も存在します。この攻撃では、単純にバッファ オーバーフローを起こしてコンピューターをダウンさせるだけではなく、オーバーフローした領域に不正プログラムを書き込んで実行する、root権限を不正に取得する、といったことまで行うのが一般的です。

バッファ オーバーフローを利用した攻撃は古くから知られており、これに対応するためのプログラム修正も進んでいます。例えばC言語によるプログラム開発では、バッファ オーバーフロー対策用のライブラリである「libsafe」や、C言語コンパイラを拡張した「StackGuard」等の利用によって、問題を回避できるようになっています。しかし最近でも、Windowsソフトウェア開発用のオープンソース ライブラリである「DXライブラリ」でバッファ オーバーフローの脆弱性が報告される(※1)等、完全に回避可能な状況にあるとは言えません。

この問題の解決手段として有効なのが、アプリケーション ファイアウォールの活用です。アプリケーション ファイアウォールはアプリケーション レベルの通信を監視し、攻撃とみなされる通信を遮断することが可能です。この種の機能を提供する製品としては「F5 BIG-IP」が挙げられます。

<脚注>
※1 https://www.ipa.go.jp/security/ciadr/vul/20160105-jvn.html


< Return to the glossary