Buffer Overflow / ROP 入門
Cの境界外書き込みがスタック、戻り先、RIP制御へつながる因果を層ごとに追う技術教材。
文字列入力から命令位置が変わるまで
この資料で追う一本の因果
Cソース
→ コンパイルされた命令
→ プロセスの仮想メモリ
→ 関数呼び出しとスタック
→ 戻り先アドレス
→ 配列の境界を越えた書き込み
→ retが壊れた戻り先をRIPへ入れる
→ CPUが別の場所から命令を取得する
ゴールは攻撃手順の暗記ではない。Cの配列に対する書き込みが、なぜCPUの「次に実行する場所」まで変えられるのかを、各層を飛ばずに説明できることである。
本編のモデルはLinux/x86-64の単一スレッドプロセスである。実際のCPUはキャッシュ、TLB、パイプライン、投機実行などを持つが、本編では可視な状態変化に絞る。