Page 274 - 《软件学报》2020年第11期
P. 274
李威威 等:基于硬件分支信息的 ROP 攻击检测方法 3589
重点.ROP 攻击是一种利用代码复用技术的攻击方法,攻击者通过内存漏洞劫持程序的控制流,将代码中已有的
以间接分支指令结尾的短指令片段(称为 gadget)串联起来(组成 gadgets-chain),以实现预设的攻击目标 [1−4] .
CFI 技术直接针对程序控制流进行保护,是一种防御 ROP 攻击的有效途径.CFI 技术通过监视程序运行过
程中的控制流转移过程,使其始终处于原有 CFG(control flow graph)所限定的合法范围内.具体的做法是:分析
程序的控制流图,重点关注间接分支指令,包括间接 jmp、间接 call 和 ret 指令;在程序运行过程中,对间接分支指
[5]
令的跳转目标进行检测,当攻击者劫持控制流导致分支目标偏离控制流图时,可迅速进行阻断,保证系统安全 .
然而,现有的 CFI 技术通常面临着如下几大问题.
1) 传统 CFI 技术为了保证控制流检测的完备性,需要针对所有的间接分支进行检测,检测点多,性能开销
较大 [5,6] .
2) 基于控制流图的粗粒度 CFI 技术为了在间接分支处插入检测点,需要修改源码或者通过反汇编重写
二进制代码插入检测代码,依赖于源码或者调试信息,难以适用于部分传统应用程序,限制了方法的
实用性 [7−10] .
3) 现有的硬件辅助的 CFI 技术为了降低性能开销,通常在 API 函数调用或者窗口页切换处利用存储的
分支历史信息进行窗口式检测 [11,12] ,无法做到对单个分支的实时检测,检测之前可能遭受历史刷新攻
击 [13] :攻击者在触发检测之前插入合法的程序流,覆盖用于 ROP 攻击的分支历史信息.
4) 基于特征检测的 CFI 技术为了与正常程序流中的可能出现的 gadgets-chain 区分开,通常仅根据长
gadgets-chain 特征判定 ROP 攻击 [11,12,14] ,难以对利用短 gadgets-chain 的规避攻击进行有效的检测.
针对这些问题,本文从降低检测频率、运行时提取检测所需信息、实时检测以及新型短 gadgets-chain ROP
攻击检测方法这 4 个角度出发,提出了 MIBChecker(mispredicted indirect branch checker)ROP 攻击检测方法.
1) 利用 ROP 攻击所使用的分支会导致 BPU(branch processing unit)预测失败这一特性,仅针对预测失败
的间接分支进行检测,在保证控制流检测完备性的同时,降低了性能开销.
2) 检测所需信息可直接从运行时获取,包括:a) PMI(performance monitor interrupt)中断保存的系统状态
信息;b) 通过 LBR(last branch record)获取的分支地址信息;c) 根据分支地址获取的分支指令信息.这
些信息的提取过程不依赖源码和调试信息,同时也能保证所提取信息的有效性.
3) 检测在每个预测失败的间接分支处触发,分支相关 LBR 历史信息是被立即使用的,因此,历史刷新攻
击不影响 MIBChecker 的 gadget 检测.
4) 提出了敏感系统调用参数检测方法,在敏感系统调用处通过判断敏感系统调用的参数是否来源于之
前的 gadget 来检测 ROP 攻击,能够检测已有方法 [11,12] 检测不到的短 gadgets-chain 规避攻击.
MIBChecker 方法具备以下优点.
1) 安全:在每个可能用于 ROP 攻击的分支处立即触发检测,仅使用 LBR 中当前分支的信息,从根源上避
免了 gadget 检测所需历史信息被刷新的可能;同时,以敏感系统调用作为检测点,通过系统调用参数检
测方法判断敏感系统调用参数是否来源于短 gadgets-chain,进而能够识别出通过短 gadgets-chain 进
行敏感系统调用的规避攻击.
2) 透明:通过硬件 PMU 机制,能在预测失败的间接分支处自动触发 PMI 中断进行 ROP 检测,检测所需信
息也直接从 LBR 和运行时获取,整个过程对用户级程序透明.
3) 性能开销低:仅针对预测失败的间接分支进行 ROP 攻击检测,避免了对预测正确的间接分支进行检
测,能够有效减少检测点,控制了性能开销,同时,硬件触发检测相比软件动态插桩式检测也更为高效.
本文第 1 节介绍本文的相关研究背景.第 2 节对本文提出的 MIBChecker 检测方法进行详细介绍.第 3 节详
细描述 MIBChecker 的实现.第 4 节对 MIBChecker 进行安全性及性能评估.第 5 节对本文进行总结.
1 相关研究
[5]
CFI 作为一种有效的 ROP 攻击防御技术,最早由 Abadi 等人提出 ,该方法假设程序在其执行过程中应当遵