Page 283 - 《软件学报》2020年第11期
P. 283
3598 Journal of Software 软件学报 Vol.31, No.11, November 2020
实验结果表明,MIBChecker 能够有效地检测出现实中利用短 gadget(<30)和长 gadgets-chain(>10)进行的
ROP 攻击,并复现完整的攻击路径.
4.1.2 短 gadgets-chain 攻击
短 gadgets-chain 攻击测试集主要包括 3 种类型:历史刷新攻击以及规避攻击、RIPE 测试集 [24] .下面分别对
它们进行评估测试,然后将检测结果与其他方法进行对比.
(一) 历史刷新攻击
历史刷新攻击 [13] 主要是通过在检测触发之前插入合法的程序流刷新 gadget 检测所需的 LBR 历史信息,进
而达到掩盖 ROP 攻击的目的.已有研究中 [11,12] 采用窗口式 ROP 攻击检测,LBR 历史信息的产生到使用具有较
长的时间间隔,容易遭受历史刷新攻击.MIBChecker 避免了这一点,在每个预测失败的间接分支处立即使用该
分支的 LBR 信息进行 gadget 检测.
为了进一步验证 MIBChecker 能够有效地防范历史刷新攻击,本文人为地构造了一个简单溢出漏洞程序.
int victim(⋅){
char name[64];
gets(name);
return 0;
}
利用该程序,我们首先进行了常规 ROP 攻击,然后对常规 gadgets-chain 进行了改造,添加了一个 gadget,该
gadget 会构造参数进行一个正常递归调用 20 次用于刷新 LBR 信息.插入前后 MIBChecker 的检测结果如图 6
所示.
(a) 常规 ROP 攻击 (b) 历史刷新攻击
Fig.6 Gadget detection result on history flush attack
图 6 针对历史刷新攻击的 gadget 检测结果
由图 6 可以看出,在历史刷新攻击存在的情况下,MIBChecker 的检测链确实被插入的 gadget(见图 6 中方框)
打断了,但不影响后续 gadget 的检测,该攻击依旧会被 MIBChecker 检测出来.实验结果表明,MIBChecker 能够有
效地检测出历史刷新攻击.
(二) 规避攻击
规避攻击 [13] 由 Carlini 等人提出,原指仅使用“合法”的 gadget 进行的 ROP 攻击.本文将利用“合法”gadgets-
chain(其中可以包含不合法 gadget)进行的 ROP 攻击也归入该范畴.已有方法如 kBouncer [11] 、ROPecker [12] 均不
能有效地检测规避攻击.规避攻击可能的情况如下.
1) 全部由“合法”的 gadget(对于 MIBChecker,是指长度大于 30 且满足 CALL-RET 特性的指令片段)构成
的攻击.
2) 仅由一个“合法”gadgets-chain(对于 MIBChecker,是指长度小于 10 的 gadgets-chain)构成的攻击.
3) 由一系列“合法”gadgets-chain,中间插入“合法”gadget 构成的攻击(上一节的例子属于该类).
对于第 1 种情形,长度大于 30 的长指令片段副作用较多,攻击者难以有效控制其达到攻击目的,可行性不
高.对于第 3 种情形,其本质上和第 2 种情形是一致的,即最终都是通过短 gadgets-chain 进行敏感系统调用完成
攻击.为了进一步验证 MIBChecker 是否能够检测这种短 gadgets-chain 构成的规避攻击.本文构造了一个包含 5