[论文解读] JIT Spraying and Mitigations
本文提出了一种新颖且高性能的防护机制,用于抵御JIT喷射攻击——一种通过在即时编译器生成的可执行内存区域中注入shellcode,从而绕过DEP和ASLR保护的攻击技术,尤其针对ActionScript环境。作者提出了一种检测机制,通过扫描使用32位立即数操作数的指令序列,并结合对短跳转链的验证,实现有效检测,且无误报,同时在Windows系统上性能开销极小。
With the discovery of new exploit techniques, novel protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for exploitation. Attackers, however, have recently researched new exploitation methods which are capable of bypassing the operating system's memory mitigations. One of the newest and most popular exploitation techniques to bypass both of the aforementioned security protections is JIT memory spraying, introduced by Dion Blazakis. In this article we will present a short overview of the JIT spraying technique and also novel mitigation methods against this innovative class of attacks. An anti-JIT spraying library was created as part of our shellcode execution prevention system.
研究动机与目标
- 解决JIT喷射攻击日益增长的威胁,此类攻击可绕过传统的内存保护机制(如DEP和ASLR)。
- 检测并防止在JIT生成的可执行内存区域中注入shellcode,尤其在ActionScript环境中。
- 设计一种高效运行的防护机制,避免对应用程序性能造成显著影响。
- 在保持对复杂逃避技术强防护能力的同时,最大限度减少误报。
提出的方法
- 该方法通过扫描使用32位立即数操作数作为源操作数的指令序列来检测JIT喷射,这些特征是攻击者控制的shellcode的典型表现。
- 从首个'mov reg, IMM32'指令开始进行反汇编,并持续计数具有32位立即数的'坏'指令,直到遇到终止指令(如CALL、RET、JMP)为止。
- 如果此类'坏'指令的数量超过预设最大值,则触发基于阈值的警报,表明可能存在shellcode。
- 系统还通过检查其立即数目标是否指向有效且连续的跳转指令,来验证短跳转链(JMP、JCC),防止攻击者通过跳转链接逃避检测。
- 检测在JIT生成代码执行前实时进行,确保在代码生成阶段即实现保护。
- 该防护机制作为库集成到应用程序运行时中,无需修改操作系统或浏览器。
实验结果
研究问题
- RQ1如何在几乎不增加性能开销的前提下,实现实时检测JIT喷射攻击?
- RQ2JIT生成代码的哪些特征可用于可靠地区分恶意shellcode与良性代码?
- RQ3基于32位立即数操作数使用的检测机制,能否有效防止通过跳转链绕过检测?
- RQ4在广泛使用JIT编译的ActionScript的环境中,如何最大限度减少误报?
主要发现
- 在Flash 10c上的测试中,反JIT喷射库成功检测到所有已知的JIT shellcode样本,且未产生任何误报。
- 该检测机制实现了极低的性能开销,在浏览典型Flash密集型网站时,对应用程序性能无明显影响。
- 即使攻击者尝试通过使用多个短跳转链接代码片段来逃避检测,该方法仍能成功识别shellcode。
- 基于32位立即数操作数的计数阈值机制在代码执行前有效识别出恶意代码块。
- 立即数操作数扫描与跳转链验证的结合,显著增加了绕过防护机制的难度。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。