一种基于攻击树的rop防护方法

文档序号:10471373阅读:253来源:国知局
一种基于攻击树的rop防护方法
【专利摘要】本发明公开了一种基于攻击树的ROP防护方法,属于计算机软件安全领域,所述发明包括提取待保护程序和系统库文件中的gadgets指令片段,确定提取出的每一个gadgets指令片段的类型,选取多个敏感系统函数,利用提取出来的gadgets指令片段以构造攻击树的方法进行攻击建模,对所有攻击方法进行分析,得到关键的gadgets,最后对这些关键的gadgets进行保护。本发明通过使用攻击建模的方式对程序进行保护,加强了攻击者劫持控制流的难度,提高了保护效率,最终使得程序控制流更加的安全。
【专利说明】
-种基于攻击树的ROP防护方法
技术领域
[0001 ]本发明属于计算机软件安全领域,设及应对控制流劫持中的Return-Oriented Program(ROP)攻击技术,尤其设及一种基于攻击树的ROP防护方法。
【背景技术】
[0002] 当今软件已经深入到生活的方方面面,在人们的饮食、出行、交通等领域均扮演着 越来越重要的角色。控制流劫持攻击是软件安全面临的一个重要威胁,如何增强软件的防 护能力已经成为重要的工作。
[0003] 在现有技术中,为了应对控制流劫持攻击通常采用了DEP,ASLRdDEP通过对程序内 存页属性设置,避免内存页即可写又可执行,从而使得利用可写页进行攻击的方法失败。 ASLR目的是对程序地址空间进行随机化,使得攻击者静态分析时获取的地址空间和真正运 行时不符,从而使得攻击失败。但是运些保护方法都有自己的缺点。DEP和ASLR已经被当前 的研究证明是可W被绕过的。
[0004] CFI是当前学术研究的主要方向。CFI通过对程序间接分支跳转指令的地址进行校 验,从而避免被攻击者劫持。但是CFI具有两个问题:第一:开销大,不适于实际使用。(因为 CFI要求对每个间接分支转移指令进行检查)。第二:当前CFI采用上下文不敏感的方法,仍 然可W被攻击者绕过。

【发明内容】

[0005] 针对上述现有技术中存在的问题,本发明的目的在于,提供一种基于攻击树的R0P 防护方法。
[0006] 为了实现上述目的,本发明采用如下技术方案:
[0007] -种基于攻击树的R0P防护方法,具体包括:
[000引步骤1,选取待保护程序和系统库文件;
[0009] 步骤2,提取待保护程序和系统库文件中的gadgets指令片段;
[0010] 步骤3,确定提取出的每一个gadgets指令片段的类型;
[0011] 步骤4,选取多个敏感系统函数;
[0012] 步骤5,利用步骤2提取出来的gadgets指令片段W构造攻击树的方法进行攻击建 模,即W提取出来的gadgets指令片段为攻击对象,W实现多个敏感系统函数的调用为攻击 目的,W实现每个敏感系统函数的调用分别所采用的多种方法为攻击方法进行攻击树的构 造;
[0013] 步骤6,针对每个敏感函数,对实现该敏感函数调用的多种方法中使用到的 gadgets指令片段进行分析总结,得到每个敏感函数对应的关键的gadgets指令片段;
[0014] 步骤7,对步骤的寻到的所有关键的gadgets指令片段进行保护。
[001引具体地,所述步骤4中的敏感系统函数为:mprotect函数簇,mmap函数簇,exec函数 簇或1/0系统调用函数簇。
[0016] 具体地,所述步骤6的具体实现方法包括:
[0017] 针对一个敏感函数,实现该敏感函数调用的方法包含多种,分析每种方法所使用 的gadgets指令片段的类型,确定所有方法中使用次数最多的gadgets指令片段的类型,贝U 该类型的gadget指令片段为该敏感函数对应的关键的gadget指令片段;
[0018]针对所有敏感函数,均采用所述方法确定所有敏感函数对应的关键的gadge t指令 片段。
[0019] 具体地,所述步骤3中确定提取出的每一个gadgets指令片段的类型,所采用的方 法为基于语义的分析方法或者模式匹配的方法。
[0020] 具体地,所述步骤7中对步骤6得到的所有关键的gadgets指令片段进行保护,对于 来自于系统库文件中的关键的gadgets指令片段,采用黑名单机制;对于来自于待保护程序 中的关键的gadgets指令片段,采用指令替换的方式或者粗粒度控制流完整性的方式。
[0021] 与现有技术相比,本发明具有W下技术效果:
[0022] 1、本发明提出的基于攻击建模的R0P保护方法,从攻击者的角度对程序进行分析, 寻找到攻击者实现攻击的关键的gadgets指令片段,然后对它们进行保护,使得程序更加具 有抵抗性,最终提高程序的保护效果。
[0023] 2、本发明只针对某一类或两类关键的gadgets指令片段进行保护,造成的开销相 对较小,可W大大提高保护效率。
【附图说明】
[0024] 图1是本发明的方法流程图;
[0025] 图2是实现mprotectO函数调用的方法示意图;
[0026] 图3是构造攻击树的流程图;
[0027] 图4是gadgets指令片段进行分析的示意图;
[00巧]图5是Kerne 132. dl 1中gadgets指令片段的分类情况;
[0029] 下面结合附图和【具体实施方式】对本发明的方法做进一步详细地解释和说明。
【具体实施方式】
[0030] 本发明的基于攻击树的R0P防护方法,参见图1,具体包括W下几个步骤:
[0031 ]步骤1,选取待保护程序和系统库文件
[0032] 在运里特别提到将系统库文件也作为输入,原因在于,系统库文件是操作系统自 带的,其中也存在gadgets指令片段。如果攻击者在系统库文件中找到gadgets指令片段并 劫持控制流,运样即使攻击者在不知道源代码的情况下依然可W实施控制流劫持攻击,一 些远程攻击就是W系统库文件作为攻击目标。
[0033] 步骤2,提取待保护程序和系统库文件中的gadgets指令片段
[0034] 提取待保护程序和库文件中的gadgets指令片段,可W采用已有的工具,比如: mona插件。此处选择mona插件是因为它是由著名的corelan team出品的,它是很多漏桐分 析人员或者攻击者使用的工具。通过mona插件可W快速提取待保护程序和系统库文件中的 gadgets指令片段。
[0035] 比如:下边代码就是通过mona插件提取出来的gadgets指令片段。
[0036]
[0037] 步骤3,确定提取出的每一个gadgets指令片段的类型
[0038] Gadgets指令片段的类型主要可分为W下几类:
[0039] 第一类:加载寄存器类型;比如:pop eax;XXX;retn;
[0040] 第二类:内存读写类型;比如:mov[esi] ,eax;xor eax,eax;XXX;retn;
[0041 ] 第Ξ类:算术运算类型;比如:Aro能,抓;retn;
[0042] 第四类:空操作类型,不产生任何影响的指令片段。
[0043] 第五类:分支跳转类型:比如:add esp,lah;XXX;retn;
[0044] 第六类:间接函数调用类型:比如:call eax,XXX;retn;
[0045] 使用基于语义的分析方法来判断gadgtes指令片段的类型,也可W采用模式匹配 的方法来确定。假如指令片段中存在call eax/esi/···,通过模式匹配,发现是call指令且 后边跟着一个寄存器,运就可W确定它属于间接函数调用类型的gadgets指令片段。基于语 义的分析较为复杂,但是分类效果会更好。图5中展示了 Kernel32.dll中gadgets指令片段 的分类情况。
[0046] 步骤4,选取多个敏感系统函数
[0047] 为了简化分析,同时为了尽可能的降低开销,只针对一些敏感系统函数进行分析。 敏感系统函数主要选取W下几种:mprotect函数簇,mmap函数簇,exec函数簇或I/O系统调 用函数簇。
[004引步骤5,利用步骤2提取出来的gadgets指令片段W构造攻击树的方法进行攻击建 模,即W提取出来的gadgets指令片段为攻击对象,W实现多个敏感系统函数的调用为攻击 目的,W实现每个敏感系统函数的调用分别所采用的多种方法为攻击方法进行攻击树的构 造。
[0049]此实施例中,攻击建模采用构造攻击树方法,图2展示了实现mprotectO函数调用 的一种方法,图3展示构造攻击树的一个简单例子。软件攻击模型要素分为W下几个:攻击 对象,攻击目的和攻击方法(攻击技术)。攻击对象是提取出来的gadgets指令片段;攻击目 的是实现多个敏感系统函数的调用,比如实现vidualprotectO敏感系统函数的调用, ¥山化日191'〇1日(31:〇敏感系统函数属于1]191'〇1日(31:函数簇;攻击方法就是实现每个敏感函数的 调用分别所采用的多种方法。如下是一个实现vbtualprotectO敏感函数调用的方法,其 中每个WRETN结尾的指令片段都是一个gadget指令片段,其他的属于数据信息(参数信息) 和垃圾填充信息(比如:Filler)。
[0化2]
[0053] 攻击树按照攻击方法进行构造:攻击树的根节点是敏感系统函数,子节点就是攻 击方法中依次出现的gadget指令片段。比如上述代码中0x7588巧69#P0P EAX #RETN是一个 寄存器加载类型的gadget指令片段,目的是为了获取vbtualprotectO的首地址。依次遍 历后边出现的gadget指令片段,就可W构造出用于实现敏感系统函数调用的攻击树。
[0054] 下表列出了上述敏感函数调用的方法中出现的所有gadget指令片段W及其所属 类型。
[0化5]
[0056] 本发明从攻击者的角度,对gadgets指令片段进行攻击建模,更具有针对性。
[0057] 步骤6,针对每个敏感函数,实现对该敏感函数调用的多种方法中使用到的 gadgets指令片段进行分析总结,得到每个敏感函数对应的关键的gadgets指令片段;
[005引实现一个敏感函数的调用方法包含多种,在运里尽可能的对每种调用方法都设及 到,然后寻找运些调用方法对哪种类型的gadgets指令片段依赖度高,即对哪种类型 gadgets指令片段使用最为频繁;如果大部分方法都依赖某一种类型的gadget指令片段,我 们就说该类型的gadget指令片段是该敏感函数对应的关键的gadget指令片段。
[0059] 依次类推,对所有的敏感函数,针对实现其调用的方法都进行总结,并找到所有敏 感函数对应的关键的gadget指令片段。图4展示了一个简单的分析过程,图中每种形状的图 像代表一种类型的gadget指令片段。
[0060] 步骤7,对步骤的寻到的所有关键的gadgets指令片段进行保护
[0061 ]经过分析之后会找到关键的gadgets指令片段,接下来就是对运些关键的gadgets 进行保护。保护方法也包含多种,假如关键的gadgets指令片段来自于系统库文件,我们使 用黑名单机制,为了安全起见,操作系统是不允许用户对系统库函数修改的;对于来自于待 保护程序中的关键的gadgets指令片段,我们可W使用指令替换的方式,也可W采用粗粒度 控制流完整性的方式。
[0062] 运里队nprotectO敏感系统函数为例简要说明(mprotectO函数用于修改程序内 存的属性,如果攻击者可W修改内存属性,就可W绕过DEP实现任意想要的功能),要实现 mprotectO函数需要加载函数参数,参数加载就需要用到内存加载类型的gadgets。如果我 们对内存加载类型的gadgets进行保护,运就使得攻击者达不到自己想要的恶意功能。
[0063] 另外需要声明一点,基于攻击建模的R0P防御思想既可W单独的用于保护程序,也 可W与其他的R0P防护技术相结合。如果能够和粗粒度CFI结合保护,保护效果会更好。
【主权项】
1. 一种基于攻击树的ROP防护方法,其特征在于,具体包括: 步骤1,选取待保护程序和系统库文件; 步骤2,提取待保护程序和系统库文件中的gadgets指令片段; 步骤3,确定提取出的每一个gadgets指令片段的类型; 步骤4,选取多个敏感系统函数; 步骤5,利用步骤2提取出来的gadgets指令片段以构造攻击树的方法进行攻击建模,即 以提取出来的gadgets指令片段为攻击对象,以实现多个敏感系统函数的调用为攻击目的, 以实现每个敏感系统函数的调用分别所采用的多种方法为攻击方法进行攻击树的构造; 步骤6,针对每个敏感函数,对实现该敏感函数调用的多种方法中使用到的gadge t s指 令片段进行分析总结,得到每个敏感函数对应的关键的gadgets指令片段; 步骤7,对步骤6得到的所有关键的gadgets指令片段进行保护。2. 如权利要求1所述的基于攻击树的R0P防护方法,其特征在于,所述步骤4中的敏感系 统函数为:mprotect函数簇,_ap函数簇,exec函数簇或I/O系统调用函数簇。3. 如权利要求1所述的基于攻击树的R0P防护方法,其特征在于,所述步骤6的具体实现 方法包括: 针对一个敏感函数,实现该敏感函数调用的方法包含多种,分析每种方法所使用的 gadgets指令片段的类型,确定所有方法中使用次数最多的gadgets指令片段的类型,则该 类型的gadget指令片段为该敏感函数对应的关键的gadget指令片段; 针对所有敏感函数,均采用所述方法确定所有敏感函数对应的关键的gadge t指令片 段。4. 如权利要求1所述的基于攻击树的R0P防护方法,其特征在于,所述步骤3中确定提取 出的每一个gadgets指令片段的类型,所采用的方法为基于语义的分析方法或者模式匹配 的方法。5. 如权利要求1所述的基于攻击树的R0P防护方法,其特征在于,所述步骤7中对步骤6 得到的所有关键的gadgets指令片段进行保护,对于来自于系统库文件中的关键的gadgets 指令片段,采用黑名单机制;对于来自于待保护程序中的关键的gadgets指令片段,采用指 令替换的方式或者粗粒度控制流完整性的方式。
【文档编号】G06F21/12GK105825086SQ201610149871
【公开日】2016年8月3日
【申请日】2016年3月16日
【发明人】汤战勇, 吕留东, 张恒, 李政桥, 房鼎益, 陈晓江, 周祥, 龚晓庆, 刘方圆, 陈锋
【申请人】西北大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1