一种UAF漏洞利用判断方法及装置与流程

文档序号:13421700阅读:482来源:国知局
一种UAF漏洞利用判断方法及装置与流程

本发明涉及信息安全技术领域,更具体地,涉及一种uaf漏洞利用判断方法及装置。



背景技术:

随着移动终端设备的日益普及,移动终端设备已成为用户日常通信、办公等的重要媒介,存储着大量的用户隐私信息,并与用户的财产安全息息相关。当前主流的移动终端设备操作系统主要有苹果的ios系统和谷歌的android系统,其中android系统已成为目前全球市场占比最高的移动智能终端操作系统。android系统漏洞不断被曝光,严重威胁到用户的个人隐私信息安全、财务安全等,并且由于碎片化严重,系统更新机制缓慢,使得已爆出的系统漏洞会长期影响用户设备。其中,uaf(useafterfree,释放后重引用)漏洞是一类危害很大的漏洞。uaf漏洞能导致被释放的内存空间被写入可控数据后,被再次作为指针引用,进而使得攻击者有机会控制系统的执行流程,执行恶意代码。为了提升系统的安全性,有必要对移动终端操作系统中的uaf漏洞进行验证,以判断移动终端操作系统是否存在特定的uaf漏洞,并找出可利用路径,对此漏洞的可利用性进行评估。

现有技术方案一,中国发明专利cn201510703697.3提供了一种android系统漏洞挖掘的方法和装置:获取与任一android系统服务接口相应的函数及与函数相匹配的参数类型信息;基于参数类型信息,生成与函数相匹配的随机参数;基于函数及与函数相匹配的随机参数,通过android系统服务接口执行调用处理,并提取执行结果日志;根据执行结果日志,判断android系统服务接口是否存在系统漏洞。该发明主动模拟android系统服务接口执行调用处理的情形,在调用处理完毕后查看系统崩溃情况,即可准确预知在实际应用场景中,android系统服务接口执行哪些调用处理时会发生崩溃,可为挖掘到的系统漏洞提供修复方案提供可靠依据。

现有技术方案二,中国发明专利cn201610645266.0提供一种android系统的堆溢出漏洞验证装置和方法,包括:漏洞检测模块,用于向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定堆溢出漏洞的存在性;利用判定模块,用于根据漏洞检测模块的结果,向堆缓冲区填写第二输入样本,通过执行漏洞引发android系统的系统进程崩溃,以确定堆溢出漏洞被利用的可能性;利用验证模块,用于根据利用判定模块的结果,向堆缓冲区填写第三输入样本,通过执行漏洞,控制android系统的系统进程的执行流程,以验证堆溢出漏洞的可利用性。

现有技术方案一是关于挖掘android系统漏洞,主要侧重点在于挖掘出android系统中存在的漏洞,而android系统存在的漏洞对于不同移动终端的系统安全的威胁大小是不一致的,方案一没有对这些漏洞的可利用性及可利用途径以评估和预测,不能有效分析出漏洞对移动终端安全的威胁大小程度。现有技术方案二是判断android系统中堆溢出漏洞的存在情况及可利用情况,无法对uaf漏洞的存在情况及可利用情况进行判断。



技术实现要素:

为了解决现有技术存在的不能针对具体的uaf漏洞进行可利用性及利用方式的有效判定和预测的问题,本发明提供一种uaf漏洞利用判断方法及装置。

根据本发明的一个方面,提供一种uaf漏洞利用判断方法,包括:

s1,分析移动终端操作系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;

s2,运行所述第一函数序列运行样本,确认所述内存区域被成功覆盖;

s3,分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;

s4,运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

其中,在所述步骤s1前还包括:

s0,运行第三函数序列运行样本,触发内存区域被异常释放,确认uaf漏洞存在。

其中,在所述步骤s0前还包括:

确定系统中引用计数可被非法修改为零的目标对象,构造用于修改所述目标对象的引用计数的第三函数序列运行样本。

其中,所述步骤s2进一步包括:

创建一个新的对象,以使所述新的对象被分配到已被异常释放的内存区域;

若检测到所述新的对象成功覆盖所述内存区域,则确认所述内存区域被成功覆盖。

其中,所述步骤s2进一步包括:

基于用户空间对内核物理直接映射区的映射来填充已被异常释放的内存区域;

若检测到用户空间构造的数据成功覆盖所述内存区域,则确认所述内存区域被成功覆盖。

其中,所述步骤s3进一步包括:

分析所述第一函数序列运行样本在运行过程中所获得的可控对象的内容,确定用于控制处于内核上下文的pc寄存器值或泄露内核地址的第二函数序列运行样本。

其中,所述步骤s0进一步包括:

运行第三函数序列运行样本,修改目标对象的引用计数,使得系统中还存在对所述目标对象的引用时,所述目标对象所对应的内存区域被释放;

若检测到所述目标对象的引用计数被修改为零,则确认系统中存在uaf漏洞。

根据本发明的另一个方面,提供一种uaf漏洞利用判断装置,包括:

第一构造模块,用于分析移动终端操作系统的内存分配方式、系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;

漏洞验证模块,用于运行所述第一函数序列运行样本,确认所述内存区域被成功覆盖;

第二构造模块,用于分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;

漏洞利用模块,用于运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

根据本发明的另一个方面,提供一种uaf漏洞利用判断设备,包括存储器、处理器、以及总线,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述存储器中的程序指令,以执行如前所述的uaf漏洞利用判断方法。

根据本发明的又一个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如前所述的uaf漏洞利用判断方法。

本发明提出的一种uaf漏洞利用判断方法及装置,可以有效判断移动终端操作系统中特定uaf漏洞能否被攻击者利用,从而评估相应uaf漏洞给移动终端带来的安全风险,促使安全研究人员及时采取保护措施对移动终端进行安全加固,以提高系统安全。且本发明提供的uaf漏洞利用方法能够根据实际移动终端设备的情况灵活调整所采用的函数序列运行样本,可扩展性良好。

附图说明

图1为本发明一实施例提供的一种uaf漏洞利用判断方法的流程示意图;

图2为本发明另一实施例提供的一种uaf漏洞利用判断装置的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1所示,为本发明一实施例提供的一种uaf漏洞利用判断方法的流程示意图,包括:

s1,分析移动终端操作系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;

s2,运行所述第一函数序列运行样本,确认所述内存区域被成功覆盖;

s3,分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;

s4,运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

uaf(useafterfree,释放后重引用)漏洞是指在一块内存被释放后在某处还保存有指向这块内存的悬垂指针,之后对悬垂指针进行了解引用,导致了漏洞的触发。当分配的内存被释放之后,指向该内存区域的指针并没有因为内存的释放而变为null,而是继续指向已释放的内存,并且该指针还可以被用来对已释放内存进行读写操作。由移动终端操作系统的内存分配机制可知,释放的内存有可能会被下次申请使用,如果释放的内存和下次申请的内存大小相似,则很有可能下次申请的内容会覆盖已释放的内存。由于并没有切断指针与已被释放的内存之间的联系,用精心构造的用户可控的数据填充被释放的内存区域,并再次使用指向该内存区域的指针,攻击者就非常有机会在系统内存中执行自己设计好的代码,进行uaf漏洞利用,从而执行非法操作。

本发明中所提到的移动终端操作系统,其形式可以是运行在手机或平板等各种移动终端设备上的操作系统,如android系统、ios系统和windowsphone系统等,但是不局限于这些系统。本领域技术人员可以合理预见,只要其uaf漏洞判断机制与本发明所构思的技术方案相同,不管具体是何种终端设备上的操作系统,均在本发明的保护范围之内。

本发明基于上述原理进行漏洞利用判断。如下文中第一、第二和第三函数序列运行样本均为预先设定好的函数调用序列及构造好的参数的大小和类型,“第一”、“第二”和“第三”仅用于表示不同,并不限定执行顺序。本领域技术人员可以理解的是,由于移动终端设备的操作系统版本号、内核版本号、cpu型号和机型等信息的不同,会导致第一、第二和第三函数序列运行样本根据实际情况有不同的实现方式,但是不管实现方式如何变化,它们分别所要实现的功能是不变的。因此,只要函数序列运行样本所实现的功能以及所起的作用与本发明相同,都在本发明的保护范围之内。

具体地,在本发明实施例中,在对系统中存在的uaf漏洞进行利用判断时,已经获知系统中存在何种类型的uaf漏洞,并且获知系统中触发该uaf漏洞的释放后重引用目标对象,该目标对象的内存区域已经被异常释放。在步骤s1中分析系统的内存分配方式、系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,然后根据分析结果,确定覆盖已释放内存区域的实现方式,即构造用于覆盖已释放的内存区域的第一函数序列运行样本。

运行第一函数序列运行样本所要实现的功能为:将构造的数据覆盖已被释放的目标对象所对应的内存区域。如果可以检测到构造的数据可以成功覆盖已释放的目标对象所对应的内存区域,则说明此漏洞可能可以被利用。如果已释放的目标对象所对应的内存区域无法被覆盖,则说明此漏洞存在但不能被利用。比如有的uaf漏洞,它的uaf对象释放和重用操作就在同一个函数中,刚刚释放完马上就重用了,这种情况根本没有机会去进行内存覆盖,从而无法进行利用。

步骤s3分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本具体是指,在第一函数序列运行样本运行成功的基础上,通过分析第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造第二函数序列运行样本,所述可控对象是指用构造的数据覆盖已释放的目标对象后,所述目标对象于是成为了可控对象。分析所述可控对象的内容,构造第二函数序列运行样本,使得再次使用所述已释放的目标对象时,能够尝试通过某种方式获得在系统内存中执行代码的能力,从而控制系统进程的执行流程。

运行第二函数序列运行样本所要实现的功能是:使得系统重引用已释放的目标对象,这时真正执行的是填充到已释放目标对象所对应的内存区域中的恶意数据或函数等,会使得系统流程走入了恶意构造的代码,以此来控制系统进程的执行流程,如果检测出通过运行第二函数运行序列可以控制系统进程的执行流程,则可判断此漏洞可以被利用。

所述步骤s4具体包括:运行第二函数序列运行样本,执行一个显示的功能;若检测到所述显示的功能被成功执行,则确定uaf漏洞可利用。

具体地,若能够成功覆盖已释放的内存区域,则向存在uaf漏洞的系统运行第二函数序列运行样本,实现控制所述移动终端操作系统中系统进程的执行流程,同时执行一个显示的任务,比如打印一个字符,通过是否可以成功执行此显示任务验证此漏洞的可利用性,并给出漏洞利用途径。

本发明实施例的漏洞利用判断结果有两种:漏洞不可利用和漏洞可利用,在执行完步骤s4后得到。漏洞可利用的依据是:攻击者可以通过执行漏洞控制系统中系统进程的执行流程。

本发明实施例提出的一种uaf漏洞利用判断方法,可以有效判断移动终端操作系统中特定uaf漏洞能否被攻击者利用,从而评估相应uaf漏洞给移动终端设备带来的安全风险,促使安全研究人员及时采取保护措施对相应的移动终端操作系统进行安全加固,以提高系统安全。且本发明提供的uaf漏洞利用方法能够根据实际系统情况灵活调整所采用的函数序列运行样本,可扩展性良好。

本发明另一实施例,在上述实施例的基础上,还包括:

s0,运行第三函数序列运行样本,触发内存区域被异常释放,确认uaf漏洞存在。

具体地,当我们不知道系统中存在何种uaf漏洞时,对uaf漏洞进行利用性判断之前,需要对系统中的uaf漏洞进行触发。步骤s0中第三函数序列运行样本实现的功能是:非法修改系统中目标对象的引用计数器的值,将其设置为0,目标对象的类型可以是:函数或对象或指针或某种数据结构(比如系统中某种类型的结点),系统会将目标对象所对应的内存区域进行释放,但此时用户空间中还存在对该目标对象的引用,从而触发uaf漏洞。如果可以检测到目标对象的引用计数器的值通过调用第三函数序列运行样本后可以被修改为0,则可以确定uaf漏洞存在。

基于上述实施例,在所述步骤s0前还包括:

确定系统中引用计数可被非法修改为零的目标对象,构造用于修改所述目标对象的引用计数的第三函数序列运行样本。

构造第三函数序列运行样本,通常是利用系统中存在的一个或几个漏洞等方式确定函数调用顺序及传入的参数。具体地,构造所述第三函数序列运行样本的步骤为:首先,根据目前已获知的uaf漏洞属性,确定触发相应的uaf漏洞、可以被恶意修改其引用计数器值为0的目标对象a,a可以是函数、对象或指针或某种数据结构(比如系统中的某种类型的结点)等,但不局限于如上所列举的情况,此目标对象即为引发uaf漏洞的对象,是可以被释放后重引用的对象。然后,确定第三函数序列运行样本,即确定通过什么样的函数调用顺序及传入什么样的参数大小及类型来将目标对象a的引用计数非法修改为0。

值得说明的是,获知uaf漏洞属性的途经包括:根据本发明技术人员前期已检测出的而尚未公开的uaf漏洞而获知,也可以根据目前已公开的uaf漏洞描述而获知,或者是根据经某种途经获得的尚未公开的uaf漏洞描述而获知。

基于上述实施例,所述步骤s2进一步包括:

创建一个新的对象,以使所述新的对象被分配到已被异常释放的内存区域;

若检测到所述新的对象成功覆盖所述内存区域,则确认所述内存区域被成功覆盖。

具体地,所构造的第一函数序列运行样本基于采用dlmalloc内存分配器的移动终端操作系统版本中分配内存的方法,在释放一块内存区域后,接着申请大小相同的一块内存,操作系统会将刚刚释放掉的内存再次分配。释放掉内存一以后马上再创建内存二,只要内存一和内存二大小相同,那么内存二就极有可能重用内存一的内存。对于覆盖已释放内存一的函数调用序列通常选择参数可以控制写入内容大小并且可以任意写入数据,比如,使用sendmmsg()构造消息目标对象,用户空间对该消息目标对象是可控的,即可以控制该消息目标对象的大小,可以对该消息目标对象任意写入数据。

例如,在cve-2014-3153漏洞中修改释放重引用对象rt_waiter的方法是栈复用,比如a申请了一个0x10大小的栈stack,a用完stack的内容后并不会在函数返回时清空,如果此时b再申请同样大小的栈,就会复用a申请的栈空间,利用相同的原理可以复用链表。

使用sendmmsg()函数构造内核消息对象b,只要消息大小加上消息头的大小等于rt_waiter的大小,那么这个消息很可能会重用rt_waiter占据过的内存。

其中,sendmmsg()函数栈上数据与rt_waiter的重叠部分为msgvec.msg_name的部分内容和iovstack(*(msgvec.msg_iov))的部分内容,所以填充这些地方的数据即可实现成功覆盖。

检测uaf漏洞是否存在被利用的可能性的方法为:利用动态调试工具idapro远程附加移动终端操作系统的系统进程,实现对内存区域的监控,查看被释放的内存区域是否已被成功覆盖;如果成功覆盖则说明漏洞存在且可能被利用,否则,得到最终的漏洞利用判断结果:漏洞存在但不可利用。

本发明另一实施例,在上述实施例的基础上,步骤s2进一步包括:

基于用户空间对内核物理直接映射区的映射来填充已被异常释放的内存区域;

若检测到用户空间构造的数据成功覆盖所述内存区域,则确认所述内存区域被成功覆盖。

具体的,本发明实施例所构造的第一函数序列运行样本利用用户空间对physmap的映射来填充slab/slub。因为在内核空间里physmap和slab/slub靠得很近,先创建大量的内核对象,用来抬高slab/slub的地址,让新的内核对象被分配在physmap里。随后,再在用户空间大量调用mmap()把数据映射到physmap,以覆盖之前创建的内核对象,得到用户空间可控的内核对象。

例如,在cve-2015-3636漏洞中,首先创建大量的socket对象抬高slab地址,使得physmap区域和pingsockslabs产生重叠。然后,在用户空间不断把数据映射到physmap,通过特殊标记判断内核空间physmap是否和slab重叠。每喷一个数据块,就调用一次targetingvulnerablepingsockobjects的ioctl(sockfd,siocgstampns,(structtimespec*))函数,这个函数将泄漏出sk->sk_stamp这个值,通过对比这个值和之前填充的值来判断是否已经成功覆盖,若检测已成功覆盖,则说明uaf漏洞存在被利用的可能性。

基于上述实施例,所述步骤s3进一步包括::

分析所述第一函数序列运行样本在运行过程中所获得的可控对象的内容,确定用于控制处于内核上下文的pc寄存器值或泄露内核地址的第二函数序列运行样本。

具体地,第二函数序列运行样本要实现的功能是使得指向已释放内存区域的指针再次被调用时,即重引用目标对象,访问构造的数据,从而控制系统进程的执行流程。因此,本发明实施例通过分析运行第一函数序列运行样本的过程中所获得的可控对象的内容,确定第二函数调用序列及传入的参数,以控制处于内核上下文的pc寄存器值或泄露内核地址,进而控制系统进程的执行流程。下面结合例子进行具体的说明。

分析漏洞cve-2014-3153,分析所述漏洞由于释放重引用对象rt_waiter指向前一个节点和后一个节点的地址已被恶意构造的内容覆盖,rt_waiter指向的下一个节点可以被恶意构造为一个指向用户内存的假的rt_waiter节点,因此可以构造第二函数序列运行样本,此样本的目的是在假节点的前面插入一个新的真的结点,通过此操作就可以泄露出内核的地址,进而进一步控制系统的执行流程。

分析漏洞cve-2015-3636,构造第三函数序列运行样本,将其他正常的socket对象释放掉,然后将vul_socket的sk->sk_prot->close函数指针覆盖掉,最终调用close函数,内核将调用sk->sk_prot->close,这个时候,sk_prot已经完全被控制,即sk_prot->close也被控,最终控制了内核空间的pc寄存器的值,控制了代码的执行流程。

基于上述实施例,所述步骤s0进一步包括:

运行第三函数序列运行样本,修改目标对象的引用计数,使得系统中还存在对所述目标对象的引用时,所述目标对象所对应的内存区域被释放;

若检测到所述目标对象的引用计数被修改为零,则确认系统中存在uaf漏洞。

具体地,linux内核用垃圾回收机制释放内核对象,每个对象都有一个引用计数器(recount)。在对象初始化的时候,recount被设为1。当执行对象所涉及的操作时就让recount加1,在操作结束时就让recount减1,当这个recount变为0的时候,系统知道该对象不再被使用了,于是自动将其释放掉。运行构造好的第三函数序列运行样本,修改目标对象的引用计数,使得用户空间还存在对所述目标对象的引用时,所述目标对象被内核异常释放,通常情况下,uaf漏洞触发会导致系统崩溃,即检测所述目标对象的引用计数是否被修改为零的方法是:使用调试桥(adb)运行logcat命令访问系统日志,查看是否有关于系统进程崩溃的日志。如果系统进程发生崩溃,通过分析崩溃日志,判断与uaf漏洞存在时的情况是否一致。如果一致则可得出漏洞检测的结果:此uaf漏洞存在。否则得到漏洞检测结果:此uaf漏洞不存在。

下面以cve-2015-3636移动终端内核漏洞为例说明步骤s1,此漏洞的触发过程主要是调用了如下几个函数:

①intsockfd=socket(af_inet,sock_dgram,ipproto_icmp);

②structsockaddraddr={.sa_family=af_inet};

③intret=connect(sockfd,&addr,sizeof(addr));structsockaddr_addr={.sa_family=af_unspec};

④ret=connect(sockfd,&_addr,sizeof(_addr));

⑤ret=connect(sockfd,&_addr,sizeof(_addr));

其中,第①行代码为创建一个icmpsocket,并将socket的hash加入到内核的hlist列表中,其引用计数器recount变为1;

当执行第②、③行代码时,socket对象的引用计数器recount增加1,此时变为2;

当执行第④、⑤行代码时,系统会调用disconnect(),删除socket对象的hash并且让socket对象的引用计数器recount递减一次,其中删除hash的代码如下所示:

在函数hlist_nulls_del(&sk->sk_nulls_node);中是删除hlist列表中的socket的hash,但是由于此函数中存在bug,在socket的hash被删除以后,并没有及时清除链表,而是将链表中的hlist_node.pprev赋值为0x200200,导致在如上的判断语句if(sk_hashed(sk))中,判断socket是否存在在hlist列表中,得出的值为true,因此会运行if中的语句,对socket的hash再次删除导致recount被多减了一次,因此recount变为0,对socket进行了释放。正常情况下recount此时应该为1。

分析此漏洞的特征可以确定可被释放重引用的目标对象就是socket对象,然后,确定用于修改所述目标对象的引用计数的函数调用序列及传入的参数,即第三函数序列运行样本为①②③④⑤,在运行此样本后,如果确实存在此漏洞,则由于0x200200为用户空间的内存,当该地址没有被映射时,触发此漏洞就会引起系统崩溃。通过查看系统崩溃日志,可确定是否存在此漏洞。

本发明提出的一种uaf漏洞利用判断方法,通过触发移动终端操作系统中特定uaf漏洞,继而构造并运行函数序列运行样本,可以有效判断系统中特定uaf漏洞能否被攻击者利用,从而评估相应uaf漏洞给系统带来的安全风险,促使安全研究人员及时采取保护措施对系统进行安全加固,以提高系统安全。且本发明提供的uaf漏洞利用方法能够根据实际系统情况灵活调整所采用的函数序列运行样本,可扩展性良好。

如图2所示,为本发明另一实施例提供的一种uaf漏洞利用判断装置,包括:第一构造模块21,漏洞验证模块22、第二构造模块23和漏洞利用模块24;其中,

第一构造模块21,用于分析移动终端操作系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;

漏洞验证模块22,用于运行所述第一函数序列运行样本,确认所述已释放的内存区域被成功覆盖;

第二构造模块23,用于分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;

漏洞利用模块24,用于运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

本发明实施例的漏洞利用判断结果有两种:漏洞存在但不可利用、漏洞存在且可利用。漏洞可利用的依据是:攻击者可以通过执行漏洞控制移动终端操作系统的系统进程的执行流程。

第一构造模块21用于分析系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,然后根据分析结果,确定覆盖已释放内存区域的实现方式,即确定用于覆盖已释放的内存区域的第一函数序列运行样本。

漏洞验证模块22用于运行所述第一函数序列运行样本,确认所述已释放的内存区域被成功覆盖。运行第一函数序列运行样本所要实现的功能为:将构造的数据覆盖已被释放的目标对象所对应的内存区域。如果可以检测到构造的数据可以成功覆盖已释放的目标对象所对应的内存区域,则说明此漏洞可能可以被利用。如果已释放的目标对象所对应的内存区域无法被覆盖,则说明此漏洞存在但不能被利用。比如有的uaf漏洞,它的uaf对象释放和重用操作就在同一个函数中,刚刚释放完马上就重用了,这种情况根本没有机会去进行内存覆盖,从而无法进行利用。

第二构造模块23用于分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制移动终端操作系统中系统进程的执行流程的第二函数序列运行样本。在第一函数序列运行样本运行成功的基础上,通过分析第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造第二函数序列运行样本,所述可控对象是指用构造的数据覆盖已释放的目标对象后,所述目标对象于是成为了可控对象。分析所述可控对象的内容,构造第二函数序列运行样本,使得再次使用所述已释放的目标对象,尝试通过某种方式获得在内核中执行代码的能力,从而控制系统进程的执行流程。

运行第二函数序列运行样本所要实现的功能是:使得系统重引用已释放的目标对象,这时真正执行的是填充到已释放目标对象所对应的内存区域中的恶意数据或函数等,会使得系统流程走入了恶意构造的代码,以此来控制系统进程的执行流程,如果检测出通过运行第二函数运行序列可以控制系统进程的执行流程,则可判断此漏洞可以被利用。

漏洞利用模块24具体用于:运行第二函数序列运行样本,执行一个显示的功能;若检测到所述显示的功能被成功执行,则确定uaf漏洞可利用。若能够成功覆盖已释放的内存区域,则向存在uaf漏洞的系统运行第二函数序列运行样本,实现控制移动终端操作系统中系统进程的执行流程,同时执行一个显示的任务,比如打印一个字符,通过是否可以成功执行此显示任务验证此漏洞的可利用性,并给出漏洞利用途径。

本发明提出的一种uaf漏洞利用判断装置,可以有效判断移动终端操作系统中特定uaf漏洞能否被攻击者利用,从而评估相应uaf漏洞给系统带来的安全风险,促使安全研究人员及时采取保护措施对系统进行安全加固,以提高系统安全。

本发明又一实施例,提供一种uaf漏洞利用判断设备,包括存储器、处理器、以及总线,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述存储器中的程序指令,以执行如前所述的移动终端系统uaf漏洞利用判断方法,例如包括:s1,分析移动终端操作系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;s2,运行所述第一函数序列运行样本,确认所述内存区域被成功覆盖;s3,分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;s4,运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

本发明又一实施例,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如前所述的uaf漏洞利用判断方法,例如包括:s1,分析移动终端操作系统的内存分配方式、所述系统中存在uaf漏洞的函数、所述函数的参数以及所述函数的使用场景,构造用于覆盖已被异常释放的内存区域的第一函数序列运行样本;s2,运行所述第一函数序列运行样本,确认所述内存区域被成功覆盖;s3,分析所述第一函数序列运行样本在运行过程中所产生的可控对象的内容,构造用于控制所述系统中系统进程的执行流程的第二函数序列运行样本;s4,运行所述第二函数序列运行样本,确认uaf漏洞能够被利用。

本领域技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的uaf漏洞利用判断装置的实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后,本发明的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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