一种基于Pin工具的ROP及其变种攻击的动态检测方法与流程

文档序号:12887526阅读:365来源:国知局
一种基于Pin工具的ROP及其变种攻击的动态检测方法与流程

本发明涉及一种针对rop攻击的检测技术,特别是一种基于pin工具的rop及其变种攻击的动态检测方法,用于对rop及其变种攻击进行检测。



背景技术:

网络安全有很多类,例如:网络的物理安全、网络拓扑结构安全、网络系统安全、应用系统安全和网络管理的安全等。而本发明所涉及的是应用系统安全,计算机上运行的各类软件都是由人工编写,由于人的局限性,所编写的软件或多或少都存在漏洞。缓冲区溢出漏洞、堆溢出漏洞和本地提权漏洞仍然普遍存在,一旦这些漏洞被别有用心的人发现并加以利用,带来的危害不可小视。为了应对漏洞造成的危害,专家们提出并采取了各种保护措施来保护计算机,例如dep(dataexecutionprevention,数据执行保护)、gs保护技术等。漏洞利用和漏洞防御是相互竞争关系,漏洞防御阻止了当前的漏洞利用,而攻击者又会提出新的技术绕过这些防御措施。漏洞防御和漏洞利用长时间处于被动与主动的状态,这一状态根据当前技术的发展状况会持续很久,或许会一直存在。

就缓冲区溢出攻击而言,在相当一段时间内给网络安全造成了巨大威胁。但是dep和gs等保护措施提出后,传统的缓冲区溢出攻击事件大幅减少,但是这持续时间并没有存在多久,攻击者随后就提出了一种新的攻击方式rop(面向返回导向的编程,return-orientedprogramming)。在2010年初,网络上出现了rop的实际攻击的例子,攻击者利用adobeacrobat/reader的一个0day漏洞,使用rop攻击绕过了windows系统的数据执行保护技术。而在2011年的温哥华pwn2own黑客大会上,黑客利用rop技术在很短时间内绕过了windows7的dep和aslr(addressspacelayoutrandomization)保护技术,并获得了该次黑客竞赛的冠军。近期,著名黑客网站exploitdatabase发布了众多利用rop攻击绕过windowsdep和aslr的shellcode,使得rop技术越来越被人们重视,被认为是未来攻击系统的必须的技术和手段。

rop攻击是一种基于代码复用技术的新型攻击,攻击者提取已有的动态库或可执行文件中的有用的指令片段,使多个指令片段组合在一起构成恶意代码。换言之,它通过使用系统内存中已经存在的二进制代码片段(gadget)来构造一个具有图灵完备性的攻击序列,可以绕过当前主流操作系统防范缓冲区溢出攻击的保护机制dep,给计算机系统带来了极大的安全威胁。

自2007年schacham提出rop以来,其相关攻击技术发展迅速。rop攻击最初是在32位的x86硬件平台的linux软件平台上实现的,之后被证明可以在多种软硬件平台上实现;rop的变种jop(jump-orientedprogramming)进一步丰富了rop;构造rop的自动化程度越来越高;rop被用来构造各种攻击。因此提出一种有效的rop攻击及其变种的检测技术,对于计算机的安全十分的重要。

从上面描述得知,rop攻击不同于普通的缓冲区溢出攻击,它通过提取正常的指令片段构造恶意代码,这与普通的缓冲区溢出攻击有着本质的区别,同时这一特点也给rop攻击的检测工作带来了巨大的挑战。rop攻击检测引起了众多研究者的关注,虽然对rop攻击的检测技术已经取得了许多成就,但是大多数检测方法都是针对ret指令,不使用ret指令的rop变种可以绕过这些防御,比如pop-jmp和jop。



技术实现要素:

基于以上技术问题,本发明提供了一种基于pin工具的rop及其变种攻击的动态检测方法,旨在利用rop及其变种攻击的共同特征作为检测基础,解决当前检测算法只能对单一类型的rop攻击进行检测,同时检测效率低的技术问题。

本发明采用的技术方案如下:

一种基于pin工具的rop及其变种攻击的动态检测方法,包括以下步骤:

步骤1:利用二进制pin插桩工具启用目标程序;

步骤2:跟踪所述目标程序,匹配ret指令、call指令与jmp指令;

步骤3:若为ret指令,则利用基于ret指令的检测模块进行检测;若为call指令,则利用基于call指令的检测模块进行检测;若为jmp指令,则利用基于jmp指令的检测模块进行检测;

步骤4:若检测模块检测出所述目标程序的异常,则发出攻击警报;否则跳转至步骤2。

进一步的,所述基于ret指令的检测模块的检测算法为:

s201:监控寄存器,提取ret指令跳转的目的地址;

s202:检测所述目的地址的前一指令是否为call指令,若为call指令跳转到s203执行,否则发出攻击警报;

s203:检测所述目的地址是否在在函数体内并且所述函数第一次被调用,若是则发出攻击警报,否则跳转到s204执行;

s204:设定检测指令的条数阈值和频数阈值,检测所述目标地址后条数阈值范围内的指令中是否有连续性的jmp指令、call指令和ret指令出现,若出现频数大于所述频数阈值则认为受到攻击并发出攻击警报,否则执行步骤2。

进一步的,所述基于call指令的检测模块的检测算法为:

检测call指令跳转的目的地址是否为函数的入口地址,若不是则发出攻击警报,否则执行步骤2。

进一步的,所述基于jmp指令的检测模块的检测算法为:

s401:检测jmp指令是否跨函数跳转,若是则跳转s402执行,否则执行步骤2;

s402:检测jmp指令跳转的位置是否在函数的中间位置,若是则发出攻击警报,否则执行步骤2。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

利用rop及其变种攻击的共同特征进行的检测,不仅能够对rop攻击进行检测,还能对其变种进行检测,对网络安全防护具有很重大的意义。

将转移指令的行为特征与rop及其变种攻击的共同特征结合,实现对rop及其变种攻击的动态检测,克服了当前检测工具类型单一的缺点,部署方便,具有很强的实用性。

附图说明

图1是二进制插桩工具的整体架构;

图2是基于call指令的检测模块设计图;

图3是基于jmp指令的检测模块设计图;

图4是基于ret指令的检测模块设计图;

图5是动态链接库分析模块的结构图。

具体实施方式

本说明书中公开的所有特征,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。

下面结合附图对本发明作详细说明。

一种基于pin工具的rop及其变种攻击的动态检测方法,包括以下步骤:

步骤1:利用二进制pin插桩工具(如图1)启用目标程序,具体为通过pin.exe加载pintool.dll,pintool.dll初始化完成后返回请求以启动目标程序;

步骤2:利用二进制pin插桩工具跟踪所述目标程序,对ret指令、call指令与jmp指令进行匹配,所述二进制pin插桩工具内包括动态链接库分析模块、动态监控模块、攻击检测模块;

所述二进制插桩工具pin支持ia-32,intel(r)64和intel(r)许多集成核心架构的android*,linux*,osx*和windows*操作系统和可执行文件。pin允许pintool工具在可执行文件的任意位置中插入任意代码(c或c++编写)。插入的代码在可执行文件运行时动态添加,但是不改变可执行文件的原始结构,可以使得将二进制pin插桩工具连接到已经运行的进程,所述目标程序为可执行文件。

步骤3:若为ret指令,则利用基于ret指令的检测模块(如图2)进行检测;若为call指令,则利用基于call指令的检测模块(如图3)进行检测;若为jmp指令,则利用基于jmp指令的检测模块(如图4)进行检测;

1、rop及其变种攻击(“x”op)中,所述ret指令的特征为:ret指令跳转的目的地址的前一条指令不是call指令;ret指令返回的位置在函数内部,且该函数是第一次被调用;ret指令在条数阈值内的出现频数会突然增加。

函数分为帧函数和非帧函数,由于编译器的优化,函数开始的特征序列会被优化掉,因此不能完全采用所述特征序列来判断call指令跳转的目的地址是否为函数的入口地址。

帧函数开始序列为:

pushebp

moveebp,esp

非帧函数开始序列:

sub$value,ebp

在所述目标程序执行前期,动态链接库分析模块(如图5)已分析出此执行文件调用的所有函数的起始地址和终止地址并存储在容器中,所述容器为缓存区。

则基于ret指令的检测模块的具体检测步骤为:

步骤(1):监控寄存器,提取ret指令跳转的目的地址;

步骤(2):检测所述目的地址的前一指令是否为call指令,若为call指令跳转到步骤(3)执行,否则发出攻击警报;

步骤(3):利用数据搜索模块对所述目的地址进行搜索,所述数据搜索模块包括第一缓存区和第二缓存区,所述一级缓存区用于存放近期使用过的函数信息,所述一级缓存区空间小,搜索数据的时间很快;所述二级缓存区用于存放所有的函数信息,所述一级缓存区空间大,采用rbtree数据结构对函数信息进行储存;所述一级缓存区用于减少搜索时间,提高系统的性能;在一级缓存区中搜索目的地址,若搜索到目的地址跳转到步骤(4),否则在二级缓存区搜索,搜索到目的地址后跳转到步骤步骤(4);

步骤(4):将搜索到的数据返回给攻击检测模块,所述攻击检测模块根据地址范围分析法,判断所述ret指令的返回地址是否是函数入口地址;若是函数入口地址,跳转至步骤(5);若不是函数入口地址并且所述返回地址是第一次进入该函数则发出rop及其变种攻击警告;

步骤(5):设定检测指令的条数阈值和频数阈值,条数阈值为20,频数阈值为4,检测所述目标地址后20条指令中是否有连续性的jmp指令、call指令、ret指令出现,若出现频数大于4,则认为受到攻击并发出攻击警报,否则跳转至步骤2。

2、rop及其变种攻击中,所述call指令的特征为:call指令调用的不是一个完整的子过程;call跳转的目的地址不是子过程的开始地址。

则基于call指令的检测模块的具体检测步骤为:

如果完全采用在容器中对call跳转的目的地址进行搜索匹配的方法,来判断所述目的地址是否为函数的起始地址会增加程序的检测时间。因此对call指令进行检测方式为:首先使用函数固定的特征序列与所述目的地址的前几条指令进行匹配,如果匹配成功,则认为call指令跳转的目的地址是函数的起始地址;否则根据预先存储在容器中的数据来判断call指令跳转到的目的地址是否在函数的起始地址。

(1)获取call指令跳转的目的地址,跳转到步骤(2);

(2)判断所述目的地址的前几条指令是否与函数的特征序列相匹配,若匹配成功,则把控制权移交给动态监控模块,所述动态监控模块用于跟踪程序指令流和识别指令类型,否则跳转到步骤(3);

(3)在一级缓存区中搜索目的地址,若搜索到目的地址则跳转到步骤(4);否则执行二级缓存区搜索,搜索到目的地址后跳转到步骤(4);

(4)把搜索到的数据返回给攻击检测模块,所述攻击检测模块根据地址范围比较法,判断目的地址是在函数范围内还是在函数入口地址。如果是函数的入口地址,把控制权移交给动态监控模块,跳转至步骤2;否则发出rop及其变种攻击警告,并停止检测。

3、rop及其变种攻击中,所述jmp指令的特征为:jmp指令跨函数跳转,跳转距离过大;跳转的目的地址不在函数的开始位置。

基于jmp指令的检测模块的具体检测步骤为:

(1)获取jmp跳转的目的地址和jmp指令的地址,跳转到步骤(2);

(2)首先在一级缓存区中搜索目的地址,若在一级缓存区搜索到相应的函数信息,跳转到步骤(3);否则执行二级缓存区搜索,并跳转到步骤(3);

(3)将搜索到的数据返回给攻击检测模块,所述攻击检测模块判断jmp指令的地址是否与跳转的目的地址在同一个函数内,如果在同一个函数内,则没有发生跨函数跳转并立即返回;否则根据地址范围比较法,判断所述跳转的目的地址是否是函数入口地址。如果是函数入口地址,跳转至步骤2;否则发出rop及其变种攻击警告。

如上所述即为本发明的实施例。本发明不局限于上述实施方式,任何人应该得知在本发明的启示下做出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1