JIT 喷射
JIT 喷射 是什么?
JIT 喷射一种利用 JIT 编译器在合法生成的可执行内存页中夹带攻击者选定的可执行字节的漏洞利用技术。
JIT 喷射是一种内存破坏漏洞利用技术,针对带有即时编译器(JIT)的运行时,例如 V8、SpiderMonkey、JSC 等 JavaScript 引擎,.NET CLR,JVM,ActionScript,以及 eBPF。攻击者构造高层语言代码,使其 JIT 编译后的输出按原始字节解析时正好是目标本机指令,从而将载荷夹带进 JIT 产生的 RWX 页面。当配合可劫持控制流的内存破坏漏洞时,攻击者即可跳转到这些喷射出来的 gadget,因为内存被合法标记为可执行,所以能绕过 DEP/NX。现代缓解措施包括常量盲化、随机化代码区域、W^X 写/执行分离、ASLR 和 CFI。
● 示例
- 01
在 JavaScript 中喷射大量乘法运算,使其立即数常量编码出 shellcode。
- 02
利用 ActionScript JIT 在 Flash Player 的 JIT 区域内布置 NOP sled 与 shellcode。
● 常见问题
JIT 喷射 是什么?
一种利用 JIT 编译器在合法生成的可执行内存页中夹带攻击者选定的可执行字节的漏洞利用技术。 它属于网络安全的 应用安全 分类。
JIT 喷射 是什么意思?
一种利用 JIT 编译器在合法生成的可执行内存页中夹带攻击者选定的可执行字节的漏洞利用技术。
JIT 喷射 是如何工作的?
JIT 喷射是一种内存破坏漏洞利用技术,针对带有即时编译器(JIT)的运行时,例如 V8、SpiderMonkey、JSC 等 JavaScript 引擎,.NET CLR,JVM,ActionScript,以及 eBPF。攻击者构造高层语言代码,使其 JIT 编译后的输出按原始字节解析时正好是目标本机指令,从而将载荷夹带进 JIT 产生的 RWX 页面。当配合可劫持控制流的内存破坏漏洞时,攻击者即可跳转到这些喷射出来的 gadget,因为内存被合法标记为可执行,所以能绕过 DEP/NX。现代缓解措施包括常量盲化、随机化代码区域、W^X 写/执行分离、ASLR 和 CFI。
如何防御 JIT 喷射?
针对 JIT 喷射 的防御通常结合技术控制与运营实践,详见上方完整定义。
JIT 喷射 还有哪些其他名称?
常见的别称包括: 即时编译喷射。
● 相关术语
- appsec№ 1182
类型混淆漏洞
一种内存安全漏洞,代码以与对象实际分配类型不兼容的类型访问对象,通常可导致任意读写或代码执行。
- appsec№ 129
浏览器沙箱
操作系统层的隔离机制,限制浏览器的渲染进程和辅助进程,防止被攻陷的网页代码读取文件系统或其他应用。
- vulnerabilities№ 1193
释放后使用
程序在内存被释放之后仍继续使用该内存的安全缺陷,通常使攻击者得以控制对象状态并劫持执行。
- attacks№ 471
堆喷射
一种利用原语,通过在堆中铺设大量相同的载荷副本,使被破坏的指针几乎肯定落在攻击者控制的数据上。
- appsec№ 1075
推测执行侧信道
一类微架构漏洞,CPU 沿本不应执行的路径推测执行指令后,通过缓存和预测器泄露数据。
- vulnerabilities№ 399
漏洞利用
利用某个漏洞、引发代码执行、权限提升或信息泄露等非预期行为的代码、数据或技术。