「バッファオーバーフロー」とは、バッファー(データの一時記憶領域)に、想定以上の長さのデータが入力されてしまう現象である。「バッファオーバーラン」ともいう。
「バッファオーバーフロー」とは、バッファー(データの一時記憶領域)に、想定以上の長さのデータが入力されてしまう現象である。「バッファオーバーラン」ともいう。バッファーの制御がプログラマーに依存するC言語/C++言語のプログラムで意図せずに起きることが多い。
悪意のある攻撃者は、バッファオーバーフローを利用することで、意図的に許容量を超えるデータを送り付けてシステムの機能を停止させることができる。また、データがあふれ出たことによる意図しないプログラムの動きを利用して、悪意のあるプログラムを実行することもできる。
このバッファオーバーフローを利用した攻撃の例として、スタックとヒープの領域を対象とした攻撃が挙げられる。スタックを対象とした攻撃では、あふれた値で関数の戻り先アドレスを上書きすることにより、制御を奪うことができる。ヒープを対象とした攻撃では、ヒープのメモリ構造を壊したり、偽装することで制御を奪ったりすることができる。
バッファオーバーフローは最も代表的なセキュリティホールであるため、多くの対策が講じられている。
開発工程時に、バッファオーバーフローを起こす危険性のある関数の利用を避ける。バッファオーバーフロー対策用のライブラリや関数を利用する。コンパイラの持つセキュリティ機構を適用する。運用環境ではアドレス空間配置のランダム化によって攻撃を難しくするなどが挙げられる。
【2004/1/1】初版公開。
【2019/1/28】最新情報に合わせて内容を書き直しました(セキュリティ・キャンプ実施協議会 著)。
Copyright © ITmedia, Inc. All Rights Reserved.