Page 279 - 《软件学报》2020年第11期
P. 279
3594 Journal of Software 软件学报 Vol.31, No.11, November 2020
• 递归 gadget 识别方法
首先,利用特征 1 和特征 2 判断当前指令片段是否为 gadget,如果是,且之前的 gadget-chain 长度不为 0,那么
从 LBR 中获取当前分支的 from_ip 和 to_ip 信息,和保存的上一个分支的 from_ip 和 to_ip 信息进行比较:如果
一致,则将该片段识别为递归 gadget.在 gadget 检测后,从 LBR 中获取当前检测分支的 from_ip 和 to_ip 信息进
行保存(用于下一次检测).
MIBChecker 采用如下算法来统计 gadgets-chain 的长度(gadgetsChainLength).
1) 初始 gadgets-chain 长度为 0.
2) 如果当前指令片段被识别为递归 gadget,那么 gadgets-chain 长度不变.
3) 如果当前指令片段被识别为 gadget(非递归 gadget),那么将 gadgets-chain 长度加 1.
4) 非情形 2)和情形 3)的情形,则将 gadgets-chain 长度清 0.
2.5.3 系统调用参数检测方法
常规的 ROP 攻击检测方法可能被利用短 gadgets-chain 进行的规避攻击绕过.而通过短 gadgets-chain 进行
的规避攻击只能通过较少的步骤达到攻击目的,通常会采用最直接的办法——快速构造系统调用参数,执行敏
感系统调用.因此针对此类攻击,MIBChecker 提出了系统调用参数检测方法,利用如下特征进行检测.
• 短 gadgets-chain ROP 攻击特征:利用短 gadgets-chain 进行的 ROP 攻击中,攻击者需要利用短 gadgets-
chain 来构造系统调用参数进行敏感系统调用,以达到攻击目的.
• ROP 攻击判定方法:在每次检测到 gadget 时,记录当时的系统状态;劫持敏感系统调用,在进行实际系统
调用之前,检测系统调用的参数是否与上一次检测到 gadget 时保存的系统状态(以系统架构寄存器的
值来表征系统状态)一致,如果一致(即敏感系统调用受到了攻击者控制),则认定当前遭受了 ROP 攻击.
2.5.4 检测算法小结
结合上述小结的检测算法,ROP 攻击检测的总体算法如图 2 所示.
last_lbr:保存上一分支 LBR 信息
last_arch_state:上一 gadget 的系统架构信息
cur_arch_state:当前的系统架构信息
cur_lbr:包含当前分支的 LBR 信息
syscall_state:包含系统调用所需参数架构信息
chain_length:保存当前的 gadgets-chain 长度,初始值为 0
cur_instr(addr):解析 addr 对应内存地址的指令类型
last_instr(addr):解析 addr 对应内存地址的上一指令类型
match(state1,state2):比较 state1 中的架构信息是否包含 state2 中的所需的架构信息
ROP_detect 算法如下:
//gadget 检测
potential_garget=0;
if (cur_lbr.from_iplast_lbr.to_ip<maxGadgetLength)
potential_garget=1;
if (Cur_instr(cur_lbr.from_ip)==“RET” && Last_instr(cur_lbr.to_ip))!=“CALL”)
potential_garget=1;
//gadgets-chain 累计
if (potential_garget && chain_length>0 && cur_lbr.from_ip==last_lbr.from_ip &&cur_lbr.to_ip==last_lbr.to_ip)
recursive_gadget=1;
chain_length=recursive_gadget? chain_length:
potential_gadget? chain_length+1:0;
//ROP 攻击判定
if (chain_length>minChainLength|match(last_arch_state,syscall_state))
signal ROP-attack (kill the detected application).
last_lbr=cur_lbr;
if (potential_garget)
last_arch_state=cur_arch_state;
Fig.2 ROP detection algorithm
图 2 ROP 检测算法