ChakraJIT与CFG绕过:攻破InternetExplorer和Edge的安全防护

0 下载量 91 浏览量 更新于2024-08-28 收藏 210KB PDF 举报
本文主要探讨了如何在攻击Internet Explorer和Edge浏览器时绕过Microsoft的控制流防护(CFG)机制,重点介绍了基于ChakraJIT的绕过策略。文章假设攻击者已经拥有读写内存的权限。 CFG(Control Flow Guard)是微软引入的一种安全特性,用于防止控制流劫持攻击,通过检查间接调用和跳转指令的目标地址来增强系统安全性。然而,CFG并不能完全阻止攻击,如堆栈溢出(ROP,Return-Oriented Programming)攻击依然可行,且只适用于使用CFG编译的二进制文件。 ChakraJIT是微软ChakraJavaScript引擎的一部分,负责生成优化的即时(JIT)代码。其工作流程包括多个阶段,如FullJITCompiler和Garbage Collection,部分处理在后台线程中执行。FullJITCompiler阶段在Func::Codegen()中处理字节码并输出本地代码。此过程中,字节码先被转换为中间表示(IR),然后经过优化、寄存器分配、prolog和epilog等步骤,最后由Encoder::Encode()编码为本地机器代码。 绕过CFG的关键在于理解和利用ChakraJIT的编译过程。由于CFG不检查已编译的JIT代码,攻击者可以寻找机会在JIT编译阶段插入恶意指令,以绕过其保护。具体方法可能包括篡改JIT编译后的代码、利用JIT优化过程中的漏洞,或者操纵编译器生成的IR,使得最终生成的本地代码执行非预期的行为。 为了实现这样的绕过,攻击者需要对ChakraJIT的内部工作原理有深入理解,包括其编译优化策略、IR构造和编码过程。由于这部分内容涉及复杂的底层细节和可能的内存操作,攻击者通常需要具备高级的逆向工程和编程技能。因此,绕过CFG是一项挑战性的任务,但并非不可能,特别是在攻击者已经获得了足够的内存访问权限的情况下。 总结来说,本文提供了一个关于如何利用ChakraJIT的编译过程来绕过CFG保护的视角,提醒安全研究人员和开发者注意这一潜在的攻击途径。对于防御者来说,了解这些攻击手段有助于提升系统的安全防护措施,例如强化JIT编译过程的验证,或者采用其他辅助安全机制来弥补CFG的不足。同时,对于攻击者而言,这是一篇揭示潜在漏洞利用策略的参考资料。
2023-05-31 上传