面向跳转的编程(JOP)
面向跳转的编程(JOP) 是什么?
面向跳转的编程(JOP)Bletsch 等人在 2011 年提出的代码复用利用技术,通过一个 dispatcher 串联以间接跳转结尾的 gadget,作为 ROP 的替代方案,无需依赖 ret。
JOP 由 Bletsch、Jiang、Freeh 和 Liang 在 2011 年提出,是 ROP 的一般化形式。它不再使用以 ret 结尾的 gadget,而是用以 jmp [rax] 等间接跳转结尾的 gadget,并依靠攻击者控制的 dispatcher 在 gadget 地址表上推进。由于控制流不再依赖调用栈,因此 JOP 能绕过 shadow stack、stack canary 等针对 ret 链的旧式缓解。已有针对 Windows、Linux 与嵌入式系统的可用 JOP 链,通常结合信息泄露绕过 ASLR。现代硬件防御包括 Intel CET/IBT 与 ARM BTI,通过限制间接跳转目标来打断朴素的 JOP 链。
● 示例
- 01
针对加固了调用栈但间接跳转不受限的嵌入式固件构建 JOP 链。
- 02
在 Linux 上结合 JOP dispatcher 与 libc 调用 execve,绕过仅有 shadow stack 的防御。
● 常见问题
面向跳转的编程(JOP) 是什么?
Bletsch 等人在 2011 年提出的代码复用利用技术,通过一个 dispatcher 串联以间接跳转结尾的 gadget,作为 ROP 的替代方案,无需依赖 ret。 它属于网络安全的 攻击与威胁 分类。
面向跳转的编程(JOP) 是什么意思?
Bletsch 等人在 2011 年提出的代码复用利用技术,通过一个 dispatcher 串联以间接跳转结尾的 gadget,作为 ROP 的替代方案,无需依赖 ret。
面向跳转的编程(JOP) 是如何工作的?
JOP 由 Bletsch、Jiang、Freeh 和 Liang 在 2011 年提出,是 ROP 的一般化形式。它不再使用以 ret 结尾的 gadget,而是用以 jmp [rax] 等间接跳转结尾的 gadget,并依靠攻击者控制的 dispatcher 在 gadget 地址表上推进。由于控制流不再依赖调用栈,因此 JOP 能绕过 shadow stack、stack canary 等针对 ret 链的旧式缓解。已有针对 Windows、Linux 与嵌入式系统的可用 JOP 链,通常结合信息泄露绕过 ASLR。现代硬件防御包括 Intel CET/IBT 与 ARM BTI,通过限制间接跳转目标来打断朴素的 JOP 链。
如何防御 面向跳转的编程(JOP)?
针对 面向跳转的编程(JOP) 的防御通常结合技术控制与运营实践,详见上方完整定义。
面向跳转的编程(JOP) 还有哪些其他名称?
常见的别称包括: JOP。
● 相关术语
- attacks№ 753
one_gadget RCE
CTF 与真实利用中常用的捷径,只要满足寄存器与栈条件,就能用一个 libc 地址直接得到 shell。
- appsec№ 217
控制流完整性(CFI)
控制流完整性(CFI)将程序的间接调用和返回限制在预先计算的合法目标集合内,阻断 ROP 与 JOP 等控制流劫持利用。
- appsec№ 064
地址空间布局随机化(ASLR)
ASLR 在每次运行时随机化代码、栈、堆和共享库的内存地址,使攻击者无法可靠预测利用所需的目标地址。
- vulnerabilities№ 667
内存破坏
对一类漏洞的统称:程序在预期内存范围之外读写,破坏类型安全、控制流或数据完整性。