用意しておいた領域(バッファ)の大きさを上回る量のデータを書き込んでしまい、領域の範囲外を不正に書き換えてしまうことです。
たとえば、配列の末尾の要素よりも後ろにデータを書き込むとすると、バッファオーバーフローになります。
バッファオーバーフローが起こると、そのバッファが使っているメモリ領域の外側に記録されていた内容が、プログラマーの想定していなかった状態に書き換えられてしまうため(たとえば、たまたまその場所に配置されていた変数の値が書き換えられる)、プログラムの動作に何かしらの悪影響を起こします。
プログラミング言語の種類や、コンパイラによっては、コンパイル時点で検出できるバッファオーバーフローをエラーにしたり、実行時に境界検査を行い、実際に不正な書き込みを行う前に例外を発生させるなどの方法で知らせたりする場合もあります。
一方で、C言語や C++(の言語機能としての配列)のように、標準仕様としての防御策をもたず、プログラマーに対策を任せているものもあります。
バッファオーバーフローは外部からの攻撃に悪用される恐れがあり、ソフトウェアの代表的な脆弱性の1つとして知られています。たとえば、外部から与えられたデータを使うプログラムでは、そのデータを受け取るために確保しておいたバッファに対して、それを上回る大きさのデータが与えられれば、バッファオーバーフローを引き起こします。バッファの大きさを上回るデータを拒否したり、カットしたり、あるいはバッファの側をデータ量に応じて拡張するといった対策が必要です。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |