CN115344867A - 漏洞利用检测的处理方法及装置、存储介质 - Google Patents
漏洞利用检测的处理方法及装置、存储介质 Download PDFInfo
- Publication number
- CN115344867A CN115344867A CN202210956343.XA CN202210956343A CN115344867A CN 115344867 A CN115344867 A CN 115344867A CN 202210956343 A CN202210956343 A CN 202210956343A CN 115344867 A CN115344867 A CN 115344867A
- Authority
- CN
- China
- Prior art keywords
- pointer
- binary program
- main thread
- thread
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种漏洞利用检测的处理方法及装置、存储介质。该方法包括:确定二进制程序、多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针;通过主线程读取第一指针指向的数据,并依据第一指针指向的数据,判断第一指针是否为有效指针;若第一指针不是有效指针,则触发内存访问异常的信息;在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向的数据。通过本申请,解决了相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题。
Description
技术领域
本申请涉及内存安全技术领域,具体而言,涉及一种漏洞利用检测的处理方法及装置、存储介质。
背景技术
为了检测出样本是否进行了二进制漏洞利用,需要进行颗粒度更细的内存级检测。通常的做法是,在目标程序运行时的某个特定时间点,读取特定位置内存中的二进制数据,从中筛选出有用的数据,包括但不限于指针数据,再通过这些指针获取更多的数据。进而从这些二进制数据中判定是否存在二进制漏洞利用的行为。相较于其他形式的漏洞检测,二进制漏洞利用检测的过程有着更为苛刻的要求,比如说某一个字节不正确,就会导致CPU发出内存访问错误。在内存检测过程中遇到异常或错误时,所带来的影响会更大,轻则检测程序崩溃检测结束,严重的时候会使整个计算机系统崩溃重启。
另外,内存访问错误是指在程序的运行过程中,通过指针读取指针指向的数据时,当指针指向的内存空间不是有效内存空间时,由CPU向进程发出内存访问异常。当程序没有处理这个异常时,系统将会结束这个程序。在内存级别的安全检测中,最重要的问题就是如何正确地处理内存访问错误。且相关技术中,通过C++提供的try-catch结构(一种处理内存访问异常的结构)来捕获程序运行过程中产生的异常,即在编写程序时,且在获取指针指向的数据时,通过添加嵌套try-catch结构,来捕获和读取数据过程中产生的异常信号。但是,这种方法无法在C使用,故此方法的适用范围较小,且此方法只能捕获软件异常,无法处理由CPU发出内存访问错误等硬件异常。另外,相关技术中,在Windows编程中,还通过windows提供结构化异常SHE,__try{}-__except{}结构(另一种处理内存访问异常的结构)处理异常,即在编写程序时,在获取指针指向的数据时,添加嵌套__try{}-__except{}结构,可以捕获,读取数据过程中产生的异常信号。但是,该方法需要导入windows编译环境,故此方法的适用范围也较小。
针对相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种漏洞利用检测的处理方法及装置、存储介质,以解决相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种漏洞利用检测的处理方法。该方法包括:确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
进一步地,在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,所述方法还包括:创建监控线程;在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
进一步地,在若所述第一指针不是有效指针,则触发内存访问异常的信息之后,所述方法还包括:将所述主线程的运行状态切换为休眠状态;在通过所述主线程读取所述第二指针指向所述二进制程序的数据之前,所述方法还包括:依据所述监控线程记录的所述历史运行状态,将所述主线程进行唤醒,以将所述主线程从休眠状态恢复为运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第二指针指向所述二进制程序的数据。
进一步地,在依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针之后,所述方法还包括:若所述第一指针是有效指针,则不触发所述内存访问异常的信息,并保存所述第一指针;通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测。
进一步地,在保存所述第一指针之后,在通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测之前,所述方法还包括:判断是否完成对所述多个目标指针的遍历;若已完成对所述多个目标指针的遍历,则对所述第一指针进行漏洞利用检测,并确定对所述二进制程序进行漏洞利用检测的检测结果;若未完成对所述多个目标指针的遍历,则执行通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测的步骤。
进一步地,确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程包括:获取目标函数,其中,所述目标函数为在对所述二进制程序进行漏洞利用时所使用的函数;判断在所述目标系统上运行所述二进制程序时是否调用所述目标函数;若在所述目标系统上运行所述二进制程序时调用所述目标函数,则读取所述目标系统中的内存数据,以对所述二进制程序进行漏洞利用检测;依据读取到的所述目标系统中的内存数据,确定用于对所述二进制程序进行漏洞利用检测的所述多个目标指针。
进一步地,所述目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
为了实现上述目的,根据本申请的另一方面,提供了一种漏洞利用检测的处理装置。该装置包括:第一确定单元,用于确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;第一处理单元,用于通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;第一触发单元,用于若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;第一读取单元,用于在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
进一步地,所述装置还包括:第一创建单元,用于在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,创建监控线程;第二处理单元,用于在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;第三处理单元,用于通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
进一步地,所述装置还包括:第一切换单元,用于在若所述第一指针不是有效指针,则触发内存访问异常的信息之后,将所述主线程的运行状态切换为休眠状态;第一唤醒单元,用于在通过所述主线程读取所述第二指针指向所述二进制程序的数据之前,依据所述监控线程记录的所述历史运行状态,将所述主线程进行唤醒,以将所述主线程从休眠状态恢复为运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第二指针指向所述二进制程序的数据。
进一步地,所述装置还包括:第一保存单元,用于在依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针之后,若所述第一指针是有效指针,则不触发所述内存访问异常的信息,并保存所述第一指针;第二读取单元,用于通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测。
进一步地,所述装置还包括:第一判断单元,用于在保存所述第一指针之后,在通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测之前,判断是否完成对所述多个目标指针的遍历;第一结束单元,用于若已完成对所述多个目标指针的遍历,则对所述第一指针进行漏洞利用检测,并确定对所述二进制程序进行漏洞利用检测的检测结果;第一执行单元,用于若未完成对所述多个目标指针的遍历,则执行通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测的步骤。
进一步地,所述第一确定单元包括:第一获取模块,用于获取目标函数,其中,所述目标函数为在对所述二进制程序进行漏洞利用时所使用的函数;第一判断模块,用于判断在所述目标系统上运行所述二进制程序时是否调用所述目标函数;第一读取模块,用于若在所述目标系统上运行所述二进制程序时调用所述目标函数,则读取所述目标系统中的内存数据,以对所述二进制程序进行漏洞利用检测;第一确定模块,用于依据读取到的所述目标系统中的内存数据,确定用于对所述二进制程序进行漏洞利用检测的所述多个目标指针。
进一步地,所述目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
为了实现上述目的,根据本申请的另一方面,提供了一种计算机可读存储介质,所述存储介质存储程序,其中,所述程序执行上述的任意一项所述的漏洞利用检测的处理方法。
为了实现上述目的,根据本申请的另一方面,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述的任意一项所述的漏洞利用检测的处理方法。
通过本申请,采用以下步骤:确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针;通过主线程读取第一指针指向二进制程序的数据,并依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针;若第一指针不是有效指针,则触发内存访问异常的信息,其中,内存访问异常的信息用于表示对目标系统中的内存数据访问异常,二进制程序运行在目标系统上;在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用,解决了相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题。通过主线程和监控线程之间的切换,可以处理在对二进制程序进行漏洞利用检测时出现的内存访问异常的情况,从而可以使处理漏洞利用检测过程中产生的内存访问异常的方法具有更广阔的适用范围,进而达到了对二进制程序进行漏洞利用检测的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的漏洞利用检测的处理方法的流程图;
图2是根据本申请实施例提供的可选的漏洞利用检测的处理方法的流程图;
图3是本申请实施例中的内存检测逻辑的流程图;
图4是根据本申请实施例提供的漏洞利用检测的处理装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于描述,以下对本申请实施例涉及的部分名词或术语进行说明:
漏洞利用一般是指在网络攻防中攻击者利用程序中的一些漏洞,在未获得授权许可的情况下,使程序运行攻击者的恶意代码,从而获取受害者计算机系统运行任意命令权限的过程。且现在的漏洞利用主要分为两个方向:WEB方向和二进制方向。相比WEB方向,二进制方向的漏洞利用的攻防聚焦在计算机内存的二进制数据上。二进制漏洞利用即在二进制程序中发现漏洞,并利用漏洞将一些恶意代码写入到目标进程的内存空间中并执行。二进制漏洞利用中所使用的恶意代码一般以常人看来无意义的二进制乱码的形式存在。
二进制程序指的是包括但不限于由C\C++编译的程序。二进制程序的特点是程序的逻辑已经被程序编译器从能被常人阅读的源代码翻译成可被CPU直接识别并运行的机器语言,这些机器语言都是以二进制乱形式存在。
API(Application Programming Interface,应用编程接口)为由计算机操作系统提供的计算机程序函数。
API hook是一种API调用拦截技术。当目标进程调用一个特定的API时,使用APIhook技术可以拦截、暂停这次调用。恶意样本分析工程师在这个时候就有机会获取感兴趣的数据,做一些逻辑判定,比如读取栈空间上的数据等。做完这些恶意样本分析工程师自定义的动作之后,再返回执行被拦截的API。
线程是操作系统中的一个资源调度概念。线程在进程中创建,由操作系统调度以及维护。在多线程编程中,一个程序会被要求同时执行两个或两个以上的任务。其中的执行逻辑可以这样理解:系统让线程A执行一定时间,然后换线程B执行一定时间,然后又换回线程A执行一定时间,这样重复直到程序结束。系统还提供了一些API,可以让线程B先进入睡眠,等待某个事件触发再唤醒线程B,比如等待CPU发出的内存访问错误。
线程表是保存在操作系统内核中的一个表,当进程中的一个线程进入就绪、阻塞等状态后,操作系统会保存线程的状态到线程表,其中线程的状态包括但不限于线程的寄存器数据。当一个线程被唤醒时,会读取线程表记录的状态后运行。
实施例1
下面结合优选的实施步骤对本发明进行说明,图1是根据本申请实施例提供的漏洞利用检测的处理方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针。
例如,在对二进制程序进行漏洞利用检测时,确定在漏洞利用检测过程中用到的多个可疑指针(上述的目标指针)、监控线程和主线程。
步骤S102,通过主线程读取第一指针指向二进制程序的数据,并依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针。
例如,主线程尝试读取可疑指针指向的数据,同时并判断读数据的该可疑指针的有效性,即判断该可疑指针是否为有效指针,也即不是非法指针。而且,当指针指向一个有确定存储空间的对象(称为已知对象)时,则该指针是有效的,即确定该指针为有效指针,而不是非法指针。另外,若一个指针不指向程序中任何已知对象,称其指向未知对象,未知对象的指针是无效的,无效的指针使用间接运算几乎总会导致崩溃性的异常错误。且如果指针的值为0,称为0值指针,又称空指针,空指针是无效的。
步骤S103,若第一指针不是有效指针,则触发内存访问异常的信息,其中,内存访问异常的信息用于表示对目标系统中的内存数据访问异常,二进制程序运行在目标系统上。
例如,当主线程遇到非法指针(无效指针)时,即判断出该可疑指针的有效性为无效时,会触发异常,此时CPU会发出内存访问错误。
步骤S104,在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测,其中,第二指针是多个目标指针中与第一指针相邻的下一指针。
例如,监控线程接收这个错误,并读取下一条指针(上述的第二指针),并唤醒主线程,继续判定有效指针。
通过上述的步骤S101至S104,通过主线程和监控线程之间的切换,可以处理在对二进制程序进行漏洞利用检测时出现的内存访问异常的情况,从而可以使处理漏洞利用检测过程中产生的内存访问异常的方法具有更广阔的适用范围,进而达到了对二进制程序进行漏洞利用检测的效果。
为了准确的确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,在本申请实施例提供的漏洞利用检测的处理方法中,还可以通过以下步骤确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程:获取目标函数,其中,目标函数为在对二进制程序进行漏洞利用时所使用的函数;判断在目标系统上运行二进制程序时是否调用目标函数;若在目标系统上运行二进制程序时调用目标函数,则读取目标系统中的内存数据,以对二进制程序进行漏洞利用检测;依据读取到的目标系统中的内存数据,确定用于对二进制程序进行漏洞利用检测的多个目标指针。
例如,图2是根据本申请实施例提供的可选的漏洞利用检测的处理方法的流程图,如图2所示,可选的漏洞利用检测的处理方法包括如下步骤:(1)进行样本检测之前需要先运行APIHOOK模块,HOOK关键API(上述的目标函数);(2)运行待检测样本(上述的二进制程序);(3)当样本调用关键API时,读取特定的内存数据;(4)从步骤(3)中的内存数据中,筛选出可疑指针(上述的目标指针),并识别出有效指针,然后再对筛选出的可疑指针进行内存级检测。另外,当样本未调用关键API时,则不对二进制程序进行漏洞利用检测,即直接结束。
通过上述的方案,可以快速准确的筛选出在对二进制程序进行漏洞利用检测时的可疑指针。
为了准确的对二进制程序进行漏洞利用检测,在本申请实施例提供的漏洞利用检测的处理方法中,目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
例如,上述的目标函数可以为VirtualProtect函数、mprotect函数。而且,VirtualProtect函数是对应Win32函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。mprotect函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内存会发出一个SIGSEGV信号给该进程。
综上所述,通过利用VirtualProtect函数、mprotect函数可以准确的对二进制程序进行漏洞利用检测。
如何创建和利用监控线程对于本申请来说是至关重要的,所以在本申请实施例提供的漏洞利用检测的处理方法中,采用以下步骤创建和利用监控线程:在通过主线程读取第一指针指向二进制程序的数据之前,创建监控线程;在目标系统上运行监控线程,并通过监控线程获取主线程的历史运行状态,其中,历史运行状态为主线程历史读取二进制程序的数据的状态;通过监控线程记录历史运行状态,并唤醒主线程,以使主线程处于运行状态,其中,在主线程处于运行状态时,主线程读取第一指针指向二进制程序的数据。
例如,创建并运行监控线程,且监控线程在等待CPU发出的内存访问错误时,线程表可以保存主线程的线程状态。然后监控线程记录主线程的线程状态M(上述主线程的历史运行状态)到线程共享区,并唤醒主线程,使主线程读取可疑指针指向的数据。
综上所述,通过创建监控线程,可以使监控线程准确的记录主线程读取数据的运行状态。
如何将主线程从休眠状态恢复为运行状态对于本申请来说是至关重要的,所以在本申请实施例提供的漏洞利用检测的处理方法中,采用以下步骤将主线程从休眠状态恢复为运行状态:在若第一指针不是有效指针,则触发内存访问异常的信息之后,将主线程的运行状态切换为休眠状态;并在通过主线程读取第二指针指向二进制程序的数据之前,依据监控线程记录的历史运行状态,将主线程进行唤醒,以将主线程从休眠状态恢复为运行状态,其中,在主线程处于运行状态时,主线程读取第二指针指向二进制程序的数据。
例如,若判断出可疑指针不是有效指针,且触发内存访问异常后,主线程的运行状态将切换为休眠状态,然后监控线程接收这个错误,并读取下一条指针,并把主线程的线程状态M写回线程表,然后唤醒主线程,继续判定有效指针。
综上所述,通过采用线程切换的方法,可以快速的处理二进制漏洞利用检测过程中判定指针有效性时产生的异常,且该方法具有更广阔的使用范围,能够适用于绝大多数操作系统的线程调度机制,且可以跨操作系统,跨编程语言使用该方法。
为了准确的对二进制程序进行漏洞利用检测,在本申请实施例提供的漏洞利用检测的处理方法中,还可以通过以下步骤对二进制程序进行漏洞利用检测:在依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针之后,若第一指针是有效指针,则不触发内存访问异常的信息,并保存第一指针;通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测。
例如,如果没有触发异常,则判定可疑指针为有效指针,并保存有效指针。然后再通过主线程读取下一条指针指向的数据,以继续对二进制程序进行漏洞利用检测。
通过上述的方案,可以有效的保证对二进制程序进行漏洞利用检测的过程,避免该过程由于内存访问异常而结束,从而可以保护计算机系统的安全。
如何完成对二进制程序进行漏洞利用检测的过程对于本申请来说是至关重要的,所以在本申请实施例提供的漏洞利用检测的处理方法中,采用以下步骤完成对二进制程序进行漏洞利用检测的过程:在保存第一指针之后,在通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测之前,判断是否完成对多个目标指针的遍历;若已完成对多个目标指针的遍历,则对第一指针进行漏洞利用检测,并确定对二进制程序进行漏洞利用检测的检测结果;若未完成对多个目标指针的遍历,则执行通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测的步骤。
例如,判断是否完成对可疑指针的遍历,如果完成,则通过漏洞利用指针检测模块对保存的指针(上述的第一指针)进行漏洞利用检测,从而判断是否对当前的二进制程序进行了漏洞利用。而且,如果对保存的指针进行漏洞利用检测的检测结果表示对保存的指针进行了漏洞利用,则表示对二进制程序进行了漏洞利用;如果对保存的指针进行漏洞利用检测的检测结果表示未对保存的指针进行漏洞利用,则表示未对二进制程序进行漏洞利用,并结束对当前的二进制程序的漏洞利用检测过程。如果没有完成,则再读取下一条指针,即通过主线程读取下一条可疑指针指向的数据,直到所有可疑指针判定完毕。
通过上述的方案,可以判断出二进制程序进行漏洞利用检测过程中的可疑指针的有效性,从而可以快速准确的完成对二进制程序进行漏洞利用检测的过程。
例如,为了检测或是拦截二进制漏洞利用攻击,首先需要进行内存级的检测。在可疑样本运行的过程中,HOOK关键的API,暂停目标样本后进行内存检查。读取关键内存空间的二进制数据,从中筛选出指针数据。此时筛选出的指针并不一定是有效指针,对非法指针进行取值操作时会触发内存访问错误,从而导致检测进程或是系统崩溃。为了判断指针的有效性,常规操作还是先会去尝试对指针做取值操作,这个过程中必然会触发内存访问错误。
当内存检测程序尝试通过一个非法指针获取数据时,CPU会发出一个中断信号给内存检测程序。如果内存检测程序没有处理这个信号,程序就会结束运行或操作系统崩溃,导致内存检测模块逻辑中断。
通过本申请实施例提供的方法,例如,在ROP攻击检测中,若产生的指针读取异常,ROP攻击检测需要对目标进程的内存数据进行检查。具体为,可以在ROP攻击检测中,先使用API Hook技术Hook关键API,关键API包括但不限于VirtualProtect函数和mprotect函数,当目标进程调用关键API时,拦截目标进程的API调用,然后进行ROP攻击检测。ROP攻击检测会先读取栈(目标进程中内存中的一块区域)上的数据,在这些数据中筛选出特殊的指令指针。且筛选的方法包括但不限于读取指针指向的数据。而在这个筛选过程就很容易遇到非法指针,通过非法指针的读取数据ROP攻击检测模块就会收到操作系统发出的信号,ROP攻击检测模块就会触发异常结束检测。
为了让内存检测模块逻辑继续运行下去,需要创建一个线程,下面称这个线程为监控线程。监控线程负责监控、等待CPU发出的内存访问错误。当CPU给进程发出内存访问错误时,唤醒监控线程给主线程做线程状态恢复。
为了让监控线程能够恢复主线程的状态,主线程需要在尝试读取可疑指针获取数据之前,让监控线程读取线程表中记录的主线程状态并保存到进程的线程共享空间中,线程状态包括但不限于寄存器状态,然后唤醒主线程开始判定指针的有效性,尝试读取可疑指针指向的数据。当主线程遇到了非法指针,CPU会给进程发出内存访问错误。监控线程会接收这个错误,监控线程被唤醒后,从进程的全局内存空间中,读取下一条待检测指针,读取刚刚保存的主线程状态数据,恢复主线程的状态,监控线程结束,唤醒主线程,执行流回到主线程继续判断指针的有效性。在这个过程中,为了让线程表能够记录合适的主线程状态,需要主线程和监控线程进行灵活地切换。
例如,图3是本申请实施例中的内存检测逻辑的流程图,如图3所示,内存检测逻辑的流程包括如下步骤:(1)创建并运行监控线程,监控线程等待CPU发出的内存访问错误,这时线程表保存了主线程的线程状态;(2)监控线程记录主线程的线程状态M到线程共享区,然后唤醒主线程;(3)主线程尝试读取可疑指针指向的数据;(4)当主线程遇到非法指针时,会触发异常,CPU会发出内存访问错误;(5)监控线程接收这个错误,并读取下一条指针,并把主线程的线程状态M写回线程表;(6)唤醒主线程,继续判定有效指针;(7)如果没有触发异常,则判定可疑指针为有效指针,保存有效指针;(8)直到所有可疑指针判定完毕。
综上,本申请实施例提供的漏洞利用检测的处理方法,通过确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针;通过主线程读取第一指针指向二进制程序的数据,并依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针;若第一指针不是有效指针,则触发内存访问异常的信息,其中,内存访问异常的信息用于表示对目标系统中的内存数据访问异常,二进制程序运行在目标系统上;在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测,解决了相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题。通过主线程和监控线程之间的切换,可以处理在对二进制程序进行漏洞利用检测时出现的内存访问异常的情况,从而可以使处理漏洞利用检测过程中产生的内存访问异常的方法具有更广阔的适用范围,进而达到了对二进制程序进行漏洞利用检测的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例2
本申请实施例还提供了一种漏洞利用检测的处理装置,需要说明的是,本申请实施例的漏洞利用检测的处理装置可以用于执行本申请实施例1所提供的用于漏洞利用检测的处理方法。以下对本申请实施例提供的漏洞利用检测的处理装置进行介绍。
图4是根据本申请实施例的漏洞利用检测的处理装置的示意图。如图4所示,该装置包括:第一确定单元401、第一处理单元402、第一触发单元403和第一读取单元404。
具体地,第一确定单元401,用于确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针;
第一处理单元402,用于通过主线程读取第一指针指向二进制程序的数据,并依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针;
第一触发单元403,用于若第一指针不是有效指针,则触发内存访问异常的信息,其中,内存访问异常的信息用于表示对目标系统中的内存数据访问异常,二进制程序运行在目标系统上;
第一读取单元404,用于在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测,其中,第二指针是多个目标指针中与第一指针相邻的下一指针。
综上,本申请实施例提供的漏洞利用检测的处理装置,通过第一确定单元401确定二进制程序和用于对二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,多个目标指针至少包括第一指针;第一处理单元402通过主线程读取第一指针指向二进制程序的数据,并依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针;第一触发单元403若第一指针不是有效指针,则触发内存访问异常的信息,其中,内存访问异常的信息用于表示对目标系统中的内存数据访问异常,二进制程序运行在目标系统上;第一读取单元404在监控线程接收到内存访问异常的信息的情况下,监控线程读取第二指针,并通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测,其中,第二指针是多个目标指针中与第一指针相邻的下一指针,解决了相关技术中在通过指针读取内存数据的方法对二进制程序进行漏洞利用检测时,处理漏洞利用检测过程中产生的内存访问异常的方法的适用范围较小,导致难以对二进制程序进行漏洞利用检测的问题。通过主线程和监控线程之间的切换,可以处理在对二进制程序进行漏洞利用检测时出现的内存访问异常的情况,从而可以使处理漏洞利用检测过程中产生的内存访问异常的方法具有更广阔的适用范围,进而达到了对二进制程序进行漏洞利用检测的效果。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,第一确定单元包括:第一获取模块,用于获取目标函数,其中,目标函数为在对二进制程序进行漏洞利用时所使用的函数;第一判断模块,用于判断在目标系统上运行二进制程序时是否调用目标函数;第一读取模块,用于若在目标系统上运行二进制程序时调用目标函数,则读取目标系统中的内存数据,以对二进制程序进行漏洞利用检测;第一确定模块,用于依据读取到的目标系统中的内存数据,确定用于对二进制程序进行漏洞利用检测的多个目标指针。
例如,可以通过获取模块获取关键API函数(上述的目标函数),即进行样本检测之前需要先运行APIHOOK模块,HOOK关键API(上述的目标函数);然后运行待检测样本(上述的二进制程序),并通过判断模块判断是否调用了该关键API函数;当样本调用关键API时,通过读取模块读取特定的内存数据;再通过确定模块从步骤(3)中的内存数据中,筛选出可疑指针(上述的目标指针),并识别出有效指针,然后再对筛选出的可疑指针进行内存级检测。另外,当样本未调用关键API时,则不对二进制程序进行漏洞利用检测,即直接结束。
综上所述,可以快速准确的筛选出在对二进制程序进行漏洞利用检测时的可疑指针。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
例如,上述的目标函数可以为VirtualProtect函数、mprotect函数。而且,VirtualProtect函数是对应Win32函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。mprotect函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内存会发出一个SIGSEGV信号给该进程。
综上所述,通过利用VirtualProtect函数、mprotect函数可以准确的对二进制程序进行漏洞利用检测。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,该装置还包括:第一创建单元,用于在通过主线程读取第一指针指向二进制程序的数据之前,创建监控线程;第二处理单元,用于在目标系统上运行监控线程,并通过监控线程获取主线程的历史运行状态,其中,历史运行状态为主线程历史读取二进制程序的数据的状态;第三处理单元,用于通过监控线程记录历史运行状态,并唤醒主线程,以使主线程处于运行状态,其中,在主线程处于运行状态时,主线程读取第一指针指向二进制程序的数据。
例如,通过创建单元创建监控线程,然后通过处理单元运行该监控线程,且监控线程在等待CPU发出的内存访问错误时,线程表可以保存主线程的线程状态。然后监控线程记录主线程的线程状态M(上述主线程的历史运行状态)到线程共享区,并唤醒主线程,使主线程读取可疑指针指向的数据。
综上所述,通过创建监控线程,可以使监控线程准确的记录主线程读取数据的运行状态。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,该装置还包括:第一切换单元,用于在若第一指针不是有效指针,则触发内存访问异常的信息之后,将主线程的运行状态切换为休眠状态;第一唤醒单元,用于在通过主线程读取第二指针指向二进制程序的数据之前,依据监控线程记录的历史运行状态,将主线程进行唤醒,以将主线程从休眠状态恢复为运行状态,其中,在主线程处于运行状态时,主线程读取第二指针指向二进制程序的数据。
例如,若判断出可疑指针不是有效指针,且触发内存访问异常后,通过切换单元将主线程的运行状态切换为休眠状态,然后监控线程接收这个错误,并读取下一条指针,并把主线程的线程状态M写回线程表,然后通过唤醒单元唤醒主线程,继续判定有效指针。
综上所述,通过采用线程切换的方法,可以快速的处理二进制漏洞利用检测过程中判定指针有效性时产生的异常,且该方法具有更广阔的使用范围,能够适用于绝大多数操作系统的线程调度机制,且可以跨操作系统,跨编程语言使用该方法。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,该装置还包括:第一保存单元,用于在依据第一指针指向二进制程序的数据,判断第一指针是否为有效指针之后,若第一指针是有效指针,则不触发内存访问异常的信息,并保存第一指针;第二读取单元,用于通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测。
例如,如果没有触发异常,则判定可疑指针为有效指针,并通过保存单元保存有效指针。然后再通过读取单元使主线程读取下一条指针指向的数据,以继续对二进制程序进行漏洞利用检测。
综上所述,可以有效的保证对二进制程序进行漏洞利用检测的过程,避免该过程由于内存访问异常而结束,从而可以保护计算机系统的安全。
可选地,在本申请实施例提供的漏洞利用检测的处理装置中,该装置还包括:第一判断单元,用于在保存第一指针之后,在通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测之前,判断是否完成对多个目标指针的遍历;第一结束单元,用于若已完成对多个目标指针的遍历,则对第一指针进行漏洞利用检测,并确定对二进制程序进行漏洞利用检测的检测结果;第一执行单元,用于若未完成对多个目标指针的遍历,则执行通过主线程读取第二指针指向二进制程序的数据,以继续对二进制程序进行漏洞利用检测的步骤。
例如,通过判断单元判断是否完成对可疑指针的遍历,如果完成,则通过漏洞利用指针检测模块对保存的指针(上述的第一指针)进行漏洞利用检测,从而判断是否对当前的二进制程序进行了漏洞利用。而且,如果对保存的指针进行漏洞利用检测的检测结果表示对保存的指针进行了漏洞利用,则表示对二进制程序进行了漏洞利用;如果对保存的指针进行漏洞利用检测的检测结果表示未对保存的指针进行漏洞利用,则表示未对二进制程序进行漏洞利用,并结束对当前的二进制程序的漏洞利用检测过程。如果没有完成,则再读取下一条指针,即通过主线程读取下一条可疑指针指向的数据,直到所有可疑指针判定完毕。
综上所述,可以判断出二进制程序进行漏洞利用检测过程中的可疑指针的有效性,从而可以快速准确的完成对二进制程序进行漏洞利用检测的过程。
漏洞利用检测的处理装置包括处理器和存储器,上述第一确定单元401、第一处理单元402、第一触发单元403和第一读取单元404等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来对二进制程序进行漏洞利用检测。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种计算机可读存储介质,其上存储存有程序,该程序被处理器执行时实现所述漏洞利用检测的处理方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述漏洞利用检测的处理方法。
本发明实施例提供了一种电子设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
处理器执行程序时还实现以下步骤:在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,所述方法还包括:创建监控线程;在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
处理器执行程序时还实现以下步骤:在若所述第一指针不是有效指针,则触发内存访问异常的信息之后,所述方法还包括:将所述主线程的运行状态切换为休眠状态;在通过所述主线程读取所述第二指针指向所述二进制程序的数据之前,所述方法还包括:依据所述监控线程记录的所述历史运行状态,将所述主线程进行唤醒,以将所述主线程从休眠状态恢复为运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第二指针指向所述二进制程序的数据。
处理器执行程序时还实现以下步骤:在依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针之后,所述方法还包括:若所述第一指针是有效指针,则不触发所述内存访问异常的信息,并保存所述第一指针;通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测。
处理器执行程序时还实现以下步骤:在保存所述第一指针之后,在通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测之前,所述方法还包括:判断是否完成对所述多个目标指针的遍历;若已完成对所述多个目标指针的遍历,则对所述第一指针进行漏洞利用检测,并确定对所述二进制程序进行漏洞利用检测的检测结果;若未完成对所述多个目标指针的遍历,则执行通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测的步骤。
处理器执行程序时还实现以下步骤:确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程包括:获取目标函数,其中,所述目标函数为在对所述二进制程序进行漏洞利用时所使用的函数;判断在所述目标系统上运行所述二进制程序时是否调用所述目标函数;若在所述目标系统上运行所述二进制程序时调用所述目标函数,则读取所述目标系统中的内存数据,以对所述二进制程序进行漏洞利用检测;依据读取到的所述目标系统中的内存数据,确定用于对所述二进制程序进行漏洞利用检测的所述多个目标指针。
处理器执行程序时还实现以下步骤:所述目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
本文中的设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,所述方法还包括:创建监控线程;在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在若所述第一指针不是有效指针,则触发内存访问异常的信息之后,所述方法还包括:将所述主线程的运行状态切换为休眠状态;在通过所述主线程读取所述第二指针指向所述二进制程序的数据之前,所述方法还包括:依据所述监控线程记录的所述历史运行状态,将所述主线程进行唤醒,以将所述主线程从休眠状态恢复为运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第二指针指向所述二进制程序的数据。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针之后,所述方法还包括:若所述第一指针是有效指针,则不触发所述内存访问异常的信息,并保存所述第一指针;通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在保存所述第一指针之后,在通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测之前,所述方法还包括:判断是否完成对所述多个目标指针的遍历;若已完成对所述多个目标指针的遍历,则对所述第一指针进行漏洞利用检测,并确定对所述二进制程序进行漏洞利用检测的检测结果;若未完成对所述多个目标指针的遍历,则执行通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测的步骤。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程包括:获取目标函数,其中,所述目标函数为在对所述二进制程序进行漏洞利用时所使用的函数;判断在所述目标系统上运行所述二进制程序时是否调用所述目标函数;若在所述目标系统上运行所述二进制程序时调用所述目标函数,则读取所述目标系统中的内存数据,以对所述二进制程序进行漏洞利用检测;依据读取到的所述目标系统中的内存数据,确定用于对所述二进制程序进行漏洞利用检测的所述多个目标指针。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:所述目标函数为以下至少之一:VirtualProtect函数和mprotect函数。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种漏洞利用检测的处理方法,其特征在于,包括:
确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;
通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;
若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;
在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
2.根据权利要求1所述的方法,其特征在于,在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,所述方法还包括:
创建监控线程;
在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;
通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
3.根据权利要求2所述的方法,其特征在于,
在若所述第一指针不是有效指针,则触发内存访问异常的信息之后,所述方法还包括:将所述主线程的运行状态切换为休眠状态;
在通过所述主线程读取所述第二指针指向所述二进制程序的数据之前,所述方法还包括:依据所述监控线程记录的所述历史运行状态,将所述主线程进行唤醒,以将所述主线程从休眠状态恢复为运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第二指针指向所述二进制程序的数据。
4.根据权利要求1所述的方法,其特征在于,在依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针之后,所述方法还包括:
若所述第一指针是有效指针,则不触发所述内存访问异常的信息,并保存所述第一指针;
通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测。
5.根据权利要求4所述的方法,其特征在于,在保存所述第一指针之后,在通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测之前,所述方法还包括:
判断是否完成对所述多个目标指针的遍历;
若已完成对所述多个目标指针的遍历,则对所述第一指针进行漏洞利用检测,并确定对所述二进制程序进行漏洞利用检测的检测结果;
若未完成对所述多个目标指针的遍历,则执行通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测的步骤。
6.根据权利要求1-5任一所述的方法,其特征在于,确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程包括:
获取目标函数,其中,所述目标函数为在对所述二进制程序进行漏洞利用时所使用的函数;
判断在所述目标系统上运行所述二进制程序时是否调用所述目标函数;
若在所述目标系统上运行所述二进制程序时调用所述目标函数,则读取所述目标系统中的内存数据,以对所述二进制程序进行漏洞利用检测;
依据读取到的所述目标系统中的内存数据,确定用于对所述二进制程序进行漏洞利用检测的所述多个目标指针。
7.一种漏洞利用检测的处理装置,其特征在于,包括:
第一确定单元,用于确定二进制程序和用于对所述二进制程序进行漏洞利用检测的多个目标指针、监控线程和主线程,其中,所述多个目标指针至少包括第一指针;
第一处理单元,用于通过所述主线程读取所述第一指针指向所述二进制程序的数据,并依据所述第一指针指向所述二进制程序的数据,判断所述第一指针是否为有效指针;
第一触发单元,用于若所述第一指针不是有效指针,则触发内存访问异常的信息,其中,所述内存访问异常的信息用于表示对目标系统中的内存数据访问异常,所述二进制程序运行在所述目标系统上;
第一读取单元,用于在所述监控线程接收到所述内存访问异常的信息的情况下,所述监控线程读取第二指针,并通过所述主线程读取所述第二指针指向所述二进制程序的数据,以继续对所述二进制程序进行漏洞利用检测,其中,所述第二指针是所述多个目标指针中与所述第一指针相邻的下一指针。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第一创建单元,用于在通过所述主线程读取所述第一指针指向所述二进制程序的数据之前,创建监控线程;
第二处理单元,用于在所述目标系统上运行所述监控线程,并通过所述监控线程获取所述主线程的历史运行状态,其中,所述历史运行状态为所述主线程历史读取所述二进制程序的数据的状态;
第三处理单元,用于通过所述监控线程记录所述历史运行状态,并唤醒所述主线程,以使所述主线程处于运行状态,其中,在所述主线程处于运行状态时,所述主线程读取所述第一指针指向所述二进制程序的数据。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储程序,其中,所述程序执行权利要求1至6中任意一项所述的漏洞利用检测的处理方法。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至6中任意一项所述的漏洞利用检测的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210956343.XA CN115344867A (zh) | 2022-08-10 | 2022-08-10 | 漏洞利用检测的处理方法及装置、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210956343.XA CN115344867A (zh) | 2022-08-10 | 2022-08-10 | 漏洞利用检测的处理方法及装置、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344867A true CN115344867A (zh) | 2022-11-15 |
Family
ID=83951707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210956343.XA Pending CN115344867A (zh) | 2022-08-10 | 2022-08-10 | 漏洞利用检测的处理方法及装置、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344867A (zh) |
-
2022
- 2022-08-10 CN CN202210956343.XA patent/CN115344867A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7991961B1 (en) | Low-overhead run-time memory leak detection and recovery | |
JP4518564B2 (ja) | 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体 | |
KR101759008B1 (ko) | 코드 실행의 프로파일링 | |
Jones et al. | VMM-based hidden process detection and identification using Lycosid | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
US10915424B2 (en) | Defeating deadlocks in production software | |
US10984096B2 (en) | Systems, methods, and apparatus for detecting control flow attacks | |
US20070266435A1 (en) | System and method for intrusion detection in a computer system | |
US9542557B2 (en) | Snoop-based kernel integrity monitoring apparatus and method thereof | |
US10114948B2 (en) | Hypervisor-based buffer overflow detection and prevention | |
KR101701014B1 (ko) | 운영 체제에의 악성 활동 보고 | |
US20170103202A1 (en) | Apparatus and method for monitoring virtual machine based on hypervisor | |
US10210331B2 (en) | Executing full logical paths for malware detection | |
KR101064164B1 (ko) | 리눅스 커널 기반 스마트 플랫폼 내에서의 커널 무결성 검사 및 변조된 커널 데이터 복구 방법 | |
CN108830078B (zh) | 一种针对工控设备的恶意代码发现方法 | |
EP3063692B1 (en) | Virtual machine introspection | |
US8135690B2 (en) | Concurrency object classification | |
JP2004303114A (ja) | インタープリタおよびネイティブコード実行方法 | |
CN113987507A (zh) | 堆内存漏洞检测方法、装置、存储介质及电子设备 | |
CN111444504A (zh) | 一种用于软件运行时自动识别恶意代码的方法及装置 | |
KR102141620B1 (ko) | 멀티 프로세스/멀티 스레드에서 사용하는 공유 메모리에 대한 원자성 위반 결함 탐지 방법 및 장치 | |
CN115344867A (zh) | 漏洞利用检测的处理方法及装置、存储介质 | |
CN111274582B (zh) | 基于透明度的取证效果评估方法、取证分析装置及方法 | |
CN114253825A (zh) | 内存泄漏检测方法、装置、计算机设备和存储介质 | |
CN111949362A (zh) | 一种基于虚拟化技术的主机信息采集方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |