Home | Notifications | New Note | Local | Federated | Search | Logout

Note Detail


Fadis@fadis@mstdn.jp (2026-10-10 22:05:40)
太古の昔、攻撃者はスタックを壊せるバグを起点としてメモリ上に実行したいコードを置いてスタック上のリターンアドレスを書き換える事でそのコードを実行させる事で任意のコードを実行していた。こうした攻撃を防ぐために現代のOSの下では殆どのメモリは「書けるけど実行できない」か「実行できるけど書けない」設定がなされる。
こうした設定がなされていても、リターンアドレスを既存のコードの好きな位置に書き換える事は出来るため、既存の実行可能バイナリの一部を継ぎ接ぎして任意のコードを実行するReturn-oriented programming(略してROP)が行われるようになった。
ROPを防ぐために現代のx86_64 CPUにはShadow Stackが備わっている。Shadow Stackは関数呼び出し時にスタックに積んだリターンアドレスを書き換え不能な別のスタックにも積んでおき、return時に2つのスタックの値が一致しているかをチェックする。
Reply