一种阻止漏洞利用的方法及装置制造方法

文档序号:6505879阅读:219来源:国知局
一种阻止漏洞利用的方法及装置制造方法
【专利摘要】本发明公开了一种阻止漏洞利用的方法及装置,属于计算机领域。所述方法包括:获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链;根据所述访问信息,确定所述软件存在的漏洞是否被利用;如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。所述装置包括:获取模块、确定模块和结束模块。本发明能够成功阻止漏洞利用同时不影响系统运行。
【专利说明】—种阻止漏洞利用的方法及装置

【技术领域】
[0001]本发明涉及计算机领域,特别涉及一种阻止漏洞利用的方法及装置。

【背景技术】
[0002]软件在日常生活和工作中应用越来越多,其安全性非常重要,但是软件毕竟是人为编写的,漏洞产生在所难免。在发现漏洞之后到软件开发商发布漏洞修补补丁之间存在一段空档期,在这段空档期内需要阻止黑客利用漏洞进行破坏。
[0003]目前现有技术通过杀毒软件来阻止黑客利用软件中存在的漏洞,可以为:杀毒软件对终端上的整个软件系统进行保护,当发现软件系统中的某个软件存在漏洞时,则结束该软件继续运行。由于结束该软件运行后,黑客就无法利用该软件的漏洞,所以实现阻止黑客利用该软件中存在的漏洞来进行破坏。
[0004]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005]在现有技术中,杀毒软件是对整个软件系统进行保护的,如果杀毒软件保护太松,可能会遗漏个别漏洞,如果杀毒软件保护太严,会影响系统正常运行。


【发明内容】

[0006]为了能成功阻止漏洞利用同时不影响系统运行,本发明提供了一种阻止漏洞利用的方法及装置。所述技术方案如下:
[0007]—种阻止漏洞利用的方法,所述方法包括:
[0008]获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链;
[0009]根据所述访问信息,确定所述软件存在的漏洞是否被利用;
[0010]如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。
[0011]一种阻止漏洞利用的装置,所述装置包括:
[0012]获取模块,用于获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链;
[0013]确定模块,用于确定所述软件存在的漏洞是否被利用;
[0014]结束模块,用于如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用;
[0015]在本发明实施例中,获取软件访问内存的访问信息;根据访问信息确定所述软件存在的漏洞是否被利用;如果被利用,则结束软件运行。能成功阻止漏洞利用同时不影响系统运行。

【专利附图】

【附图说明】
[0016]图1是本发明实施例1提供的一种阻止软件漏洞利用的方法流程图;
[0017]图2-1是本发明实施例2提供的一种阻止软件漏洞利用的方法流程图;
[0018]图2-2是本发明实施例2提供的一种内存空间不意图;
[0019]图3-1是本发明实施例3提供的一种阻止软件漏洞利用的方法流程图;
[0020]图3-2 是本发明实施例 3 提供的第一种 SEH (Structured Except1n Handling,结构化异常处理)链结构示意图;
[0021]图3-3是本发明实施例3提供的第二种SHl链结构示意图;
[0022]图4是本发明实施例4提供的一种阻止软件漏洞利用的装置结构示意图。

【具体实施方式】
[0023]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0024]实施例1
[0025]参见图1,本发明实施例提供了一种阻止软件漏洞利用的方法,包括:
[0026]步骤101:获取软件访问内存的访问信息,访问信息包括软件在运行过程中访问内存的内存地址或者软件在运行过程中发生的异常所在的线程对应的SHl链;
[0027]步骤102:根据访问信息,确定软件存在的漏洞是否被利用;
[0028]步骤103:如果软件存在的漏洞被利用,则结束软件继续运行,以实现阻止软件的漏洞被利用。
[0029]在本发明实施例中,获取软件访问内存的访问信息;根据访问信息确定所述软件存在的漏洞是否被利用;如果被利用,则结束软件运行。能成功阻止漏洞利用同时不影响系统运行。
[0030]实施例2
[0031]在实施例1所示的方法基础之上,本发明实施例提供了一种阻止软件漏洞利用的方法。
[0032]其中,该方法获取软件运行过程中访问内存的内存地址,根据该内存地址确定软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,则结束该软件继续运行,以实现阻止该软件的漏洞被利用。
[0033]参见图2-1,该方法包括:
[0034]步骤201:获取该软件运行过程中访问内存的内存地址;
[0035]进一步地,在执行本步骤之前,还可以包括:
[0036]当该软件启动时,在该软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
[0037]其中,可以通过Virtual Alloc系列函数来在该软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
[0038]其中,该软件中包括多个类,当该软件启动时,该软件会为其包括的类申请内存空间。参见图2-2,该内存空间用于存储该类包括的函数、虚表和该虚表的地址,该虚表用于存储该类包括的函数的地址。
[0039]其中,该软件为其包括的类申请内存空间时,创建其对应的一个地址列表,该地址列表用于存储该内存空间中包括的内存地址与属性信息的对应关系。该软件还保存每个类对应的指针,每个类对应的指针分别用于指向每个类对应的内存空间。
[0040]当软件需要调用某个类的函数时,该软件根据该类的指针定位到该类对应的内存空间,从该内存空间中获取虚表地址,根据该虚表地址定位出对应的虚表,根据该函数的偏移量,从该虚表中获取该函数的地址,根据该函数的地址来调用该函数。
[0041]需要说明的是:该软件可能存在漏洞,当该软件运行到其存在的漏洞时,该软件可能释放掉其申请的内存空间,并且在释放其申请的内存空间之后还可能去访问其释放的内存空间。
[0042]其中,目前黑客可以利用该软件存在的漏洞,具体为:当该软件释放其申请的内存空间时,黑客可以将该内存空间中的虚表的地址替换为与空操作指令相同的内存地址,在该内存地址对应的内存空间中存储该内存地址,且存储该内存地址个数与该虚表中包括的函数的地址的个数相同,然后再在该内存地址对应的内存空间中的最后一行内存地址后存储恶意代码。
[0043]当该软件因存在的漏洞又重新调用某个类的函数,该软件根据该类的指针定位到该类对应的内存空间,从该内存空间中获取虚表的地址。由于该虚表的地址已被黑客替换为与空操作指令相同的内存地址,所以该软件根据虚表的地址,定位出该内存地址对应的内存空间,根据该函数的偏移量,从定位出的内存空间中获取该函数的地址。由于定位出的内存空间中存储的都是该内存地址,所以该软件根据该函数地址又重新定位出该内存空间,此时该软件将该内存空间中存储的内存地址作为空指令进行执行,直到执行到恶意代码进行破坏。因此本发明实施例可以利用如下202至204的步骤来阻止该软件存在的漏洞被黑客利用。
[0044]其中,与空操作指令相同的内存地址即可以作为内存地址,又可以作为空操作指令,包括 0x0a0a0a0a、0x0b0b0b0b、0x0c0c0c0c、0x0d0d0d0d、0x0e0e0e0e、0x0f0f0f0f、0x14141414和0x15151515中的至少一者。例如,对于OxOaOaOaOa这个数据,即可以作为空操作指令,又可以作为内存地址。
[0045]步骤202:根据获取的内存地址,确定该软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,则执行步骤203 ;
[0046]具体地,本步骤可以通过如下第一和第二两种方式来实现,包括:
[0047]第一、判断获取的内存地址是否与空操作指令相同,如果是,则确定出该软件存在的漏洞被利用,如果否,则确定出该软件存在的漏洞没有被利用。
[0048]其中,将获取的内存地址与已存储的空操作指令表中包括的每个空操作指令进行比较,如果比较出该空操作指令表中存在与获取的内存地址相同的空操作指令,则判断出获取的内存地址与空操作指令相同,如果比较出该空操作指令表中不存在与获取的内存地址相同的空操作指令。则判断出获取的内存地址与空操作指令不同。
[0049]第二,对获取的内存地址对应的内存空间进行判断,如果该内存空间不可读不可写,则确定出该软件存在的漏洞被利用,如果该内存空间可读或可写,则确定出该软件存在的漏洞没有被利用。
[0050]其中,根据获取的内存地址,从该软件对应的地址列表中获取该内存地址的属性信息,地址列表用于存储内存地址与属性信息的对应关系;如果该属性信息为不可读不可写,则判断出该内存地址对应的内存空间不可读不可写;如果该属性信息为可读或可写,则判断出该内存地址对应的内存空间可读或可写。
[0051]步骤203:结束该软件继续运行,以实现阻止该软件的漏洞被利用;
[0052]具体地,结束用于运行该软件的进程,以实现结束该软件继续运行。
[0053]其中,当该软件启动时,操作系统为该软件分配一个进程,该进程用于运行该软件。
[0054]步骤204:显示提示信息给用户,以提示用户因该软件存在的漏洞被利用而结束该软件继续运行。
[0055]其中,当发现该软件存在的漏洞被利用时给用户以提示,例如“该软件存在的漏洞正在被利用,处于安全考虑将结束该软件运行”等等。
[0056]在本发明实施例中,获取该软件运行过程中访问内存的内存地址,根据获取的内存地址,确定该软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,显示提示信息给用户,以提示用户因该软件存在的漏洞被利用而结束该软件继续运行,以实现阻止该软件的漏洞被利用。能成功阻止漏洞利用同时不影响系统运行。
[0057]实施例3
[0058]在实施例1所示的方法基础之上,本发明实施例提供了一种阻止软件漏洞利用的方法。
[0059]其中,该方法获取软件在运行过程中发生的异常所在的线程对应的SHl链,根据该SHl链确定该软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,则结束该软件继续运行,以实现阻止该软件的漏洞被利用。
[0060]参见图3-1,该方法包括:
[0061]步骤301:获取软件在运行过程中发生的异常所在的线程对应的SHl链;
[0062]其中,当该软件启动时,操作系统创建该软件包括的一个或多个线程,不同线程之间互不干涉,并为每个线程创建对应的一个SHl链。SHl链中包括多个SHl节点,每个SHl节点至少包括节点指针和函数指针。对于任一个SEH节点中包括的节点指针用于指向该SEH节点的下一个SHl节点,以及该SHl节点包括的函数指针用于指向异常处理函数。参见图3-2。
[0063]其中,软件通过其包括的线程来运行,该软件包括的线程在运行过程中可能会发生异常,该线程发生的异常即为该软件在运行过程中发生异常。当该软件发生异常时,可以获取发生该异常的线程,即获取该异常所在的线程,并进一步获取该线程对应的SEH链。
[0064]当软件发生异常时,该软件可以获取该异常所在线程对应的SHl链。从该SHl链包括的第一个SHl节点开始遍历,根据遍历的SHl节点中包括的函数指针调用对应的异常处理函数,并确定该异常处理函数能否处理该异常。如果能,则结束继续遍历该SHl链中的SEH节点,并通过该异常处理函数来处理该异常;如果不能,根据遍历的SHl节点中包括的节点指针遍历下一个SHl节点,直到找出能处理该异常的异常函数或遍历到最后一个SEH节点时为止。
[0065]其中,可以通过KiUserExcept1nDispatcher系统函数派发异常,依次遍历该SEH链中的每个函数指针调用对应的异常处理函数。
[0066]其中,软件可能存在漏洞,当软件运行到其包括的漏洞时,软件可能发溢出并覆盖某个SHl链包括的SHl节点。此时黑客可以将覆盖的SHl节点包括的函数指针设置为指向恶意代码,将覆盖的SHl节点包括的节点指针的值设置为任一数值。
[0067]其中,当该SHl链对应的线程发生异常时,软件可以遍历该SHl链,并根据覆盖的SEH节点中包括的函数指针调用并运行恶意代码,所以在本发明实施例中,需要通过如下步骤302至304来阻止黑客利用软件存在的漏洞。
[0068]进一步地,在执行本步骤之前,当该软件启动并在操作系统创建该软件包括的线程对应的SHl链后,还可以包括:
[0069]当该软件启动时,在该软件包括的线程所对应的SHl链的最末尾节点后添加预设的SEH节点。参见图3-3。
[0070]具体地,当该软件启动时,在该软件包括的线程对应的SHl链中查找到最末尾节点,设置最末尾节点中包括的节点指针指向预设的SEH节点。参见图3-3。
[0071]其中,可以通过挂钩系统提供的CreatThread函数,通过挂钩技术修改新线程的函数入口,可以达到在SHl链的最末尾节点后添加一个节点指针并指向预设的SHl节点的目的。
[0072]步骤302:根据该SEH链确定该软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,则执行步骤303;
[0073]具体地,对该SHl链的完整性进行判断,如果该SHl链不完整,则确定出软件存在的漏洞被利用;如果该SHl链完整,则确定出软件存在的漏洞没有被利用。
[0074]其中,对该SHl链的完整性进行判断的操作,可以为:
[0075]获取该SEH链最末尾的一个SHl节点,如果该SEH节点不是预设的SEH节点,则判断出该SHl链不完整;如果该SHl节点是预设的SHl节点,则判断出该SHl链完整。
[0076]其中,从该SHl链的第一个SHl节点开始,并根据第一个SHl节点包括的节点指针查找下一个节点,直到查找到该SHl链的最末尾SHl节点。如果该SHl链中的某个SHl节点被黑客修改,则当查找到该SHl节点时,由于该SHl节点中的节点指针的值被黑客修改为任一数值,所以根据该SHl节点中的节点指针查找不出下一个SHl节点,所以查找的最末尾的SEH节点为该SHl节点,而不是预设的SHl节点,从而可以确定出软件存在的漏洞被利用。
[0077]步骤303:结束该软件继续运行,以实现阻止该软件的漏洞被利用;
[0078]具体地,结束用于运行该软件的进程,以实现结束该软件继续运行。
[0079]其中,当该软件启动时,操作系统为该软件分配一个进程,该进程用于运行该软件。
[0080]步骤304:显示提示信息给用户,以提示用户因该软件存在的漏洞被利用而结束该软件继续运行。
[0081]其中,当发现该软件存在的漏洞被利用时给用户以提示,例如“该软件存在的漏洞正在被利用,处于安全考虑将结束该软件运行”等等。
[0082]在本发明实施例中,获取软件在运行过程中发生的异常所在的线程对应的SEH链,根据该SHl链确定该软件存在的漏洞是否被利用,如果该软件存在的漏洞被利用,显示提示信息给用户,以提示用户因该软件存在的漏洞被利用而结束该软件继续运行,以实现阻止该软件的漏洞被利用。能成功阻止漏洞利用同时不影响系统运行。
[0083]实施例4
[0084]参见图4,本发明实施例提供了一种阻止软件漏洞利用的装置,包括:
[0085]获取模块401,用于获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的SEH链;
[0086]确定模块402,用于根据所述访问信息,确定所述软件存在的漏洞是否被利用;
[0087]结束模块403,用于如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。
[0088]其中,所述确定模块402包括:
[0089]第一判断单元,用于判断所述内存地址是否与空操作指令相同,如果是,则确定出所述软件存在的漏洞被利用,如果否,则确定出所述软件存在的漏洞没有被利用;
[0090]第二判断单元,用于对所述内存地址对应的内存空间进行判断,如果所述内存空间不可读不可写,则确定出所述软件存在的漏洞被利用,如果所述内存空间可读或可写,则确定出所述软件存在的漏洞没有被利用。
[0091]其中,所述第二判断单元包括:
[0092]获取子单元,用于根据所述内存地址,从所述软件对应的地址列表中获取所述内存地址的属性信息,所述地址列表用于存储内存地址与属性信息的对应关系;
[0093]判断子单元:用于如果所述属性信息为不可读不可写,则判断出所述内存地址对应的内存空间不可读不可写;如果所述属性信息为可读或可写,则判断出所述内存地址对应的内存空间可读或可写。
[0094]进一步地,所述装置还包括:
[0095]修改模块:用于当所述软件启动时,在所述软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
[0096]进一步地,与所述空操作指令相同的内存地址包括OxOaOaOaOa、OxObObObOb、OxOcOcOcOc,OxOdOdOdOd,OxOeOeOeOe,OxOfOfOfOf,0x14141414 和 0x15151515 中的至少一者。
[0097]其中,所述确定模块402包括;
[0098]第三判断单元,用于对所述SEH链的完整性进行判断;
[0099]第一确定单元,用于如果所述SHl链不完整,则确定出所述软件存在的漏洞被利用;
[0100]第二确定单元,用于如果所述SHl链完整,则确定出所述软件存在的漏洞没有被利用。
[0101]其中,所述第三判断单元包括:
[0102]获取子单元,用于获取所述SHl链最末尾的一个SHl节点;
[0103]第一判断子单元,用于如果所述SHl节点不是预设的SHl节点,则判断出所述SEH节点不完整;
[0104]第二判断子单元,用于如果所述SHl节点是预设的SHl节点,则判断出所述SHl链完整。
[0105]进一步地,所述装置还包括:
[0106]添加模块,用于在创建所述软件包括的线程时,获取所述创建的线程对应的SEH链,在所述获取的SHl链的最末尾节点之后添加预设的SHl节点。
[0107]在本发明实施例中,获取软件访问内存的访问信息;根据访问信息确定所述软件存在的漏洞是否被利用;如果被利用,则结束软件运行。能成功阻止漏洞利用同时不影响系统运行。
[0108]本实施例提供了一种可读存储介质,所述可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序被一个或者一个以上的处理器用来执行一种阻止漏洞利用的方法,所述方法包括:
[0109]获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链;
[0110]根据所述访问信息,确定所述软件存在的漏洞是否被利用;
[0111]如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。
[0112]优选的,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括:
[0113]判断所述内存地址是否与空操作指令相同,如果是,则确定出所述软件存在的漏洞被利用,如果否,则确定出所述软件存在的漏洞没有被利用。
[0114]优选的,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括:
[0115]对所述内存地址对应的内存空间进行判断,如果所述内存空间不可读不可写,则确定出所述软件存在的漏洞被利用,如果所述内存空间可读或可写,则确定出所述软件存在的漏洞没有被利用。
[0116]优选的,所述对所述内存地址对应的内存空间进行判断,包括:
[0117]根据所述内存地址,从所述软件对应的地址列表中获取所述内存地址的属性信息,所述地址列表用于存储内存地址与属性信息的对应关系;
[0118]如果所述属性信息为不可读不可写,则判断出所述内存地址对应的内存空间不可读不可写;
[0119]如果所述属性信息为可读或可写,则判断出所述内存地址对应的内存空间可读或可写。
[0120]进一步地,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用之前,还包括:
[0121]当所述软件启动时,在所述软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
[0122]其中,与所述空操作指令相同的内存地址包括OxOaOaOaOa、OxObObObOb、OxOcOcOcOc,OxOdOdOdOd,OxOeOeOeOe,OxOfOfOfOf,0x14141414 和 0x15151515 中的至少一者。
[0123]优选的,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括:
[0124]对所述结构化异常处理链的完整性进行判断;
[0125]如果所述结构化异常处理链不完整,则确定出所述软件存在的漏洞被利用;
[0126]如果所述结构化异常处理链完整,则确定出所述软件存在的漏洞没有被利用。
[0127]优选的,所述对所述SHl链的完整性进行判断,包括:
[0128]获取所述结构化异常处理链最末尾的一个结构化异常处理节点;
[0129]如果所述结构化异常处理节点不是预设的结构化异常处理节点,则判断出所述结构化异常处理节点不完整;
[0130]如果所述结构化异常处理节点是预设的结构化异常处理节点,则判断出所述结构化异常处理链完整。
[0131]进一步地,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用之前,还包括:
[0132]在创建所述软件包括的线程时,获取所述创建的线程对应的结构化异常处理链,在所述获取的结构化异常处理链的最末尾节点之后添加预设的结构化异常处理节点。
[0133]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0134]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种阻止漏洞利用的方法,其特征在于,所述方法包括: 获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链;根据所述访问信息,确定所述软件存在的漏洞是否被利用; 如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。
2.如权利要求1所述的方法,其特征在于,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括: 判断所述内存地址是否与空操作指令相同,如果是,则确定出所述软件存在的漏洞被利用,如果否,则确定出所述软件存在的漏洞没有被利用。
3.如权利要求1所述的方法,其特征在于,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括: 对所述内存地址对应的内存空间进行判断,如果所述内存空间不可读不可写,则确定出所述软件存在的漏洞被利用,如果所述内存空间可读或可写,则确定出所述软件存在的漏洞没有被利用。
4.如权利要求3所述的方法,其特征在于,所述对所述内存地址对应的内存空间进行判断,包括: 根据所述内存地址,从所述软件对应的地址列表中获取所述内存地址的属性信息,所述地址列表用于存储内存地址与属性信息的对应关系; 如果所述属性信息为不可读不可写,则判断出所述内存地址对应的内存空间不可读不可写; 如果所述属性信息为可读或可写,则判断出所述内存地址对应的内存空间可读或可与。
5.如权利要求4所述的方法,其特征在于,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用之前,还包括: 当所述软件启动时,在所述软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
6.如权利要求2或5所述的方法,其特征在于, 与所述空操作指令相同的内存地址包括OxOaOaOaOa、OxObObObOb、OxOcOcOcOc、0x0d0d0d0d、0x0e0e0e0e、0x0f0f0f0f、0xl4141414 和 0x15151515 中的至少一者。
7.如权利要求1所述的方法,其特征在于,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用,包括: 对所述结构化异常处理链的完整性进行判断; 如果所述结构化异常处理链不完整,则确定出所述软件存在的漏洞被利用; 如果所述结构化异常处理链完整,则确定出所述软件存在的漏洞没有被利用。
8.如权利要求7所述的方法,其特征在于,所述对所述结构化异常处理链的完整性进行判断,包括: 获取所述结构化异常处理链最末尾的一个结构化异常处理节点; 如果所述结构化异常处理节点不是预设的结构化异常处理节点,则判断出所述结构化异常处理节点不完整; 如果所述结构化异常处理节点是预设的结构化异常处理节点,则判断出所述结构化异常处理链完整。
9.如权利要求7或8所述的方法,其特征在于,所述根据所述访问信息,确定所述软件存在的漏洞是否被利用之前,还包括: 在创建所述软件包括的线程时,获取所述创建的线程对应的结构化异常处理链,在所述获取的结构化异常处理链的最末尾节点之后添加预设的结构化异常处理节点。
10.一种阻止漏洞利用的装置,所述装置包括: 获取模块,用于获取软件访问内存的访问信息,所述访问信息包括所述软件在运行过程中访问内存的内存地址或者所述软件在运行过程中发生的异常所在的线程对应的结构化异常处理链; 确定模块,用于根据所述访问信息,确定所述软件存在的漏洞是否被利用; 结束模块,用于如果所述软件存在的漏洞被利用,则结束所述软件继续运行,以实现阻止所述软件的漏洞被利用。
11.如权利要求10所述的装置,其特征在于,所述确定模块包括: 第一判断单元,用于判断所述内存地址是否与空操作指令相同,如果是,则确定出所述软件存在的漏洞被利用,如果否,则确定出所述软件存在的漏洞没有被利用。
12.如权利要求10所述的装置,其特征在于,所述确定模块包括: 第二判断单元,用于对所述内存地址对应的内存空间进行判断,如果所述内存空间不可读不可写,则确定出所述软件存在的漏洞被利用,如果所述内存空间可读或可写,则确定出所述软件存在的漏洞没有被利用。
13.如权利要求12所述的装置,其特征在于,第二判断单元包括: 获取子单元,用于根据所述内存地址,从所述软件对应的地址列表中获取所述内存地址的属性信息,所述地址列表用于存储内存地址与属性信息的对应关系; 判断子单元:用于如果所述属性信息为不可读不可写,则判断出所述内存地址对应的内存空间不可读不可写;如果所述属性信息为可读或可写,则判断出所述内存地址对应的内存空间可读或可写。
14.如利要求13所述的装置,其特征在于,所述装置还包括: 修改模块:用于当所述软件启动时,在所述软件对应的地址列表中将与空操作指令相同的内存地址对应的属性信息修改为不可读不可写。
15.如权利要求11或14所述的装置,其特征在于, 与所述空操作指令相同的内存地址包括OxOaOaOaOa、OxObObObOb、0x0c0c0c0c、0x0d0d0d0d、0x0e0e0e0e、0x0f0f0f0f、0xl4141414 和 0x15151515 中的至少一者。
16.如权利要求10所述的装置,其特征在于,所述确定模块包括: 第三判断单元,用于对所述结构化异常处理链的完整性进行判断; 第一确定单元,用于如果所述结构化异常处理链不完整,则确定出所述软件存在的漏洞被利用; 第二确定单元,用于如果所述结构化异常处理链完整,则确定出所述软件存在的漏洞没有被利用。
17.如权利要求10所述的装置,其特征在于,所述第三判断单元包括: 获取子单元,用于获取所述结构化异常处理链最末尾的一个结构化异常处理节点; 第一判断子单元,用于如果所述结构化异常处理节点不是预设的结构化异常处理节点,则判断出所述结构化异常处理节点不完整; 第二判断子单元,用于如果所述结构化异常处理节点是预设的结构化异常处理节点,则判断出所述结构化异常处理链完整。
18.如权利要求16或17所述的装置,其特征在于,所述装置还包括: 添加模块,用于在创建所述软件包括的线程时,获取所述创建的线程对应的结构化异常处理链,在所述获取的结构化异常处理链的最末尾节点之后添加预设的结构化异常处理节点。
【文档编号】G06F21/57GK104298922SQ201310298110
【公开日】2015年1月21日 申请日期:2013年7月16日 优先权日:2013年7月16日
【发明者】赵歆 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1