【ばっふぁおーばーふろー】
バッファオーバーフロー とは?
最終更新:
💡 データを書き込む前に、メモリの境界を確かめる
確保したバッファ(データを入れるメモリ領域)の範囲を超えて書き込んでしまう問題。別のデータの破壊やプログラムの異常終了を招き、条件によっては攻撃者によるコード実行につながる。
📌 このページのポイント
- 確保したバッファの範囲を超える書き込みが問題になる
- 影響はデータ破壊・異常終了・不正なコード実行など条件による
- 入力の長さと書き込み先の容量を、適切な単位で確認する
- ASLRやスタックカナリアなどは被害を抑える補助的な防御
バッファオーバーフローってどういう問題?
必ずプログラムを乗っ取られるの?
必ずではないよ。ただし、処理の行き先を決める情報などが壊されると、攻撃者の意図したコードが実行される場合がある。結果はメモリの配置や防御機構などによって変わるんだ。
境界を検査する仕組みは、範囲外のアクセスを防ぐ助けになるよ。ただし、呼び出すネイティブコードなどに問題が残る場合がある。自動で不要なメモリを回収する機能と、境界の検査は別の役割なんだ。
プログラム側ではどう防ぐの?
OSやコンパイラの対策もある?
メモリの配置を予測しにくくするASLR、実行を許さない領域を設けるDEP/NX、特定の上書きを検知するスタックカナリアなどがあるよ。ただし、これらだけで範囲外の書き込みそのものがなくなるわけではないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「バッファオーバーフロー」って出てきたら「メモリの決められた範囲を超えて書き込む問題」と思えばだいたいOK!
📖 おまけ:英語の意味
「Buffer Overflow」 = バッファのあふれ
💬 bufferはデータを一時的に置く領域、overflowはあふれること。ここでは書き込みが領域の境界を越えることを表すよ。