ジャンプ指向プログラミング(JOP)
ジャンプ指向プログラミング(JOP) とは何ですか?
ジャンプ指向プログラミング(JOP)Bletsch らが 2011 年に提案したコード再利用攻撃。間接ジャンプで終わるガジェットをディスパッチャ経由で連結し、ret を使わない ROP 代替を提供する。
JOP は 2011 年に Bletsch、Jiang、Freeh、Liang によって ROP の一般化として提案されました。ret で終わるガジェットの代わりに jmp [rax] のような間接ジャンプで終わるガジェットを用い、攻撃者制御のディスパッチャがガジェットアドレスのテーブルを順次たどります。呼び出しスタックを制御に使わないため、ret 連鎖を狙う shadow stack や stack canary などの旧来の対策を回避できます。実際の JOP 連鎖は Windows・Linux・組み込みで実証されており、情報リークと組み合わせて ASLR を破ることが多いです。現代のハードウェア対策には Intel CET/IBT、ARM BTI があり、間接分岐先を制限してナイーブな JOP 連鎖を断ち切ります。
● 例
- 01
呼び出しスタックは強化されているが間接ジャンプが自由な組み込みファームに対し JOP 連鎖を構築する。
- 02
Linux で JOP ディスパッチャと libc を組み合わせ、shadow stack のみの防御を回避して execve を呼ぶ。
● よくある質問
ジャンプ指向プログラミング(JOP) とは何ですか?
Bletsch らが 2011 年に提案したコード再利用攻撃。間接ジャンプで終わるガジェットをディスパッチャ経由で連結し、ret を使わない ROP 代替を提供する。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
ジャンプ指向プログラミング(JOP) とはどういう意味ですか?
Bletsch らが 2011 年に提案したコード再利用攻撃。間接ジャンプで終わるガジェットをディスパッチャ経由で連結し、ret を使わない ROP 代替を提供する。
ジャンプ指向プログラミング(JOP) はどのように機能しますか?
JOP は 2011 年に Bletsch、Jiang、Freeh、Liang によって ROP の一般化として提案されました。ret で終わるガジェットの代わりに jmp [rax] のような間接ジャンプで終わるガジェットを用い、攻撃者制御のディスパッチャがガジェットアドレスのテーブルを順次たどります。呼び出しスタックを制御に使わないため、ret 連鎖を狙う shadow stack や stack canary などの旧来の対策を回避できます。実際の JOP 連鎖は Windows・Linux・組み込みで実証されており、情報リークと組み合わせて ASLR を破ることが多いです。現代のハードウェア対策には Intel CET/IBT、ARM BTI があり、間接分岐先を制限してナイーブな JOP 連鎖を断ち切ります。
ジャンプ指向プログラミング(JOP) からどのように防御しますか?
ジャンプ指向プログラミング(JOP) に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
ジャンプ指向プログラミング(JOP) の別名は何ですか?
一般的な別名: JOP。
● 関連用語
- attacks№ 753
one_gadget RCE
CTF や実戦の攻撃で使われる近道で、レジスタやスタックの条件さえ満たせば libc 内の 1 つのアドレスを呼ぶだけでシェルを得られる手法。
- appsec№ 217
コントロールフロー整合性(CFI)
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- vulnerabilities№ 667
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。