DoubleFree漏洞检测方法、终端及存储介质与流程

文档序号:22677729发布日期:2020-10-28 12:35阅读:146来源:国知局
Double Free漏洞检测方法、终端及存储介质与流程

本发明涉及doublefree漏洞检测技术领域,尤其涉及的是doublefree漏洞检测方法、终端及存储介质。



背景技术:

doublefree漏洞指同一个指针free两次,只要是free一个指向堆内存的指针都有可能产生可以利用的漏洞。攻击者通过unlink这个双向链表删除的宏来利用,通过自己来伪造整个chunk并且欺骗操作系统,从而达到运行攻击者的病毒代码,进而窃取用户信息或者阻止程序正常运行,造成用户的信息泄露或者信息篡改,给用户带来损失,侵害用户权益。

因此,现有技术存在缺陷,有待改进与发展。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供doublefree漏洞检测方法、终端及存储介质,旨在解决现有技术中的同一套基于android开发的软件系统搭载不同芯片方案时,设计复杂,迭代维护性差的问题。

本发明解决技术问题所采用的技术方案如下:

doublefree漏洞检测方法,其中,包括:

获取待检测的程序,对待检测的程序进行函数分析,识别出对应的函数;

获取所识别函数,根据所识别函数生成用于为待检测的程序分配存储空间的func_addr对象;

判断是否存在与func_addr对象所分配存储空间重复的内存地址;

若存在,存在doublefree漏洞,反馈检测结果。

进一步地,所述获取待检测的程序,对待检测的程序进行函数分析,具体包括:

使用angr加载待检测的程序,并初始化待检测的程序;

对初始化的待检测程序进行分析,生成cfg对象。

进一步地,对初始化的待检测程序进行分析,其中,使用cfgfast对初始化的待检测程序进行分析,识别初始化的待检测程序所对应的函数。

进一步地,对初始化的待检测程序进行分析,生成cfg对象,之后包括:

获取与cfg对象对应的malloc函数的函数信息,生成func_addr对象。

进一步地,获取与cfg对象对应的malloc函数的函数信息,生成func_addr对象,具体包括:

使用cfg.get_any_node获取与cfg对象对应的malloc函数地址;

通过.predecessors属性访问所获取malloc函数的函数信息;

获取malloc函数的调用函数地址,生成func_addr对象。

进一步地,获取与cfg对象对应的malloc函数的函数信息,生成func_addr对象,之后包括:

对所获取的malloc函数和与malloc函数对应的free函数分别执行hook操作;

检测是否存在重复申请的malloc函数内存地址;

若重复,存在doublefree漏洞,反馈检测结果。

进一步地,对所获取的malloc函数和与malloc函数对应的free函数分别执行hook操作,之后包括:

调用hook函数对所获取的malloc函数进行处理;

malloc函数遍历func_addr对象对应的用于记录空闲地址内存的链表,为func_addr对象分配存储空间,保存所申请的存储空间的内存地址;

free函数释放malloc函数分配的存储空间,检测是否有两个重复的内存地址。

进一步地,检测是否存在重复申请的malloc函数内存地址,之后还包括:

若不存在,使用explore接口从func_addr对象所在函数的首地址进行分析。

本发明还公开一种终端,其中,包括处理器,以及与所述处理器连接的存储器,所述存储器存储有doublefree漏洞检测方法的配置程序,所述doublefree漏洞检测方法的配置程序被所述处理器执行时实现如上所述的doublefree漏洞检测方法。

本发明还公开一种存储介质,其中,所述存储介质存储有计算机程序,所述计算机程序能够被执行以用于实现如上所述的doublefree漏洞检测方法。

本发明所提供的doublefree漏洞检测方法、终端及存储介质,其中,所述方法包括:获取待检测的程序,对待检测的程序进行函数分析,识别出对应的函数;获取所识别函数,根据所识别函数生成用于为待检测的程序分配存储空间的func_addr对象;判断是否存在与func_addr对象所分配存储空间重复的内存地址;若存在,存在doublefree漏洞,反馈检测结果。本发明通过对待检测的程序进行函数分析,根据识别出的函数生成func_addr对象,进而通过func_addr对象为待检测的程序分配存储空间,通过判断所分配的存储空间的内存地址是否重复,进而判断是否存在doublefree漏洞,当存在重复的内存地址时,说明有doublefree漏洞,则提示存在doublefree漏洞的信息给用户,保证程序运行的安全性,保障用户权益。

附图说明

图1是本发明中doublefree漏洞检测方法的较佳实施例的流程图。

图2是本发明中图1具体实施例的流程图。

图3是本发明中终端的较佳实施例的功能原理框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

请参见图1,图1是本发明中doublefree漏洞检测方法的流程图。如图1所示,本发明实施例所述的doublefree漏洞检测方法包括以下步骤:

s100、获取待检测的程序,对待检测的程序进行分析,识别出对应的函数。

在一具体实施例中,如图2所示,所述步骤s100中:加载待检测的程序,对待检测的程序进行分析具体包括:

s110、使用angr加载待检测的程序,并初始化待检测的程序。

angr包含分析以恢复二进制程序的控制流程图,还包括功能边界的恢复,以及有关间接跳转和其他有用原数据的推理。

具体地,使用angr.project接口加载待检测的程序,通过angr将待检测的程序对应的二进制文件加载到project中,对加载的二进制文件进行分析,生成proj对象(即projiect对象,表示程序的一个已初始化映像)。

s120、对初始化的待检测程序进行分析,生成cfg对象。

其中,对初始化的待检测程序进行分析,具体包括:使用cfgfast对初始化的待检测程序进行分析,识别初始化的待检测程序所对应的函数。

project中定义了许多的analyses,其中,包括proj.analyses.cfgfast。在anger中包括两种类型的cfg:静态cfg(cfgfast)和动态cfg(cfgem);cfgfast用于在二进制文件中识别函数,并创建控制流图,使用静态分析来生成cfg对象。

具体地,使用proj.analyses.cfgfast接口加载生成的cfg对象,对cfg对象作进一步分析,即对cfg对象对应的二进制文件进行进一步分析,采用较完整的静态分析cfgfast(分析依赖关系、程序分块)。

其中,cfgfast的属性包括:

force_complete_scan#(默认值:true)将整个二进制代码作为函数检测的代码。

function_starts#地址列表,用作分析的入口点。

normalize#对结果函数进行规范化。

collect_data_references#查找生成cfg期间对数据的所有引用,可以找到对数据的交叉引用。

resolve_indirect_jumps#执行附加分析,试图为cfg创建过程中发现的每个间接跳转找到目标。

cfgfast能够对二进制文件进行扫描,识别其中的函数。若想要恢复cfg,在可创建一个新的project对象来重新加载二进制文件。

s200、获取所识别函数,根据所识别函数生成用于为待检测的程序分配存储空间的func_addr对象。

具体地,在一具体实施例中,如图2所示,在所述步骤s120之后包括:

s130、获取与cfg对象对应的malloc函数的函数信息,生成func_addr对象。

具体地,通过cfgfast对cfg对象进行分析,可识别出cfg对象中的malloc函数,进而根据malloc函数生成func_addr对象。

在一具体实施例中,如图2所示,所述步骤s130具体包括:

s131、使用cfg.get_any_node获取与cfg对象对应的malloc函数地址。

s132、通过.predecessors属性访问所获取malloc函数的函数信息。

s133、获取malloc函数的调用函数地址,生成func_addr对象。

具体地,使用cfg.model.get_any_node(malloc地址).predecessors接口,获取malloc函数地址,即对应的节点信息,通过.predecessors属性来访问该节点的父节点和子节点,进而获取节点信息,生成func_addr对象。

在一具体实施例中,如图2所示,在所述步骤s130之后包括步骤s140:

s140、对所获取的malloc函数和与malloc函数对应的free函数分别执行hook操作。

具体地,使用proj.hook接口,对malloc和free函数进行hook操作。

其中,hook,用自定义的函数hook住一段代码,用于内部提供库函数的符号,并用于插桩执行或修改控制流。hook函数,是windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。

通常使用project.hook(addr)作为函数装饰器,可以指定现成函数作为钩子使用。还可以选择指定length关键字参数,使执行在钩子完成后向前跳转一些字节。

malloc函数(longnumbytes):该函数分配了numbytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(null)。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

free(firstbyte):该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

s300、判断是否存在与func_addr对象所分配存储空间重复的内存地址。

s400、若存在,存在doublefree漏洞,反馈检测结果。

在一具体实施例中,如图2所示,在所述步骤s140之后包括:

s151、调用hook函数对所获取的malloc函数进行处理。

s152、malloc函数遍历func_addr对象对应的用于记录空闲地址内存的链表,为func_addr对象分配存储空间,保存所申请的存储空间的内存地址。其中,malloc的hook函数实现保存所申请的存储空间的内存地址。

s153、free函数释放malloc函数分配的存储空间,检测是否有两个重复的内存地址。其中,free的hook函数检测是否有两个内存地址重复;如果重复,说明存在doublefree漏洞,则提示给客户。

若存在,执行步骤s400、存在doublefree漏洞,反馈检测结果。

若不存在,执行步骤s160、使用explore接口从func_addr对象所在函数的首地址进行分析。

其中,explorer:此技术实现.explore()功能,允许搜索和避免特定地址。

本发明还公开一种终端,如图3所示,其中,包括处理器10,以及与所述处理器10连接的存储器20,所述存储器20存储有doublefree漏洞检测方法的配置程序,所述doublefree漏洞检测方法的配置程序被所述处理器10执行时实现如上所述的doublefree漏洞检测方法。

本发明还公开一种存储介质,其中,所述存储介质存储有计算机程序,所述计算机程序能够被执行以用于实现如上所述的doublefree漏洞检测方法。

综上所述,本发明公开的doublefree漏洞检测方法、终端及存储介质,其中,所述方法包括:获取待检测的程序,对待检测的程序进行函数分析,识别出对应的函数;获取所识别函数,根据所识别函数生成用于为待检测的程序分配存储空间的func_addr对象;判断是否存在与func_addr对象所分配存储空间重复的内存地址;若存在,存在doublefree漏洞,反馈检测结果。本发明通过对待检测的程序进行函数分析,根据识别出的函数生成func_addr对象,进而通过func_addr对象为待检测的程序分配存储空间,通过判断所分配的存储空间的内存地址是否重复,进而判断是否存在doublefree漏洞,当存在重复的内存地址时,说明有doublefree漏洞,则提示存在doublefree漏洞的信息给用户,保证程序运行的安全性,保障用户权益。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

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