一种漏洞利用的检测方法、装置、电子设备及存储介质与流程

文档序号:33035919发布日期:2023-01-24 19:50阅读:23来源:国知局
一种漏洞利用的检测方法、装置、电子设备及存储介质与流程

1.本技术涉及信息安全技术领域,具体而言,涉及一种漏洞利用的检测方法、装置、电子设备及存储介质。


背景技术:

2.随着科技的进步和发展,电子设备已经成为人们工作和生活不可缺少的一部分,如电脑、手机等,人们使用这些电子设备进行办公、娱乐、学习、购物等。相应的,人们的各种个人信息和财产安全都与电子设备中的信息息息相关。因此,电子设备的信息安全日益受到人们的重视。
3.目前,在现有技术中,电子设备(如计算机)受到shellcode的攻击较为普遍,shellcode是具有特定功能的攻击计算机系统漏洞的一段代码,根据不同的攻击需求,shellcode的功能有所不同。常见的主要功能有通过tcp协议连接到控制服务器,接收控制命令;下载木马程序并运行。shellcode可以通过网络发送到指定服务器;也可以包含在pdf、word,jpeg等文件中发送到攻击目标的计算机中。一旦shellcode得以执行,目标系统就可能被种上木马程序,从而被黑客控制。iexplorer,flash player等流行软件漏洞曾一度被黑客利用,大量传播病毒等恶意软件。
4.近些年,较为流行的漏洞攻击技术是通过篡改脚本api地址,从而实现无shellcode化的漏洞利用,从而目前针对shellcode的漏洞利用检测技术便无法准确、有效地对这种无shellcode的漏洞利用进行检测。


技术实现要素:

5.本技术实施例的目的在于提供一种漏洞利用的检测方法、装置、电子设备及存储介质,用以提高对漏洞利用检测的准确性。
6.第一方面,本技术实施例提供一种漏洞利用的检测方法,包括:获取被触发的异常对应的异常信息,该异常信息包括异常标识、访问者地址和访问地址;根据异常标识、访问者地址和访问地址判断该异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;若该异常为对目标内存的预设访问行为触发的,则确定该异常为漏洞利用异常。
7.本技术实施例基于漏洞利用代码在利用过程中会访问目标内存的特征,因此,预先在目标内存中设置禁止访问的内存属性,当有代码访问该目标内存时,则抛出异常,veh则根据异常信息中的异常表示、访问者地址和访问地址判断该异常是否为漏洞利用异常,从而,可以有效识别漏洞利用的行为。
8.在任一实施例中,根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的,包括:
9.根据异常标识判断是否为保护页面gp异常;
10.若是gp异常,则根据访问者地址判断gp异常是否为内存属性对应的gp异常;
11.若是内存属性对应的gp异常,则根据访问者地址和访问地址判断异常是否为目标模块访问对应的目标内存触发。
12.在实际应用中,本技术的漏洞利用检测方案可以在目标内存中设置页面属性,别的对象也可以在该目标内存中设置页面属性,因此,当触发了gp异常后,可以根据访问者地址和访问地址判断该异常是否是内存属性对应的gp异常,以及是否是目标模块自己访问自己,从而可以准确地捕捉到漏洞利用异常。
13.在任一实施例中,根据访问者地址判断gp异常是否为内存属性对应的gp异常,包括:
14.将访问者地址与预先保存的内存属性对应的异常地址进行匹配,以判断gp异常是否为内存属性对应的gp异常。
15.本技术实施例通过预先保存内存属性对应的异常地址,从而可以通过将访问者地址与预先保存的异常地址进行匹配,以快速、准确地识别该异常是否为内存属性对应的gp异常。
16.在任一实施例中,根据访问者地址和访问地址判断异常是否为目标模块访问对应的目标内存触发,包括:
17.将访问者地址和访问地址与目标模块对应的内存地址范围进行匹配,以判断异常是否为目标模块访问对应的目标内存触发。
18.本技术实施例通过将访问者地址和访问地址与目标模块对应的内存地址范围进行匹配,若访问者地址和访问地址均在内存地址范围内,则说明该异常是目标模块自己访问自己的目标内存导致的,属于预设访问行为,从而可以准确识别出该漏洞利用异常。
19.在任一实施例中,在确定该异常为gp异常后,所述方法还包括:
20.清除内存属性;
21.在确定异常为目标模块访问对应的目标内存触发的之后,所述方法还包括:
22.将单步异常tf标识寄存器的值设置为预设值。
23.本技术实施例中,由于gp异常属于一次性异常,在触发后该内存属性会自动清除,为了能够持续对目标内存进行监控,可以通过设置tf标识寄存器的值,使得触发tf异常,并通过tf异常再次将内存属性增加到目标内存中。
24.在任一实施例中,所述方法还包括:
25.若根据异常标识确定异常为tf异常,则将tf标识寄存器的值恢复为默认值,并在目标内存中重新设置禁止访问的内存属性。
26.本技术实施例通过触发tf异常来重新给目标存储设置内存属性,以能够实现对目标内存的持续检测。
27.在任一实施例中,在向量化异常例程veh获取被触发的异常对应的异常信息之前,该方法还包括:
28.在动态链接库dll中初始化veh函数;
29.若当前进程中包括目标模块,则在目标模块对应的目标内存中设置禁止访问的内存属性。
30.本技术实施例通过在dll中初始化veh函数,以及在目标内存中设置内存属性,为检测漏洞利用提供了检测基础。
31.在任一实施例中,该方法还包括:
32.若当前进程中不包括目标模块,则设置目标模块加载的钩子函数;
33.在通过钩子函数监测到加载目标模块时,对目标模块对应的目标内存中设置禁止访问的内存属性。
34.本技术实施例通过钩子函数监测是否在进程中加载目标模块,以便能够及时在目标内存中设置内存属性。
35.第二方面,本技术实施例提供一种漏洞利用的检测装置,包括:
36.信息获取模块,用于获取被触发的异常对应的异常信息,该异常信息包括异常标识、访问者地址和访问地址;
37.异常判断模块,用于根据异常标识、访问者地址和访问地址判断所述异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;
38.异常确定模块,用于若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
39.第三方面,本技术实施例提供一种电子设备,包括:处理器、存储器和总线,其中,
40.所述处理器和所述存储器通过所述总线完成相互间的通信;
41.所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行第一方面的方法。
42.第四方面,本技术实施例提供一种非暂态计算机可读存储介质,包括:
43.所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行第一方面的方法。
44.本技术的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术实施例了解。本技术的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
45.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
46.图1为本技术实施例提供的一种漏洞利用的检测方法流程示意图;
47.图2为本技术实施例提供的一种veh异常处理流程示意图;
48.图3为本技术实施例提供的veh异常处理流程示意图;
49.图4为本技术实施例提供的初始化流程示意图;
50.图5为本技术实施例提供的一种漏洞利用的检测装置结构示意图;
51.图6为本技术实施例提供的电子设备实体结构示意图。
具体实施方式
52.下面将结合附图对本技术技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本技术的技术方案,因此只作为示例,而不能以此来限制本技术的保护范
围。
53.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同;本文中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本技术;本技术的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。
54.在本技术实施例的描述中,技术术语“第一”“第二”等仅用于区别不同对象,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量、特定顺序或主次关系。在本技术实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
55.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
56.在本技术实施例的描述中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
57.在本技术实施例的描述中,术语“多个”指的是两个以上(包括两个),同理,“多组”指的是两组以上(包括两组),“多片”指的是两片以上(包括两片)。
58.在本技术实施例的描述中,技术术语“中心”“纵向”“横向”“长度”“宽度”“厚度”“上”“下”“前”“后”“左”“右”“竖直”“水平”“顶”“底”“内”“外”“顺时针”“逆时针”“轴向”“径向”“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本技术实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本技术实施例的限制。
59.在本技术实施例的描述中,除非另有明确的规定和限定,技术术语“安装”“相连”“连接”“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;也可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本技术实施例中的具体含义。
60.下面针对涉及到的相关概念进行解释:
61.1、veh,用户自定义的windows异常处理例程,用来处理进程范围内产生的异常信息,其被保存在一个全局的链表中,进程内的所有线程都可以使用该例程,是第一个处理异常的例程,因此,当有线程出现异常时,cpu会将捕获到的该线程的异常信息给veh处理,veh可根据内部预设的判断条件判断异常信息是否是对目标内存的预设访问行为。
62.2、guard_page,内存属性,特点是一次性,访问该属性的内存后,会触发status_guard_page_violation异常,并且触发一次,该属性自动清除。
63.3、tf异常,status_single_setp单步异常,一种异常事件类型,触发后cpu自动清除该tf异常对应的tf标记;
64.4、脚本引擎,主要是以ie、office、flash为主的三大软件系列中支持的编程语言,jscript、vbscript、vbe、flash等脚本解释器引擎。
65.目前,在现有技术中,检测shellcode漏洞利用代码的方法较为成熟,例如静态检
测方法和动态检测方法。但是,近些年还流行无shellcode特征的漏洞利用代码,针对这类代码,上述静态检测方法和动态检测方法均无法准确地识别出。
66.现有关于脚本引擎漏洞防护,也都是点对点、亡羊补牢的方式去拦截,比如通过提前占坑的方式来缓解堆喷漏洞利用。这些方式无法解决通过任意地址读写,直接调用系统api、godmode上帝模式等,此类漏洞利用技术没有shellcode等明显特征,因此无法有效拦截和检测。
67.本技术发明人经过大量的漏洞验证程序(proof of concept,poc)验证,发现漏洞利用过程中,会访问脚本引擎pe头的特征。基于该特征,本技术发明人提出了一种漏洞利用的检测方法,即,预先在脚本引擎pe头对应的内存中设置gp属性,当有程序访问该内存时,触发gp异常,并根据gp异常的具体信息判断该程序是否为漏洞利用程序。
68.可以理解的是,本技术实施例所提供的漏洞利用的检测方法可以应用于对脚本引擎的漏洞利用检测。
69.图1为本技术实施例提供的一种漏洞利用的检测方法流程示意图,如图1所示,执行该方法的主体可以是电子设备,该电子设备可以包括终端及服务器,其中,终端包括其中终端具体可以为智能手机、平板电脑、计算机、个人数字助理(personal digital assitant,pda)等;服务器具体可以为应用服务器,也可以为web服务器。电子设备中存储有待保护的对象,例如脚本引擎等。
70.该方法包括:
71.步骤101:向量化异常例程veh获取被触发的异常对应的异常信息,所述异常信息包括异常标识、访问者地址和访问地址。
72.当cpu捕捉到异常后,将该异常对应的异常信息发送给veh,由veh对该异常进行处理。异常标识是用于表征异常类型的唯一标识,该异常标识可以为异常名,例如:status_guard_page_violation,表示为gp异常,status_single_step表示为tf异常。另外,异常标识还可以用二进制数表示,例如:“01”可以表示gp异常,“10”表示为tf异常。应当说明的是,veh接收到的异常类型除了上述两种外,还包含其他类型的异常,本技术实施例对此不作具体限定。
73.访问者地址是指访问该某内存的代码对应的地址,可以用“eip_addr”表示,通俗地讲,该访问者地址用于表示是谁访问该内存。访问地址是指访问的内存的地址,可以用“data_addr”表示,通俗地讲,该访问地址用于表示访问了哪里触发的异常。
74.可以理解的是,该异常信息中还可以包含其他参数,例如:触发异常的时间等,本技术实施例对此不作具体限定。
75.步骤102:根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性。
76.在具体的实施过程中,由于本技术发明人发现漏洞利用代码在执行过程中,有访问脚本引擎pe头的特点,因此,为了捕捉到漏洞利用代码,可以在脚本引擎pe头对应的内存(即目标内存)中设置禁止访问的内存属性。该禁止访问的内存属性可以用“guard page”属性表示,设置了该属性的内存被访问后,会触发异常。可以理解的是,很多种访问该目标内存的行为均会触发异常,例如:正常的代码访问该目标内存,或漏洞利用代码访问该目标内存等,都会触发异常。
77.由于该异常是在进程中触发的,且veh异常处理机制具备高优先级,因此该异常会先交给veh处理。veh可根据接收到的异常标识、访问者地址和访问地址来判断触发该异常的行为是否是对目标内存的预设访问行为。可以理解的是,对目标内存的预设访问行为是预先设定的某一特定的访问行为,该行为被认定为是漏洞利用代码在执行过程中,对目标内存的访问行为。例如:是目标内存对应的目标模块访问该目标内存的行为等。
78.步骤103:若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
79.在根据异常标识、访问者地址、访问地址判断得知该异常是对目标内存的预设访问行为而触发的,那么则可以确定该异常为漏洞利用异常,相应的,触发该异常的代码属于漏洞利用代码。
80.本技术实施例基于漏洞利用代码在利用过程中会访问目标内存的特征,因此,预先在目标内存中设置禁止访问的内存属性,当有代码访问该目标内存时,则抛出异常,veh则根据异常信息中的异常表示、访问者地址和访问地址判断该异常是否为漏洞利用异常,从而,可以有效识别漏洞利用的行为。
81.在上述实施例的基础上,根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的,包括:
82.根据异常标识判断是否为保护页面gp异常;
83.若是gp异常,则根据访问者地址判断gp异常是否为内存属性对应的gp异常;
84.若是内存属性对应的gp异常,则根据访问者地址和访问地址判断异常是否为目标模块访问对应的目标内存触发。
85.在具体的实施过程中,图2为本技术实施例提供的一种veh异常处理流程示意图,如图2所示,veh在接收到异常信息后,先根据异常信息中的异常标识判断该异常是否为gp异常,如果是gp异常,则再判断该gp异常是其他代码设置的内存属性触发的异常,还是我们设置的内存属性触发的异常,具体判断方法可通过访问者地址来进行判断。如果该gp异常是我们触发了我们设置的内存属性而产生的,则进一步判断触发该gp异常的具体访问行为是否为预设访问行为。可以理解的是,所谓预设访问行为即目标模块访问对应的目标内存的行为,可通过访问者地址和访问地址来判断是否为预设访问行为。
86.在实际应用中,本技术的漏洞利用检测方案可以在目标内存中设置页面属性,别的对象也可以在该目标内存中设置页面属性,因此,当触发了gp异常后,可以根据访问者地址和访问地址判断该异常是否是内存属性对应的gp异常,以及是否是目标模块自己访问自己,从而可以准确地捕捉到漏洞利用异常。
87.在上述实施例的基础上,根据访问者地址判断gp异常是否为内存属性对应的gp异常,包括:
88.将访问者地址与预先保存的内存属性对应的异常地址进行匹配,以判断gp异常是否为内存属性对应的gp异常。
89.在具体的实施过程中,在设置目标内存的禁止访问的内存属性时,将该内存属性对应的异常地址保存起来,当触发gp异常时,将访问者地址与我们保存的异常地址进行比对,如果相等,则说明该gp异常为我们设置的内存属性触发的,如果不相等,则说明该gp异常不是我们设置的内存属性触发的。针对不是我们设置的内存属性触发的gp异常的情况,
可以将该异常信息发送给其他异常处理函数进行处理。
90.本技术实施例通过预先保存内存属性对应的异常地址,从而可以通过将访问者地址与预先保存的异常地址进行匹配,以快速、准确地识别该异常是否为内存属性对应的gp异常。
91.在上述实施例的基础上,根据访问者地址和访问地址判断异常是否为目标模块访问对应的目标内存触发,包括:
92.将访问者地址和访问地址与目标模块对应的内存地址范围进行匹配,以判断异常是否为目标模块访问对应的目标内存触发。
93.在具体的实施过程中,目标模块对应一块内存(即目标内存),该目标内存包括数据段和代码段,假设目标内存的内存地址范围为[0,100],其中[0,50]为代码段,[90,100]为数据段。在判断异常是否为目标模块访问对应的内标存储触发的时,可以判断访问者地址和访问地址是否均处于目标模块对应的内存地址范围内,例如:访问者地址处于[0,50]内,访问地址处于[90,100],则可确定该异常是目标模块访问对应的目标内存触发的。只要访问者地址不处于[0,50]内,和/或访问地址不处于[90,100],则可确定该异常不是目标模块访问对应的目标内存触发的。
[0094]
应当说明的是,本技术实施例中所述的内存地址范围的具体取值只是一种示例,本技术不对其进行具体限定。
[0095]
本技术实施例通过将访问者地址和访问地址与目标模块对应的内存地址范围进行匹配,若访问者地址和访问地址均在内存地址范围内,则说明该异常是目标模块自己访问自己的目标内存导致的,属于预设访问行为,从而可以准确识别出该漏洞利用异常。
[0096]
在上述实施例的基础上,在确定所述异常为gp异常后,所述方法还包括:
[0097]
清除内存属性;
[0098]
在确定异常为目标模块访问对应的目标内存触发的之后,该方法还包括:
[0099]
将单步异常tf标识寄存器的值设置为预设值。
[0100]
在具体的实施过程中,由于内存属性为一次性的,即触发了对应的gp异常后,该内存属性便会被veh自动清除。由于清除内存属性后,则不会再触发gp异常,那么当有漏洞利用代码再次访问该目标内存时,便不会触发gp异常,进而,不能持续实现对目标内存的监控。为了解决该问题,本技术通过在确定该异常为漏洞利用异常后,将tf标识寄存器的值设置为预设值,可以理解的是,该预设值为能够让访问目标内存的代码触发tf异常的值,例如可以将tf标识寄存器的值设置为1,当然,还可以设置为其他值,本技术实施例对此不作具体限定。
[0101]
另外,由于tf标识寄存器的预设值是在触发了我们设置的gp异常后设置的,即在检测到有漏洞利用后设置的,因此,若待检测代码在执行过程中,如果触发了tf异常,也可说明已经触发过一次gp异常。
[0102]
本技术实施例中,由于gp异常属于一次性异常,在触发后该内存属性会自动清除,为了能够持续对目标内存进行监控,可以通过设置tf标识寄存器的值,使得触发tf异常,并通过tf异常再次将内存属性增加到目标内存中。
[0103]
在上述实施例的基础上,在设置了tf标识寄存器的值之后,该方法还包括:
[0104]
若根据异常标识确定异常为tf异常,则将tf标识寄存器的值恢复为默认值,并在
目标内存中重新设置禁止访问的内存属性。
[0105]
在具体的实施过程中,在设置了tf标识寄存器的值之后,执行待检测代码中的下一行代码,此时便会抛出tf异常,cpu在捕获到该tf异常后,将该tf异常发送给veh,veh在接收到异常信息后,根据异常信息中的异常标识判断该异常为tf异常,veh恢复tf标识寄存器的值为默认值。可以理解的是,默认值是指用于表征tf标识寄存器为正常状态的值,该值不会触发tf异常,例如可以为“0”,当然,也可以为其他数值,本技术实施例对此不作具体限定。
[0106]
另外,veh重新给目标模块对应的目标内存设置禁止访问的内存属性,从而可以持续对目标内存进行安全监控。
[0107]
可以理解的是,tf异常到达异常处理器之前,cpu会自动清除tf标记。
[0108]
图3为本技术实施例提供的veh异常处理流程示意图,如图3所示,包括:
[0109]
步骤301:veh接收异常信息;cpu在捕获到异常后,将异常信息发送给veh,其中,异常信息包括异常标识、访问者地址和访问地址。
[0110]
步骤302:判断是否为gp异常;veh在接收到异常信息后,根据异常标识判断该异常是否为status_guard_page_violation(gp)异常,如果是gp异常,则执行步骤303,否则执行步骤309,可以理解的是,步骤302和步骤309也可以同时进行,即veh根据异常标识判断该异常是gp异常,还是status_single_step(tf)异常,或者其他类型的异常。若是gp异常,则执行步骤303,若是tf异常,则执行步骤310,若是其他类型的异常,则直接返回exception_continue_search,即执行步骤312。
[0111]
步骤303:清除gp异常对应的内存属性;由于gp异常为一次性的,因此在触发了gp异常后,该gp异常对应的内存属性会自动消失。
[0112]
步骤304:判断是否监控地址范围的gp异常;在判断为gp异常后,进一步判断该gp异常是否是我们设置的内存属性触发的,具体判断方法参见上述实施例,此处不再赘述。如果是监控地址范围的gp异常,则执行步骤305,否则直接返回exception_continue_search,即执行步骤312。
[0113]
步骤305:设置tf标记;在判断该gp异常为我们设置的内存属性触发的异常后,为了能够持续对目标内存进行安全监控,需要利用触发tf单步异常的方式重新给目标内存设置内存属性。
[0114]
步骤306:判断是否是自己访问自己;进一步判断该gp异常是否为自己访问自己触发的,所谓自己访问自己是指访问者地址为目标内存中的代码段地址,访问地址为目标内存中的数据地址。
[0115]
步骤307:上报事件;如果是自己访问自己,则说明该代码为漏洞利用代码,向预设的安全服务器上报该事件。
[0116]
步骤308:重新执行下一行异常代码;执行下一行异常代码的目的是为了触发tf异常。
[0117]
步骤309:判断是否为tf异常;veh在接收到异常信息后,根据异常信息中的异常标识判断该异常是否为tf异常,如果是tf异常,则执行步骤310,否则执行步骤312。
[0118]
步骤310:清除tf标记;cpu将tf标识寄存器的值置为默认值。
[0119]
步骤311:重新设置gp异常对应的内存属性;在目标内存中重新设置gp异常对应的
内存属性。
[0120]
步骤312:交给其他异常处理器;如果不是gp异常和tf异常,则将该异常信息发送给其他异常处理器处理。
[0121]
本技术实施例通过触发tf异常来重新给目标存储设置内存属性,以能够实现对目标内存的持续检测。
[0122]
在上述实施例的基础上,在向量化异常例程veh获取被触发的异常对应的异常信息之前,所述方法还包括:
[0123]
在动态链接库dll中初始化veh函数;
[0124]
若当前进程中包括目标模块,则在所述目标模块对应的所述目标内存中设置禁止访问的内存属性。
[0125]
若所述当前进程中不包括所述目标模块,则设置目标模块加载的钩子函数;
[0126]
在通过所述钩子函数监测到加载所述目标模块时,对所述目标模块对应的所述目标内存中设置禁止访问的内存属性。
[0127]
在具体的实施过程中,图4为本技术实施例提供的初始化流程示意图,如图4所示,本技术实施例提供的检测方法对应的程序实现在一个dll模块中,因此,首先对dll进行初始化,在dll主函数中初始化veh异常处理函数,并且,对于当前已存在进程的情况,先枚举当前进程中的所有模块,根据模块名称判断是否存在目标模块,如果存在目标模块,则在该目标模块对应的内存中设置禁止访问的内存属性。对于当前进程不存在目标模块的情况,则可设置目标模块加载的钩子函数hook,通过钩子函数监测是否加载目标模块,当监测到加载了目标模块,则对目标模块对应的目标内存中设置禁止访问的内存属性。还有一种不存在进程的情况,则可新创建一个进程,并设置目标模块加载的钩子函数hook,通过钩子函数监测是否加载目标模块,当监测到加载了目标模块,则对目标模块对应的目标内存中设置禁止访问的内存属性。
[0128]
本技术实施例通过在dll中初始化veh函数,以及在目标内存中设置内存属性,为检测漏洞利用提供了检测基础。
[0129]
图5为本技术实施例提供的一种漏洞利用的检测装置结构示意图,该装置可以是电子设备上的模块、程序段或代码。应理解,该装置与上述图1方法实施例对应,能够执行图1方法实施例涉及的各个步骤,该装置具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。所述装置包括:信息获取模块501、异常判断模块502和异常确定模块503,其中:
[0130]
信息获取模块501用于获取被触发的异常对应的异常信息,异常信息包括异常标识、访问者地址和访问地址;
[0131]
异常判断模块502用于根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;
[0132]
异常确定模块503用于若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
[0133]
在上述实施例的基础上,异常判断模块502具体用于:
[0134]
根据异常标识判断是否为保护页面gp异常;
[0135]
若是所述gp异常,则根据访问者地址判断gp异常是否为内存属性对应的gp异常;
[0136]
若是内存属性对应的gp异常,则根据访问者地址和访问地址判断异常是否为目标模块访问对应的目标内存触发。
[0137]
在上述实施例的基础上,异常判断模块502具体用于:
[0138]
将访问者地址与预先保存的内存属性对应的异常地址进行匹配,以判断gp异常是否为内存属性对应的gp异常。
[0139]
在上述实施例的基础上,异常判断模块502具体用于:
[0140]
将访问者地址和访问地址与目标模块对应的内存地址范围进行匹配,以判断异常是否为目标模块访问对应的目标内存触发。
[0141]
在上述实施例的基础上,该装置还包括:
[0142]
属性清除模块,用于清除所述内存属性;
[0143]
tf异常设置模块,用于将单步异常tf标识寄存器的值设置为预设值。
[0144]
在上述实施例的基础上,该装置还包括:
[0145]
属性重设模块,用于若根据异常标识确定异常为tf异常,则将tf标识寄存器的值恢复为默认值,并在目标内存中重新设置禁止访问的内存属性。
[0146]
在上述实施例的基础上,该装置还包括初始化模块,用于:
[0147]
在动态链接库dll中初始化veh函数;
[0148]
若当前进程中包括目标模块,则在目标模块对应的目标内存中设置禁止访问的内存属性。
[0149]
在上述实施例的基础上,该初始化模块还用于:
[0150]
若当前进程中不包括所述目标模块,则设置目标模块加载的钩子函数;
[0151]
在通过钩子函数监测到加载目标模块时,对目标模块对应的目标内存中设置禁止访问的内存属性。
[0152]
图6为本技术实施例提供的电子设备实体结构示意图,如图6所示,所述电子设备,包括:处理器(processor)601、存储器(memory)602和总线603;其中,
[0153]
所述处理器601和存储器602通过所述总线603完成相互间的通信;
[0154]
所述处理器601用于调用所述存储器602中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:向量化异常例程veh获取被触发的异常对应的异常信息,异常信息包括异常标识、访问者地址和访问地址;根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
[0155]
处理器601可以是一种集成电路芯片,具有信号处理能力。上述处理器601可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本技术实施例中公开的各种方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0156]
存储器602可以包括但不限于随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-only memory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),
电可擦除只读存储器(electrically erasable programmable read-only memory,eeprom)等。
[0157]
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:向量化异常例程veh获取被触发的异常对应的异常信息,异常信息包括异常标识、访问者地址和访问地址;根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
[0158]
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:向量化异常例程veh获取被触发的异常对应的异常信息,异常信息包括异常标识、访问者地址和访问地址;根据异常标识、访问者地址和访问地址判断异常是否为对目标内存的预设访问行为触发的;其中,目标内存中预先设置有禁止访问的内存属性;若异常为对目标内存的预设访问行为触发的,则确定异常为漏洞利用异常。
[0159]
在本技术所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0160]
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0161]
再者,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0162]
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0163]
以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1