一种检测面向返程的编程攻击的方法及装置制造方法

文档序号:6626573阅读:327来源:国知局
一种检测面向返程的编程攻击的方法及装置制造方法
【专利摘要】本发明的实施例公开一种检测面向返程的编程攻击的方法及装置。检测面向返程的编程攻击的方法包括:分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;监测到所述待监测的应用程序的进程调用预先设置的应用编程接口API函数库中的API函数时,暂缓所述待监测的应用程序的进程对所述API函数的调用;按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。应用本发明,可以有效检测ROP攻击、提升网络安全性。
【专利说明】一种检测面向返程的编程攻击的方法及装置

【技术领域】
[0001 ] 本发明涉及网络安全技术,尤其涉及一种检测面向返程的编程(R0P,Return-oriented Programming)攻击的方法及装置。

【背景技术】
[0002]随着计算机网络技术的广泛应用,互联网逐渐成为恶意应用程序攻击用户的主要途径,恶意应用程序通过将应用程序文件伪装成其他类型文件,并引诱用户点击和下载,在恶意应用程序被下载到用户计算机并成功运行后,攻击者就可以利用安装的恶意应用程序,针对操作系统以及应用程序软件的漏洞实施攻击,例如,破坏用户计算机、窃取用户隐私信息等。其中,漏洞是指操作系统或应用程序软件在逻辑设计上的缺陷或在编写时产生的错误。这些缺陷或错误往往可以被攻击者利用,并植入木马等恶意应用程序,从而侵害、控制甚至破坏用户计算机软硬件系统,或者窃取用户隐私信息,给用户的网络安全带来极大隐患。
[0003]通过缓冲区溢出的方式对操作系统漏洞实施攻击,是近年来操作系统遭受恶意应用程序攻击的主要方式。缓冲区是操作系统在应用程序运行期间,为该应用程序分配的用于存放局部变量及函数参数的一段连续的存储空间。当应用程序向预分配的固定大小(容量)的缓冲区中进行数据填充时,如果填充的数据超过缓冲区容量,在操作系统不对缓冲区中填充的数据进行边界检测的情况下,将发生缓冲区溢出现象,溢出的数据将向与缓冲区相邻的高地址继续写入,形成缓冲区溢出现象。
[0004]由于操作系统存在缺乏边界安全检查的机制,从而为攻击者入侵提供了可乘之机,攻击者可以利用缓冲区溢出现象,通过构造用于填充缓冲区的填充数据,从而使得溢出的数据覆盖到该应用程序的关键位置,例如,函数指针、函数的返回地址或是栈指针等,实现对该应用程序执行流程的控制,并进而可以将该应用程序引导到预先存放的恶意代码处执行,从而达到破坏操作系统甚至获得操作系统控制权限。例如,通过缓冲区溢出,可以获取根(root)权限或管理员权限,并利用获得的根权限或管理员权限,窃取用户隐私信息的目的。
[0005]目前,针对缓冲区溢出,业界虽然提出了许多检测和防护策略,但缓冲区溢出攻击仍面临较为严峻的形势,一方面,在于不断有新的操作系统漏洞被发掘和利用,另一方面,已有的防护策略也被层出不穷的攻击方式所攻破。因而,针对缓冲区溢出攻击的研究是网络安全领域的一个热点研究。
[0006]ROP攻击是一种新的缓冲区溢出攻击方式,采用基于代码的复用技术,ROP攻击通过从操作系统内存中已经存在的二进制代码段的指令片断(gadget)或者可执行文件中,寻找合适的指令片断(gadget),并通过精心设计返回堆栈,从而将各寻找到的合适的gadget拼接起来形成包含恶意代码的攻击序列,从而达到恶意攻击的目的。由于ROP攻击利用的都是内存中合法的的代码,可以绕过操作系统防护缓冲区溢出的重要保护机制,例如,数据执行保护(DEP,Data Execut1n Prevent1n),从而给操作系统以及网络带来极大的安全威胁。
[0007]以Windows操作系统为例,ROP攻击一直是微软面临的最大安全问题。虽然微软在不断完善ROP攻击的防护策略,例如,在Vista以上的版本中开始加入Windows地址空间配置随机化(ASLR, Address Space Layout Randomizat1n)防护技术或 Mandatory ASLR防护技术,可以较为有效地防范恶意应用程序中的ROP攻击,但该防范技术需要编译器的支持。这样,一方面,使得很多早期的操作系统,例如,早期版本msvcrt.dll、gdi32.dll等,由于都不支持ASLR以及支持编译器,导致早期的操作系统,容易被攻击者利用,从而成功构造ROP攻击代码进行操作系统攻击;另一方面,由于层出不穷的漏洞攻击,尤其是在微软停止XP服务后,已有的防护策略可能被其他的攻击方式所攻破,使得许多基于Windows操作系统的用户将面临更为严重的安全问题。


【发明内容】

[0008]有鉴于此,本发明实施例提供一种检测面向返程的编程攻击的方法及装置,能够有效检测ROP攻击、提升网络安全性。
[0009]为达到上述目的,本发明的实施例采用如下技术方案:
[0010]一方面,本发明实施例提供一种检测面向返程的编程攻击的方法,分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;该方法还包括:
[0011]监测到所述待监测的应用程序的进程调用预先设置的应用编程接口 API函数库中的API函数时,暂缓所述待监测的应用程序的进程对所述API函数的调用;
[0012]按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
[0013]本发明实施例提供的检测面向返程的编程攻击的方法,通过注入的方法注入应用编程接口函数监测程序,用以监测API函数的调用,在监测到API函数被调用时,先暂缓该API函数的调用,并对暂缓调用的API函数进行是否为ROP攻击的判断,以避免ROP攻击,可以不依赖系统版本、模块版本或软件版本,能够有效检测到是否为ROP攻击,并对检测到的ROP攻击进行有效的防护,提升了网络安全性。
[0014]另一方面,本发明实施例提供一种检测面向返程的编程攻击的装置,包括:注入模块、监测模块以及处理模块,其中,
[0015]注入模块,用于分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;
[0016]监测模块,用于在监测到所述待监测的应用程序的进程调用预先设置的应用编程接口 API函数库中的API函数后,暂缓所述待监测的应用程序的进程对所述API函数的调用;
[0017]处理模块,用于按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
[0018]本发明实施例提供的检测面向返程的编程攻击的装置,注入模块通过注入的方法注入应用编程接口函数监测程序,监测模块根据注入的应用编程接口函数监测程序监测API函数的调用,并在监测到API函数被调用时,先暂缓该API函数的调用,并对暂缓调用的API函数进行是否为ROP攻击的判断,以避免ROP攻击,从而能够有效检测到是否为ROP攻击,并对检测到的ROP攻击进行有效的防护,提升了网络安全性。

【专利附图】

【附图说明】
[0019]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0020]图1为本发明实施例检测面向返程的编程攻击的方法流程示意图;
[0021]图2为本发明实施例检测面向返程的编程攻击的方法具体流程示意图;
[0022]图3为本发明实施例检测面向返程的编程攻击的装置结构示意图。

【具体实施方式】
[0023]下面结合附图对本发明实施例进行详细描述。
[0024]应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0025]图1为本发明实施例检测面向返程的编程攻击的方法流程示意图。参见图1,该方法包括:
[0026]步骤101,分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;
[0027]本步骤中,在应用程序的进程中注入应用编程接口函数监测程序,是为了使注入的所述应用编程接口函数监测程序监测并处理所述待监测的应用程序的进程后续的调用事宜。
[0028]由于不同的用户,对操作系统进行操作的权限可能不同。例如,以Windows操作系统为例,Windows操作系统将用户分为不同的权限组,并为每个权限组赋予相应的操作权限。其中,权限组可以包括:管理员权限组、高权限用户组、普通用户组以及匿名权限组等。其中,管理员权限组对应的操作权限为管理员权限,高权限用户组对应的操作权限为高权限,普通用户组对应的操作权限为普通权限等。
[0029]本发明实施例中,考虑到不同的操作权限虽然将用户对操作系统的操作限制在相应的操作权限内,但由于各操作权限之间并不相互独立,都依赖于同样的指令完成权限操作。因而,可以利用提升权限(Adjust Token Privilege),例如,钩子(Hook)的方法提升用户访问的操作权限,其中,提升权限是指程序员或相关技术人员利用各种操作系统漏洞,突破操作系统指派的操作权限级别,将自己当前的操作权限提高一个或多个级别,从而使用户获取更多对操作系统进行操作的权限,例如,通过提升权限的方法,可以使用户获取原先未曾拥有的对系统文件的删、增、改等权限。
[0030]这样,通过提升权限的方法将本发明实施例的应用编程接口函数监测程序注入到运行的待监测应用程序的进程中,使得注入的应用编程接口函数监测程序能够对应用程序进程进行监测并拥有对进程进行处理的权限,由于拥有操作系统的高级权限,从而在后续应用中,本发明实施例提出的检测面向返程的编程攻击的方法可以不依赖于操作系统及模块版本,也无需编译器的支持,可以对早期Windows系统或者早期PE文件进行有效防护;进一步地,由于通过注入的方式,实现的是主动防御,可以实现对进程的有效监控,并能在后续进程调用应用编程接口(API, Applicat1n Program Interface)函数时,能够实时进行处理,从而降低操作系统遭受攻击的风险。
[0031]所应说明的是,该步骤只需执行一次,而无需在每次检测面向返程的编程攻击时都执行。
[0032]步骤102,监测到所述待监测的应用程序的进程调用预先设置的应用编程接口函数库中的API函数时,暂缓所述待监测的应用程序的进程对所述API函数的调用;
[0033]本步骤中,注入的应用编程接口函数监测程序在监测到该应用程序的进程调用API函数时,例如,在进程发出调用API函数的请求时,截获该调用API函数的请求,如果调用API函数的请求中包含的API函数属于预先设置的API函数库中的一 API函数,则暂缓该API函数的调用,以对该API函数进行处理后再确定是否允许该应用程序的进程调用该API函数。
[0034]步骤103,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
[0035]本步骤中,如果依据ROP防护策略,确定调用API函数的应用程序为恶意应用程序,则拒绝应用程序的进程调用暂缓调用的所述API函数,从而避免ROP攻击;如果确定调用API函数的应用程序为非恶意应用程序,允许调用暂缓调用的所述API函数,以执行正常的应用程序业务。
[0036]本发明实施例中,作为一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括:
[0037]获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否具有可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0038]作为另一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数也可以包括:
[0039]获取暂缓调用的API函数的返回地址,判断所述返回地址是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0040]作为再一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数也可以包括:
[0041]获取暂缓调用的API函数的返回地址,判断所述返回地址处的上一条指令是否为CALL指令,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0042]作为再一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数也可以包括:
[0043]获取暂缓调用的API函数的返回地址,判断所述返回地址是否在当前线程环境块中所描述的栈空间范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0044]作为再一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数也可以包括:
[0045]获取暂缓调用API函数的通用命名规则路径,判断获取的通用命名规则路径是否为远程路径,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0046]作为再一可选实施例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数也可以包括:
[0047]在API函数NtProtectVirtualMemory中,判断是否可将暂缓调用的API函数的属性修改为栈空间的可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0048]实际应用中,也可以结合上述方法的任意组合,以确定是否允许调用暂缓调用的所述API函数。即组合的ROP防护策略包括:返回地址属性检测策略、和/或,调用空间检测策略、和/或,调用指令检测策略、和/或,栈异常检测策略、和/或,通用命名规则路径检测策略、和/或,栈空间属性修改检测策略。
[0049]对于组合的情形,当根据当前的ROP防护策略确定不允许调用暂缓调用的所述API函数时,启用下一 ROP防护策略,对是否允许调用暂缓调用的所述API函数进行判断。以组合的ROP防护策略包括:返回地址属性检测策略以及调用空间检测策略为例,按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括:
[0050]Al,获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否具有可执行属性,如果是,执行步骤A2,如果否,允许调用暂缓调用的所述API函数;
[0051]A2,获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0052]本发明实施例中,在确定不允许调用暂缓调用的所述API函数之后,该方法还可以进一步包括:
[0053]发送消息提醒,以提醒用户进行处理;和/或,
[0054]对调用API函数的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行及时处理;和/或,
[0055]卸载调用API函数的应用程序,以避免该应用程序运行时带来的潜在风险;和/或,
[0056]为调用API函数的应用程序设置访问权限,例如,设置禁止网络访问权限或有限访问权限。
[0057]以下以一组合的ROP防护策略为例,对本发明实施例检测面向返程的编程攻击的方法流程进行详细描述。
[0058]图2为本发明实施例检测面向返程的编程攻击的方法具体流程示意图。参见图2,该方法包括:
[0059]步骤201,在待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;
[0060]本步骤中,作为可选实施例,应用编程接口函数监测程序包括主程序以及防护模块,并由主程序负责将防护模块注入到待监测的应用程序的进程中,即需要保护的进程中。例如,QQ应用程序进程、微信进程、IE进程、Office进程、应用程序安装进程等。具体地,可以预先在每一待监测的应用程序中注入一应用编程接口函数监测程序,并设置在待监测的应用程序启动时,同步启动注入的应用编程接口函数监测程序。
[0061]作为可选实施例,在待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序包括:
[0062]All,在待监测的应用程序中注入预先设置的应用编程接口函数监测程序的分析以及回调模块,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块;
[0063]本步骤中,可以通过调用WindowManager的addview方法替换所述待监测的应用程序的调用管理模块。这样,通过替换待监测的应用程序的调用管理模块,从而可以在后续流程中,在应用程序的进程调用API函数,可以按照注入的分析以及回调模块对调用的API函数进行处理。关于调用WindowManager的addview方法,属于公知技术,在此略去详述。
[0064]作为可选实施例,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块包括:
[0065]A111,查找所述待监测的应用程序的调用管理模块的内存变量;
[0066]A112,将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量。
[0067]本发明实施例中,作为可选实施例,步骤Al 12可以具体包括:
[0068]将分析以及回调模块的内存变量对应的代码写入动态链接库(DLL,Dynamic LinkLibrary)中,利用操作系统中的windows钩子(Hook)将写入动态链接库中的内存变量代码映射到所述调用管理模块。
[0069]作为另一可选实施例,步骤A112也可以包括:
[0070]将分析以及回调模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入(CreatRemoteThread)以及动态加载(LoadLibrary)将写入动态链接库中的内存变量代码映射到所述调用管理模块。
[0071]本发明实施例中,替换后的分析以及回调模块中相对应的内存变量代码所实现的功能与调用管理模块中的相关内存变量代码所实现的功能一致,且追加有暂缓调用以及依据ROP防护策略处理暂缓调用的API函数的功能。这样,可以实现对调用的API函数进行暂缓调用,并对其进行处理以确定是否允许其被调用。
[0072]所应说明的是,本发明实施例中的注入仅是示例性的,本领域普通技术人员可以采用其他的技术来完成替换流程,例如,在操作系统启动后调用SetWindowsHookEx接口向Windows操作系统注册本发明实施例的应用编程接口函数监测程序,用于监测和处理应用程序的进程调用API函数的事例,本发明实施例不再一一例举。
[0073]A12,监测到所述待监测的应用程序启动,同步启动注入在所述待监测的应用程序中的所述分析以及回调模块。
[0074]本步骤中,应用程序在启动的过程中,操作系统为该应用程序分配进程,在进程启动后,加载入在所述待监测的应用程序中的所述分析以及回调模块。
[0075]作为可选实施例,在注入预先设置的应用编程接口函数监测程序之前,该方法进一步包括:
[0076]调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程调用的API函数的应用编程接口函数监测程序。
[0077]本步骤中,应用编程接口函数监测程序是Windows操作系统中用于监测和处理进程调用的API函数的钩子程序。通过设置应用编程接口函数监测程序,每当进程发出调用API函数的请求之后,在没有调用API函数之前,应用编程接口函数监测程序可以捕获该调用API函数请求,即应用编程接口函数监测程序优先得到控制权。这样,应用编程接口函数监测程序可以修改该调用API函数请求,也可以不作处理而继续传递该调用API函数请求,还可以强制结束该调用API函数请求的传递。
[0078]作为另一可选实施例,在注入预先设置的应用编程接口函数监测程序之前,该方法可以进一步包括:
[0079]获取操作系统的根(Root)权限。
[0080]本步骤中,通过预先获取操作系统的Root权限,从而可以实现提升权限。其中,Root是Linux操作系统、Windows操作系统和Unix操作系统中的超级管理员用户账户,如果获得Root权限,表示已经获取操作系统的最高权限。这样,可以对操作系统中的任何文件(包括操作系统文件)执行增、删、改、查等操作,从而实现应用编程接口函数监测程序的注入。
[0081]步骤202,利用应用编程接口函数监测程序监测所述待监测的应用程序的进程对预先设置的API函数库中API函数的调用;
[0082]本步骤中,当前述的防护模块被注入到待监测的应用程序的进程中后,对进程调用预先设置的API函数进行监测,即利用API Hook技术,对当前进程中的所有关键API函数进行监测。
[0083]本发明实施例中,API Hook技术是一种通过修改API函数指令来检测API函数的执行或者改变API函数执行结果的技术。也就是说,在Windows操作系统下的应用程序编程,需要接触到API函数的调用以实现预设的功能,当对某些API函数的功能不满意的情况下,则可以通过API Hook技术修改或编辑API函数,使之能更好地服务于应用程序。
[0084]具体来说,用户可以通过Hook操作,提高自己的操作系统权限,从而跨越不同进程间访问的限制,并通过Hook “接触”到需要修改的API函数入口点,并改变API函数的地址使之指向新的自定义函数,以修改其功能。其中,Hook操作是一个用于处理信息的程序段,通过操作系统调用,可以将用户编程的应用程序挂入到操作系统中预定的应用程序中。例如,在Windows操作系统中,在使用Hook技术对API函数实施监控后,只要是针对受监控的API函数的调用行为,都会被自动截获,使得执行调用API函数的流程跳转到执行用于暂缓调用该API函数,并对暂缓调用的该API函数进行处理。
[0085]本发明实施例中,为了绕过操作系统的DEP防护策略,因而,在恶意应用程序构建的ROP攻击代码中,包含有对实现绕过操作系统DEP防护策略的相关API函数的调用指令,由该相关API函数构成API函数库。因而,API函数库中的API函数包括但不限于:
[0086]" ntdll.dll" " NtMapViewOfSect1n"
[0087]" ntdll.dll" " NtCreateSect1n"
[0088]" ntdll.dll" " NtCreateFile"
[0089]" ntdll.dll" " NtWriteVirtualMemory"
[0090]" ntdll.dll" " NtCreateThreadEx!f
[0091]" ntdll.dll" " NtCreateProcess!f
[0092]" ntdll.dll" " NtCreateUserProcess!f
[0093]" ntdll.dll" " RtlCreateHeap"
[0094]" ntdll.dll" " NtAl1cateVirtualMemory!f
[0095]" ntdll.dll" " LdrLoadDll"
[0096]" ntdll.dll" " NtProtectVirtualMemory"
[0097]" ntdll.dll" " LdrHotPatchRoutine"
[0098]" kernel32.dll" " MapViewOfFileEx"
[0099]" kernel32.dll" " MapViewOfFile"
[0100]" kernel32.dll" " CreateFileMappingW"
[0101]" kernel32.dll" " CreateFileMappingA"
[0102]" kernel32.dll" " CreateFileW!f
[0103]" kernel32.dll" " CreateFileA!f
[0104]" kernel32.dll" " WinExec/r
[0105]" kernel32.dll" " WriteProcessMemory"
[0106]" kernel32.dll" " CreateRemoteThreadEx!f
[0107]" kernel32.dll" " CreateRemoteThread!f
[0108]" kernel32.dll" " CreateProcessInternalW/r
[0109]" kernel32.dll" " CreateProcessInternalA"
[0110]" kernel32.dll" " CreateProcessW!f
[0111]" kernel32.dll" " CreateProcessA!f
[0112]" kernel32.dll" " HeapCreate/r
[0113]" kernel32.dll" " VirtualAllocExrr
[0114]" kernel32.dll" " VirtualAlloc"
[0115]" kernel32.dll" " LoadLibraryExW!f
[0116]" kernel32.dll" " LoadLibraryExA!f
[0117]" kernel32.dll" " LoadLibraryW!f
[0118]" kernel32.dll" " LoadLibraryA!f
[0119]" kernel32.dll" " VirtualProtectEx"
[0120]" kernel32.dll" " VirtualProtect"
[0121]实际应用中,还可以根据实际需要,在API函数库中添加其它API函数或从中删除一些API函数。
[0122]步骤203,监测到Hook的API函数被调用,暂缓所述待监测的应用程序的进程的调用,进行返回地址属性检测,判断该返回地址是否具有可执行属性,如果否,执行步骤211,如果是,执行步骤204;
[0123]本步骤中,可以根据栈指针寄存器(ESP,Extended Stack Pointer),获取待调用的API函数的返回地址,并判断该返回地址是否具有可执行属性。
[0124]作为可选实施例,可以通过VirtualQuery函数查询该返回地址处是否具有可执行属性。如果该返回地址处不具有可执行属性,则执行步骤211的返回攻击提醒流程,如果该返回地址具有可执行属性,则继续进行检测以确定是否为ROP攻击。其中,API函数的返回地址是指API函数的调用者(进程)所在的地址。因此,根据返回地址的特征可以确定API函数的调用者是否为恶意指令代码(shellcode),如果确定出调用者是恶意代码,则该API函数的调用就属于不合法的调用,向用户返回攻击提醒,由用户选择是否允许调用API函数,或者,直接拒绝该应用程序的进程对该API函数的调用。其中,Shellcode是一段可执行的CPU指令代码,在后续利用操作系统漏洞或应用程序软件漏洞成功实施缓冲区溢出攻击后,Shellcode将获得操作系统执行权限,从而可以执行其内存空间中的代码,造成应用程序执行流程跳转,从而使应用程序执行跳转到Shellcode所在的内存空间,并执行Shellcode中的代码,并通过执行Shellcode代码完成用户隐私信息的窃取。
[0125]实际应用中,一般的恶意代码shellcode都是被写入数据的内存页面,不具备可执行权限。因此,进一步地,可以通过检测API函数返回地址的内存页属性,来判断API函数调用是否合法,即利用VirtualQuery函数查看进程内存地址空间的页面分配情况(API函数的返回地址的内存页属性),如果查询到API函数的返回地址的内存页属性为不可执行属性,则判定该API函数的调用不合法。
[0126]步骤204,进行调用空间检测,判断该返回地址是否处于预先设置的模块的加载地址范围内,如果否,执行步骤211,如果是,执行步骤205 ;
[0127]本步骤中,调用空间检测是指通过VirtualQuery函数,查询该返回地址处是否处于预先设置的某模块内,即检测待调用的API函数的返回地址是否在预设的所属模块的加载地址范围内,也就是该返回地址是否为堆空间地址或者栈空间地址。如果不是,则返回攻击提醒。如果处于预设的所属模块的加载地址范围内,则继续进行检测以确定是否为ROP攻击。具体来说,如果是正常的API函数调用,API函数的返回地址会在所属模块的加载地址范围内,否则,该API函数的调用应该属于非法调用,应当被禁止。
[0128]需要说明的是,本发明实施例中,预设的所属模块是指应用程序的进程所加载的系统动态链接库(DLL, Dynamic Link Library)模块,DLL模块由一组可供任何应用程序使用的独立函数组成,每一 DLL模块包含一些可供应用程序或其他DLL模块调用的函数,每一函数对应有一加载地址,应用程序在启动运行过程中,会在用户的操作系统中对该DLL模块进行定位,并将该DLL模块映射到应用程序进程的地址空间中。操作系统将各应用程序所调用的相应DLL模块映射到对应进程的地址空间范围,形成所属模块的加载地址范围。
[0129]实际应用中,由于每一 DLL模块都有自己的内存地址范围,正常的API函数调用的返回地址都是在进程加载的DLL模块的内存地址范围内;而恶意代码调用API函数的返回地址,一般都不会在进程加载的DLL模块的内存地址范围内。因此,如果是恶意代码shellcode调用的API函数,则其返回地址就会与预设的所属模块的加载地址范围不符的情形,因而,当出现调用的API函数的返回地址与所属模块的加载地址范围不符的情形时,可以判定出当前进程的调用可能是不合法的。
[0130]本步骤可通过如下的程序代码段实现:
[0131]MEM0RY_BASIC_INF0RMAT1N mbmemlnfo ;
[0132]VirtualQuery((PVOID)IpRetAddr, &mbiMemInfo, sizeof (MEM0RY_BASIC_INFORMAT1N));
[0133]KAE_Success_EXIT (mbMemlnf0.TYpe = = MEM_IMAGE);
[0134]Kstatus = KAE_STATUS_FAILED ;
[0135]KAE_EXIT ;
[0136]Return kstatus ;
[0137]步骤205,进行调用指令检测,判断该返回地址处的上一条指令是否为CALL指令,如果否,执行步骤211,如果是,执行步骤206 ;
[0138]本步骤中,调用指令检测用于检测暂缓调用的API函数的调用指令是否为CALL指令。具体为:获取返回地址处的上一条指令,判断该上一条指令是否为CALL指令:如果不是,则返回攻击提醒。如果是CALL指令,则继续进行检测。
[0139]本步骤可通过如下的程序代码段实现:
[0140]KAESTATUS KStatus = KAE_STATUS_SUCCESS ;
[0141]KAE_SUCCESS_EXIT(*((PBYTE)lpRetAddr-5) = = 0XE8);
[0142]KAE_SUCCESS_EXIT(*((PBYTE)lpRetAddr-3) = = 0XE8);
[0143]KAE_SUCCESS_EXIT(*((PBYTE)lpRetAddr-5) = = 0X9A);
[0144]KAE_SUCCESS_EXIT(*((PBYTE)lpRetAddr-7) = = 0X9A);
[0145]for (int i = 2 ;i < 8 ;i++)
[0146]{
[0147]KAE_SUCCESS_EXIT(*((PBYTE)IpRetAddr-1) = = OXFF)&&
[0148](((* ((PBYTE)IpRetAddr-1+l))&0X38) = = 0X10));
[0149]}
[0150]for (int i = 2 ;i < 10 ;i++)
[0151]{
[0152]KAE_SUCCESS_EXIT(*((PBYTE)IpRetAddr-1) = = OXFF)&&
[0153](((* ((PBYTE)IpRetAddr-1+l))&0X38) = = 0X18));
[0154]}
[0155]KStatus = KAE_STATUS_FAILED ;
[0156]KAE_EXIT ;
[0157]Return KStatus ;
[0158]步骤206,进行栈异常检测,判断该返回地址是否属于当前TEB中所描述的栈空间范围内,如果否,执行步骤211,如果是,执行步骤207 ;
[0159]本步骤中,进行栈异常检测,以检测栈空间地址是否正常:判断API函数的返回地址是否在当前线程环境块(TEB, Thread Environment Block)中所描述的栈空间范围内。如果不在该TEB中所描述的栈空间范围内,则返回攻击提醒。如果是,则继续进行检测。其中,TEB中保存有频繁使用的线程相关的数据,位于用户地址空间内。
[0160]步骤207,进行UNC路径检测,判断UNC路径是否为远程路径,如果是,执行步骤211,如果否,执行步骤208 ;
[0161]本步骤中,进行通用命名规则(UNC, Universal Naming Convent1n)路径检测,以检测LoadLibrary的路径是否为网络路径(远程路径),即在函数LoadLibraryA或LoadLibraryff中,获取调用API函数的UNC路径,判断获取的UNC路径是否为远程路径,例如,是否为远程网络路径。如果是,则返回攻击提醒。如果不是,则继续进行检测。
[0162]步骤208,进行属性修改检测,判断属性修改是否为可执行属性,如果是,且修改目标为栈空间,执行步骤211,否则,结束检测流程。
[0163]本步骤中,进行属性修改检测:即在API函数NtProtectVirtualMemory中,判断是否可将API函数的属性修改为栈空间的可执行属性。如果是,则返回攻击提醒,否则,则结束检测。
[0164]步骤211,返回攻击提醒。
[0165]由上述可见,本发明实施例提供专门针对ROP攻击的检测方法,通过在待监测的应用程序的进程中注入应用编程接口函数监测程序,在监测到应用程序的进程调用API函数时,暂缓所述应用程序的进程对所述API函数的调用,并按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。通过注入程序的方法注入程序监测API函数的调用,可以不依赖系统版本、模块版本或软件版本,并能有效的防护ROP攻击,有效解决了早期Windows系统,或者早期PE文件的安全性防护技术问题。进一步地,还可以兼容现有Windows操作系统的安全机制,如DEP等技术,可大大提升用户电脑的安全保障性,极大地增加了漏洞攻击的难度,从而可大大降低漏洞攻击的成功率。而且,还可以通过组合的ROP防护策略,进行多重特征检测,极大地增加了构造ROP的难度,使得攻击者几乎很难再有机会完成ROP攻击。
[0166]图3为本发明实施例检测面向返程的编程攻击的装置结构示意图。参见图3,该装置包括:注入模块301、监测模块302以及处理模块303,其中,
[0167]注入模块301,用于分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;
[0168]本发明实施例中,作为可选实施例,注入模块301包括:注入单元以及同步单元(图中未示出),其中,
[0169]注入单元,用于在待监测的应用程序中注入预先设置的应用编程接口函数监测程序的分析以及回调模块,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块;
[0170]本发明实施例中,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块包括:
[0171]查找所述待监测的应用程序的调用管理模块的内存变量;
[0172]将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量。
[0173]其中,作为一可选实施例,将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量包括:
[0174]将分析以及回调模块的内存变量对应的代码写入动态链接库中,利用操作系统中的windows钩子将写入动态链接库中的内存变量代码映射到所述调用管理模块。
[0175]作为另一可选实施例,将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量包括:
[0176]将分析以及回调模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入以及动态加载将写入动态链接库中的内存变量代码映射到所述调用管理模块。
[0177]同步单元,用于在监测到所述待监测的应用程序启动后,同步启动注入在所述待监测的应用程序中的所述分析以及回调模块。
[0178]监测模块302,用于在监测到所述待监测的应用程序的进程调用预先设置的应用编程接口 API函数库中的API函数后,暂缓所述待监测的应用程序的进程对所述API函数的调用;
[0179]处理模块303,用于按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
[0180]本发明实施例中,作为一可选实施例,处理模块303包括:返回地址获取单元以及属性判断处理单元(图中未示出),其中,
[0181]返回地址获取单元,用于获取暂缓调用的API函数的返回地址;
[0182]属性判断处理单元,用于判断返回地址获取单元获取的返回地址的属性是否具有可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0183]作为另一可选实施例,处理模块303包括:返回地址获取单元以及加载地址判断处理单元(图中未示出),其中,
[0184]返回地址获取单元,用于获取暂缓调用的API函数的返回地址;
[0185]加载地址判断处理单元,用于判断返回地址获取单元获取的返回地址是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0186]作为再一可选实施例,处理模块303包括:返回地址获取单元以及指令判断处理单元(图中未示出),其中,
[0187]返回地址获取单元,用于获取暂缓调用的API函数的返回地址;
[0188]指令判断处理单元,用于判断返回地址获取单元获取的返回地址处的上一条指令是否为CALL指令,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0189]作为再一可选实施例,处理模块303包括:返回地址获取单元以及栈空间判断处理单元(图中未示出),其中,
[0190]返回地址获取单元,用于获取暂缓调用的API函数的返回地址;
[0191]栈空间判断处理单元,用于判断返回地址获取单元获取的返回地址是否在当前线程环境块中所描述的栈空间范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0192]作为再一可选实施例,处理模块303包括:路径获取单元以及路径判断处理单元(图中未示出),其中,
[0193]路径获取单元,用于获取暂缓调用API函数的通用命名规则路径;
[0194]路径判断处理单元,用于判断路径获取单元获取的通用命名规则路径是否为远程路径,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0195]作为再一可选实施例,处理模块303包括:函数获取单元以及属性修改处理单元(图中未示出),其中,
[0196]函数获取单兀,用于获取API函数NtProtectVirtualMemory ;
[0197]属性修改处理单元,用于在函数获取单元获取的API函数NtProtectVirtualMemory中,判断是否可将暂缓调用的API函数的属性修改为栈空间的可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
[0198]作为再一可选实施例,处理模块303包括:返回地址获取单元、属性判断处理单元以及加载地址判断处理单元(图中未示出),其中,
[0199]返回地址获取单元,用于获取暂缓调用的API函数的返回地址;
[0200]属性判断处理单元,用于判断返回地址获取单元获取的返回地址的属性是否具有可执行属性,如果是,将所述返回地址输出至加载地址判断处理单元,如果否,允许调用暂缓调用的所述API函数;
[0201]加载地址判断处理单元,用于判断接收的所述返回地址的属性是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
[0202]较佳地,处理模块303还可以进一步包括:
[0203]ROP攻击处理单元,用于在确定处理模块303不允许调用暂缓调用的所述API函数之后,发送消息提醒,以提醒用户进行处理;和/或,
[0204]对调用API函数的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行及时处理;和/或,
[0205]卸载调用API函数的应用程序;和/或,
[0206]为调用API函数的应用程序设置访问权限。
[0207]本发明实施例中,可以通过栈指针寄存器获取所述暂缓调用的API函数的返回地址,并通过VirtualQuery函数查询所述返回地址处是否具有可执行属性。
[0208]作为可选实施例,该装置还可以进一步包括:
[0209]注入设置模块304,用于调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程调用的API函数的应用编程接口函数监测程序,并获取操作系统的根权限,以将所述应用编程接口函数监测程序注入到待监测的应用程序中。
[0210]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。
[0211]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
【权利要求】
1.一种检测面向返程的编程攻击的方法,其特征在于,分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序;该方法还包括: 监测到所述待监测的应用程序的进程调用预先设置的应用编程接口 API函数库中的API函数时,暂缓所述待监测的应用程序的进程对所述API函数的调用; 按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
2.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否具有可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
3.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 获取暂缓调用的API函数的返回地址,判断所述返回地址是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
4.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 获取暂缓调用的API函数的返回地址,判断所述返回地址处的上一条指令是否为CALL指令,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
5.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 获取暂缓调用的API函数的返回地址,判断所述返回地址是否在当前线程环境块中所描述的栈空间范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
6.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 获取暂缓调用API函数的通用命名规则路径,判断获取的通用命名规则路径是否为远程路径,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
7.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: 在API函数NtProtectVirtualMemory中,判断是否可将暂缓调用的API函数的属性修改为栈空间的可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
8.根据权利要求1所述的方法,其特征在于,所述按照预先设置的ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数包括: Al,获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否具有可执行属性,如果是,执行步骤A2,如果否,允许调用暂缓调用的所述API函数; A2,获取暂缓调用的API函数的返回地址,判断所述返回地址的属性是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
9.根据权利要求2至8任一项所述的方法,其特征在于,在确定不允许调用暂缓调用的所述API函数之后,所述方法进一步包括: 发送消息提醒,以提醒用户进行处理;和/或, 对调用API函数的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行及时处理;和/或, 卸载调用API函数的应用程序;和/或, 为调用API函数的应用程序设置访问权限。
10.根据权利要求2至8任一项所述的方法,其特征在于,通过栈指针寄存器获取所述暂缓调用的API函数的返回地址,并通过VirtualQuery函数查询所述返回地址处是否具有可执行属性。
11.根据权利要求1至8任一项所述的方法,其特征在于,所述在待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序包括: 在待监测的应用程序中注入预先设置的应用编程接口函数监测程序的分析以及回调模块,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块; 监测到所述待监测的应用程序启动,同步启动注入在所述待监测的应用程序中的所述分析以及回调模块。
12.根据权利要求11所述的方法,其特征在于,所述利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块包括: 查找所述待监测的应用程序的调用管理模块的内存变量; 将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量。
13.根据权利要求12所述的方法,其特征在于,所述将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量包括: 将分析以及回调模块的内存变量对应的代码写入动态链接库中,利用操作系统中的windows钩子将写入动态链接库中的内存变量代码映射到所述调用管理模块。
14.根据权利要求12所述的方法,其特征在于,所述将所述调用管理模块的内存变量替换为分析以及回调模块的内存变量包括: 将分析以及回调模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入以及动态加载将写入动态链接库中的内存变量代码映射到所述调用管理模块。
15.根据权利要求1所述的方法,其特征在于,在注入预先设置的应用编程接口函数监测程序之前,所述方法进一步包括: 调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程调用的API函数的应用编程接口函数监测程序,并获取操作系统的根权限。
16.一种检测面向返程的编程攻击的装置,其特征在于,该装置包括:注入模块、监测模块以及处理模块,其中, 注入模块,用于分别在每一待监测的应用程序的进程中注入预先设置的应用编程接口函数监测程序; 监测模块,用于在监测到所述待监测的应用程序的进程调用预先设置的应用编程接口API函数库中的API函数后,暂缓所述待监测的应用程序的进程对所述API函数的调用; 处理模块,用于按照预先设置的面向返程的编程ROP防护策略处理暂缓调用的所述API函数,以确定是否允许调用暂缓调用的所述API函数。
17.根据权利要求16所述的装置,其特征在于,所述处理模块包括:返回地址获取单元以及属性判断处理单元,其中, 返回地址获取单元,用于获取暂缓调用的API函数的返回地址; 属性判断处理单元,用于判断返回地址获取单元获取的返回地址的属性是否具有可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
18.根据权利要求16所述的装置,其特征在于,所述处理模块包括:返回地址获取单元以及加载地址判断处理单元,其中, 返回地址获取单元,用于获取暂缓调用的API函数的返回地址; 加载地址判断处理单元,用于判断返回地址获取单元获取的返回地址是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
19.根据权利要求16所述的装置,其特征在于,所述处理模块包括:返回地址获取单元以及指令判断处理单元,其中, 返回地址获取单元,用于获取暂缓调用的API函数的返回地址; 指令判断处理单元,用于判断返回地址获取单元获取的返回地址处的上一条指令是否为CALL指令,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
20.根据权利要求16所述的装置,其特征在于,所述处理模块包括:返回地址获取单元以及栈空间判断处理单元,其中, 返回地址获取单元,用于获取暂缓调用的API函数的返回地址; 栈空间判断处理单元,用于判断返回地址获取单元获取的返回地址是否在当前线程环境块中所描述的栈空间范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
21.根据权利要求16所述的装置,其特征在于,所述处理模块包括:路径获取单元以及路径判断处理单元,其中, 路径获取单元,用于获取暂缓调用API函数的通用命名规则路径; 路径判断处理单元,用于判断路径获取单元获取的通用命名规则路径是否为远程路径,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
22.根据权利要求16所述的装置,其特征在于,所述处理模块包括:函数获取单元以及属性修改处理单元,其中, 函数获取单兀,用于获取API函数NtProtectVirtualMemory ; 属性修改处理单元,用于在函数获取单元获取的API函数NtProtectVirtualMemory中,判断是否可将暂缓调用的API函数的属性修改为栈空间的可执行属性,如果是,不允许调用暂缓调用的所述API函数,如果否,允许调用暂缓调用的所述API函数。
23.根据权利要求16所述的装置,其特征在于,所述处理模块包括:返回地址获取单元、属性判断处理单元以及加载地址判断处理单元,其中, 返回地址获取单元,用于获取暂缓调用的API函数的返回地址; 属性判断处理单元,用于判断返回地址获取单元获取的返回地址的属性是否具有可执行属性,如果是,将所述返回地址输出至加载地址判断处理单元,如果否,允许调用暂缓调用的所述API函数; 加载地址判断处理单元,用于判断接收的所述返回地址的属性是否在所述应用程序的进程所加载的系统动态链接库模块的加载地址范围内,如果是,允许调用暂缓调用的所述API函数,如果否,不允许调用暂缓调用的所述API函数。
24.根据权利要求17至23任一项所述的装置,其特征在于,所述处理模块进一步包括: ROP攻击处理单元,用于在确定处理模块不允许调用暂缓调用的所述API函数之后,发送消息提醒,以提醒用户进行处理;和/或, 对调用API函数的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行及时处理;和/或, 卸载调用API函数的应用程序;和/或, 为调用API函数的应用程序设置访问权限。
25.根据权利要求16至23任一项所述的装置,其特征在于,所述注入模块包括:注入单元以及同步单元,其中, 注入单元,用于在待监测的应用程序中注入预先设置的应用编程接口函数监测程序的分析以及回调模块,利用所述注入的分析以及回调模块替换所述待监测的应用程序的调用管理模块; 同步单元,用于在监测到所述待监测的应用程序启动后,同步启动注入在所述待监测的应用程序中的所述分析以及回调模块。
26.根据权利要求16至23任一项所述的装置,其特征在于,进一步包括: 注入设置模块,用于调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程调用的API函数的应用编程接口函数监测程序,并获取操作系统的根权限。
【文档编号】G06F21/56GK104268471SQ201410459638
【公开日】2015年1月7日 申请日期:2014年9月10日 优先权日:2014年9月10日
【发明者】薛小昊, 刘桂峰, 姚辉 申请人:珠海市君天电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1