【ヒープオーバーフロー】
ヒープオーバーフロー とは?
公開:
💡 隣の部屋まではみ出す荷物、仕切りを壊して大惨事
📌 このページのポイント
- ヒープに確保したバッファのサイズを超えてデータを書き込む攻撃手法
- 隣接するヒープチャンクのメタデータや関数ポインタを上書きできる
- スタックオーバーフローより攻撃は複雑だが、防御も難しい
- malloc実装の内部構造を悪用してシェルコード実行に持ち込む手口がある
ヒープオーバーフローってバッファオーバーフローとは違うの?
ヒープで起きると何が違うの?
具体的にはどうやって攻撃するの?
たとえばglibcのmalloc実装では、解放済みチャンクが前後のポインタで連結リストを作っているよ。ヒープオーバーフローで隣のチャンクのポインタを書き換えると、次のfree()やmalloc()で任意のアドレスに値を書き込める「unlink攻撃」が成立するんだ。
それって防げないの?
じゃあもう安全なの?
ヒープ風水って面白い名前だね!プログラマはどう対策すればいいの?
📖 おまけ:英語の意味
「Heap Overflow」 = ヒープの溢れ
💬 「heap(ヒープ領域)」が「overflow(あふれる)」という、メモリ破壊の様子がそのまま名前になっているよ