バッファオーバーフロー(ばっふあおーばーふろー)
最終更新:2026/4/27
バッファオーバーフローとは、メモリのバッファ領域を超えてデータが書き込まれる現象、またはそれを可能にする脆弱性のことである。
別名・同義語 バッファオーバーラン境界越え
ポイント
バッファオーバーフローは、セキュリティ上の重大な問題を引き起こす可能性があり、攻撃者がシステムの制御を奪う手段として利用されることがある。
バッファオーバーフローとは
バッファオーバーフローは、コンピュータプログラムにおけるセキュリティ上の脆弱性の一つです。プログラムがデータを格納するために確保したメモリ領域(バッファ)の容量を超えて、データを書き込もうとすることで発生します。この際、隣接するメモリ領域にデータが上書きされ、プログラムの誤動作やクラッシュ、最悪の場合には悪意のあるコードの実行を許してしまう可能性があります。
バッファオーバーフローの発生原因
バッファオーバーフローは、主に以下の原因で発生します。
- 入力値の検証不足: プログラムがユーザーからの入力値や外部からのデータに対して、適切な長さや形式の検証を行わない場合。
- 文字列操作関数の誤用: C言語などのプログラミング言語において、文字列操作関数(strcpyなど)を使用する際に、バッファのサイズを考慮せずに使用した場合。
- 配列の境界チェックの欠如: 配列にアクセスする際に、配列の範囲を超えないようにチェックが行われていない場合。
バッファオーバーフローの対策
バッファオーバーフローを防ぐためには、以下の対策が有効です。
- 入力値の検証: ユーザーからの入力値や外部からのデータに対して、長さや形式の検証を徹底する。
- 安全な関数の使用: strcpyなどの危険な関数ではなく、strncpyなどの安全な関数を使用する。
- 配列の境界チェック: 配列にアクセスする際に、配列の範囲を超えないようにチェックを行う。
- コンパイラのセキュリティ機能の活用: コンパイラの提供するバッファオーバーフロー検出機能や保護機能を活用する。
- アドレス空間配置のランダム化 (ASLR): メモリのアドレス配置をランダム化することで、攻撃者がバッファオーバーフローを利用して悪意のあるコードを実行することを困難にする。
バッファオーバーフローの事例
過去には、バッファオーバーフローを悪用した多くのセキュリティインシデントが発生しています。有名な事例としては、Code RedやNimdaといったワームの拡散が挙げられます。これらのワームは、バッファオーバーフローの脆弱性を利用して、サーバーを乗っ取り、他のサーバーに感染を広げました。