Page 277 - 《软件学报》2020年第11期
P. 277

3592                                Journal of Software  软件学报 Vol.31, No.11, November 2020

                        支指令.MIBChecker 利用 LBR 的过滤功能,让 LBR 只针对间接分支指令信息进行采样,并在运行时从
                        LBR 中提取这些分支信息用于 ROP 攻击检测.
                 2.3   检测触发点选择
                    MIBChecker 采用实时检测的方法来避免遭受历史刷新攻击,需要针对所有可能用于 ROP 攻击的分支指令
                 进行检测.为了达成这个目标,MIBChecker 引入了 PMU 的事件触发机制,让 PMU 在这些分支处自动触发事件
                 进入事件处理程序进行 ROP 攻击检测.相比于软件动态插桩触发的方式,PMU 的事件触发机制更加简便、高效,
                 而且触发过程可对应用程序透明.
                    然而,如果针对所有间接分支事件进行检测,会导致检测频率过高,引入较大的性能开销.因此,本文需要在
                 分支相关事件中进行筛选,在降低事件触发频率的同时,不遗漏任何用于 ROP 攻击的分支.
                    本文结合 ROP 攻击特征及硬件分支处理相关特性进行了待检测分支的进一步筛选.
                    1)   用户态分支和内核态分支:本文针对应用态程序进行保护,假定操作系统是可信的,因此在提权之前,
                        用于 ROP 攻击的分支均为用户态分支.
                    2)   预测正确分支和预测失败分支:现代 CPU 的分支预测机制主要基于历史信息来对分支进行预测,由于
                        ROP 攻击会让分支偏离原有的跳转目标,导致其与正常历史信息不一致,使得分支预测失败,因此仅
                        需对预测失败的分支进行 ROP 攻击检测.
                    3)   跳转分支和不跳转分支:ROP 攻击链衔接所需要的分支应该均为跳转的分支,如果不跳转,那么直接
                        执行下一条指令,攻击者不能利用该分支跳转到预期的目标.因此,能用于 ROP 攻击中衔接的分支均
                        为跳转的分支.
                    4)   直接分支和间接分支:直接分支其目标已确定,在不能直接修改程序代码的前提下,攻击者无法对控
                        制流进行有效控制.因此,用于 ROP 攻击的 gadget 是以间接分支结尾的指令片段,针对 ROP 攻击的检
                        测仅需对间接分支进行.
                    5)   执行分支和提交分支:现代 CPU 为了提高效率基本都支持乱序执行技术,部分分支会被投机执行,但
                        可能会被抛弃,最终不会提交,所以分支可分为执行的分支和提交的分支.ROP 攻击过程中的分支是
                        程序真正运行时用到的分支,都属于会提交的分支(只是攻击者破坏了控制流完整性,使其偏离了程
                        序开发人员的本意),因此仅需对提交的分支进行 ROP 攻击检测.
                    综合以上特征分析,我们所需检测的最理想分支为满足用户态、预测失败、跳转、间接以及提交这 5 大特
                 性的分支.
                    除了分支以外,为了识别短 gadgets-chain ROP 攻击,MIBChecker 还将敏感系统调用作为检测触发点,通过
                 劫持系统调用进行 ROP 攻击检测.这类敏感系统调用包括 mprotect、execve、mmap、sendmsg、remap_file 等,
                 它们可以关闭 DEP(data execution prevention)、直接执行非预期命令、写本地文件或发送信息到网络上,是攻击
                 者常选择的 ROP 攻击途径.
                 2.4   检测信息来源

                    MIBChecker 进行 ROP 攻击检测所需信息包括 4 个来源.1) LBR 分支信息:硬件在执行跳转分支指令时,会
                 记录最近分支的信息.2) PMI 中断处理保存的系统状态信息:操作系统处理 PMI 中断前,会自动保存当前的系统
                 状态.3)  系统调用参数信息:劫持敏感系统调用时,直接通过系统调用本身获取调用参数信息.4)  程序指令信息:
                 内核中的检测模块可直接根据地址获取应用程序内存信息.
                    这些信息均可在运行时获取,不依赖于源码及调试信息,因此信息提取过程可对应用程序透明.
                 2.5   ROP攻击检测算法
                    MIBChecker 的 ROP 攻击检测算法主要分为两个部分:常规 ROP 攻击检测以及系统调用参数检测两类.
                 2.5.1    常规 ROP 攻击检测
                    MIBChecker 采用了与其他基于特征的 ROP 攻击检测方法类似的常规 ROP 攻击检测方法:基于 ROP 攻击
   272   273   274   275   276   277   278   279   280   281   282