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
   278   279   280   281   282   283   284   285   286   287   288