Page 281 - 《软件学报》2020年第11期
P. 281
3596 Journal of Software 软件学报 Vol.31, No.11, November 2020
在这些程序上,用户态预测失败的跳转间接分支指令执行事件相比于用户态预测失败的跳转分支指令提
交事件更少,因此本文选择用户态预测失败的跳转间接分支执行事件作为采样事件,并通过设置 PMU 计数器初
始值为 0xFFFFFFFFFFFF,让其在每次发生该事件时计数器溢出,进而触发 PMI 中断进行 ROP 攻击检测.
3.2 阈值选择
与其他常规 ROP 攻击检测方法 [11,12] 一样,MIBChecker 的常规 ROP 攻击检测需要设置两个阈值:gadget 指
令片段最长长度(maxGadgetLength)以及 ROP gadgets-chain 最短长度(minChainLength).
3.2.1 maxGadgetLength 阈值选择
maxGadgetLength 阈值用于识别 gadget:当指令片段长度低于该阈值时,认为该指令片段为 gadget.该阈值的
选择需要满足以下条件.
1) 大于绝大部分理想的(副作用可控,具备一定攻击辅助功能 [23] 的)gadget 长度;
2) 应尽量小,以减少误报(降低将正常指令片段识别成 gadget 的可能).
我们通过 ROPgadget 工具从 Linux 常用软件及库(/bin,/usr/bin,/lib,/usr/lib)中抓取可能用于 ROP 攻击的
gadget,对它们进行了筛选,选出其中副作用可控,具备一定攻击辅助功能的 gadget.目前找到的满足条件的最长
gadget 如图 4 所示,长度为 27.为了保证对其他程序中的 gadget 也能进行有效的检测,本文将 maxGadgetLength
设为 30,略大于 27.
409f17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
409f1e: 00 00
409f20: 48 83 c4 28 add $0x28,%rsp
409f24: 48 89 d8 mov %rbx,%rax
409f27: 5b pop %rbx
409f28: 5d pop %rbp
409f29: 41 5c pop %r12
409f2b: 41 5d pop %r13
409f2d: 41 5e pop %r14
409f2f: 41 5f pop %r15
409f31: c3 retq
Fig.4 Longest ideal gadget in testing
图 4 测试中最长的“理想”gadget
3.2.2 minChainLength 阈值选择
minChainLength 阈值用于判定 ROP 攻击,当累计到 gadgets-chain 长度大于该值时,认为程序遭受到了 ROP
攻击,因此该值的选择需要满足以下条件:1) 大于正常指令执行流中出现的最长合法 gadgets-chain 长度;2) 该
阈值需要尽量小,以减少漏报(即将 ROP 攻击使用的 gadgets-chain 识别成了正常指令流).
本文针对表 1 中的 Linux 程序及参数进行了采样,识别的最大 gadgets-chain 长度见表 2.
Table 2 Longest gadgets-chain length on common Linux application
表 2 常用 Linux 应用中的最大 gadgets-chain 长度
程序 参数 最大 gadgets-chain 长度
ls −a 3
dmesg − 1
ps −a 3
cat test 1
mkdir newdir 3
ping www.baidu.com −c 10 2
stat test 3
passwd − 2
gdb a.out 4
tar −cj test.tar test 5
vi test 4
这些程序中包含的最大 gadgets-chain 长度不超过 5.已有研究中,对于最大 gadgets-chain 的长度限定一般在
7~10 [11,12] .为了保证对其他程序的 gadgets-chain 也能够进行有效的检测,MIBChecker 将该阈值设置成 10.