Buffer Overflow / ROP 入門

Cの境界外書き込みがスタック、戻り先、RIP制御へつながる因果を層ごとに追う技術教材。

文字列入力から命令位置が変わるまで

この資料で追う一本の因果

Cソース
  → コンパイルされた命令
  → プロセスの仮想メモリ
  → 関数呼び出しとスタック
  → 戻り先アドレス
  → 配列の境界を越えた書き込み
  → retが壊れた戻り先をRIPへ入れる
  → CPUが別の場所から命令を取得する

ゴールは攻撃手順の暗記ではない。Cの配列に対する書き込みが、なぜCPUの「次に実行する場所」まで変えられるのかを、各層を飛ばずに説明できることである。

本編のモデルはLinux/x86-64の単一スレッドプロセスである。実際のCPUはキャッシュ、TLB、パイプライン、投機実行などを持つが、本編では可視な状態変化に絞る。

章一覧