当前位置: 首页 > 专利查询>清华大学专利>正文

二进制程序的内存漏洞检测方法、装置、设备及介质制造方法及图纸

技术编号:38346758 阅读:7 留言:0更新日期:2023-08-02 09:26
本申请提供一种二进制程序的内存漏洞检测方法、装置、设备及介质。该方法包括:标记二进制程序中指向内存对象的所有指针,内存对象包括堆对象、栈对象、全局对象中的至少一种;基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误;当检测到内存错误时,确定内存错误所属的类别,内存错误至少分为非严重错误和严重错误两种;在模糊测试过程中,根据内存错误所属的类别,检测二进制程序中存在的内存漏洞。本申请提高了在模糊测试中检测包括堆对象、栈对象和全局变量对象中出现的内存漏洞的效率,同时还可以降低性能开销。能开销。能开销。

【技术实现步骤摘要】
二进制程序的内存漏洞检测方法、装置、设备及介质


[0001]本申请涉及计算机
,尤其涉及一种二进制程序的内存漏洞检测方法、装置、设备及介质。

技术介绍

[0002]软件漏洞是信息产业面临的一大严重威胁,攻击者可以利用漏洞实施网络攻击,完成窃取数据、植入后门等操作,严重的影响了用户、行业实体乃至国家的安全。为此需要对软件进行漏洞测试,及时发现存在的漏洞,例如对二进制程序进行漏洞检测。
[0003]现有技术中,主要是使用模糊测试来实现对二进制程序的漏洞挖掘,其主要是通过为目标程序生成大量的畸形测试用例,并在执行过程中捕获违反安全策略的信号作为漏洞被触发的标志。
[0004]但是,由于二进制程序在编译生成的过程中丢失了变量的类型信息,在使用模糊测试进行漏洞检测时,往往漏洞检测效果较差。

技术实现思路

[0005]本申请提供一种二进制程序的内存漏洞检测方法、装置、设备及介质,用以解决现有技术漏洞检测效果差的问题。
[0006]第一方面,本申请提供一种二进制程序的内存漏洞检测方法,包括:标记二进制程序中指向内存对象的所有指针,所述内存对象包括堆对象、栈对象、全局对象中的至少一种;基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误;当检测到内存错误时,确定所述内存错误所属的类别,所述内存错误至少分为非严重错误和严重错误两种;在模糊测试过程中,根据所述内存错误所属的类别,检测所述二进制程序中存在的内存漏洞。
[0007]在第一方面的一种可能设计中,所述标记二进制程序中指向内存对象的所有指针,包括:若所述内存对象为所述堆对象,则获取所述堆对象的堆内存管理函数,并根据所述堆内存管理函数调用时的返回数据,识别和标记所述堆对象的指针;若所述内存对象为所述栈对象,则根据栈指针寄存器,识别和标记所述栈对象的指针;若所述内存对象为所述全局对象,则根据所述全局对象的全局内存地址派生得到的原始对象指针,识别和标记所述全局对象的指针。
[0008]在第一方面的另一种可能设计中,所述基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误之前,还包括:
为每个内存对象分配一个随机的标记,该标记用于对该内存对象的指针和内存空间进行标记。
[0009]在第一方面的又一种可能设计中,所述基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误,包括:当指针访问内存时,通过安全机制内存标记MTE检查该指针的标记和待访问的目标内存对象的内存标记是否匹配;若该指针的标记和待访问的目标内存对象的内存标记不匹配,则产生段错误信号,所述段错误信号用于表征检测到内存错误。
[0010]在第一方面的又一种可能设计中,所述当检测到内存错误时,确定所述内存错误所属的类别,包括:确定该内存错误依赖于确定性属性的检查或该内存错误依赖于非确定性属性的检查;若该内存错误依赖于确定性属性的检查,则确定该内存错误为严重错误;若该内存错误依赖于非确定性属性的检查,则确定该内存错误为非严重错误;若所述内存对象为栈对象且该栈对象的指针访问的内存地址为非本栈帧的内存地址或其它无效内存地址,则确定该内存错误为严重错误。
[0011]在第一方面的又一种可能设计中,还包括:若所述内存对象为堆对象,则获取所述堆对象的分配函数和释放函数;根据所述分配函数的参数确定所述堆对象的边界信息;根据所述分配函数和释放函数的调用位置确定所述堆对象的生命周期;若所述内存对象为所述栈对象或所述全局对象,则获取所述栈对象或所述全局对象指针的内存访问信息,所述内存访问信息中包括所述栈对象或所述全局对象指针访问的连续内存区域;根据所述栈对象或所述全局对象指针访问的连续内存区域,确定所述栈对象或所述全局对象的边界信息;若所述内存对象为所述栈对象,则获取所述栈对象的调用函数;根据所述调用函数的函数调用与函数返回时间,确定所述栈对象的生命周期;若所述内存对象为所述全局对象,则所述全局对象的生命周期为进程的运行时长;将所述堆对象的边界信息、堆对象的生命周期、栈对象的生命周期、全局对象的生命周期作为确定性属性;将所述栈对象、所述全局对象的边界信息作为非确定属性,其中,所述内存对象的边界信息和生命周期用于确定所述内存错误所属的类别。
[0012]在第一方面的又一种可能设计中,所述根据所述内存错误所属的类别,检测所述二进制程序中存在的内存漏洞,包括:若所述内存错误所属的类别为严重错误,则确定该目标内存对象存在内存漏洞;若所述内存错误所属的类别为非严重错误,则获取进行模糊测试时触发所述非严重错误的测试用例,并将所述测试用例插入模糊测试的种子队列中;更新所述目标内存对象的边界;
根据所述模糊测试的种子队列,对更新后的目标内存对象继续进行模糊测试,检测出所述二进制程序中存在的内存漏洞。
[0013]在第一方面的又一种可能设计中,所述根据所述模糊测试的种子队列,对更新后的目标内存对象继续进行模糊测试,检测出所述二进制程序中存在的内存漏洞,包括:根据所述模糊测试的种子队列,对更新后的目标内存对象继续进行测试;若更新后的目标内存对象存在内存错误且所述内存错误为严重错误,则确定该目标内存对象存在内存漏洞。
[0014]第二方面,本申请提供一种二进制程序的内存漏洞检测装置,包括:指针标记模块,用于标记二进制程序中指向内存对象的所有指针,所述内存对象包括堆对象、栈对象、全局对象中的至少一种;内存错误确定模块,用于基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误;错误分类模块,用于当检测到内存错误时,确定所述内存错误所属的类别,所述内存错误至少分为非严重错误和严重错误两种;漏洞检测模块,用于在模糊测试中,根据所述内存错误所属的类别,检测所述二进制程序中存在的内存漏洞。
[0015]第三方面,本申请实施例提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,以实现如第一方面任一项所述的二进制程序的内存漏洞检测方法。
[0016]第四方面,本申请实施例提供一种可读存储介质,计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现第一方面任一项所述的二进制程序的内存漏洞检测方法。
[0017]第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现第一方面任一项所述的二进制程序的内存漏洞检测方法。
[0018]本申请提供的二进制程序的内存漏洞检测方法、装置、设备及介质,通过渐进式对象恢复方案识别并标记指向内存对象的所有指针,然后通过自适应内存漏洞检测方案基于指针标记和内存标记是否匹配,若不匹配则认为检测到内存错误,然后基于内存错误是否为严重错误或非严重错误,来进一步识别出是否存在真实的内存漏洞,能够有效检测包括堆、栈和全局变量区域中出现的内存错误,提高二进制程序的内存漏洞检测效率和检测效果。
附图说本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种二进制程序的内存漏洞检测方法,其特征在于,包括:标记二进制程序中指向内存对象的所有指针,所述内存对象包括堆对象、栈对象、全局对象中的至少一种;基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误;当检测到内存错误时,确定所述内存错误所属的类别,所述内存错误至少分为非严重错误和严重错误两种;在模糊测试过程中,根据所述内存错误所属的类别,检测所述二进制程序中存在的内存漏洞。2.根据权利要求1所述的方法,其特征在于,所述标记二进制程序中指向内存对象的所有指针,包括:若所述内存对象为所述堆对象,则获取所述堆对象的堆内存管理函数,并根据所述堆内存管理函数调用时的返回数据,识别和标记所述堆对象的指针;若所述内存对象为所述栈对象,则根据栈指针寄存器,识别和标记所述栈对象的指针;若所述内存对象为所述全局对象,则根据所述全局对象的全局内存地址派生得到的原始对象指针,识别和标记所述全局对象的指针。3.根据权利要求1所述的方法,其特征在于,所述基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误之前,还包括:为每个内存对象分配一个随机的标记,该标记用于对该内存对象的指针和内存空间进行标记。4.根据权利要求1所述的方法,其特征在于,所述基于被标记的所有指针和待访问的目标内存对象的内存标记,检测是否存在内存错误,包括:当指针访问内存时,通过安全机制内存标记MTE检查该指针的标记和待访问的目标内存对象的内存标记是否匹配;若该指针的标记和待访问的目标内存对象的内存标记不匹配,则产生段错误信号,所述段错误信号用于表征检测到内存错误。5.根据权利要求1所述的方法,其特征在于,所述当检测到内存错误时,确定所述内存错误所属的类别,包括:确定该内存错误依赖于确定性属性的检查或该内存错误依赖于非确定性属性的检查;若该内存错误依赖于确定性属性的检查,则确定该内存错误为严重错误;若该内存错误依赖于非确定性属性的检查,则确定该内存错误为非严重错误;若所述内存对象为栈对象且该栈对象的指针访问的内存地址为非本栈帧的内存地址或其它无效内存地址,则确定该内存错误为严重错误。6.根据权利要求1所述的方法,其特征在于,还包括:若所述内存对象为堆对象,则获取所述堆对象的分配函数和释放函数;根据所述分配函数的参数确定所述堆对象的边界信息;根据所述分配函数和释放函数的调用位置确定所述堆对象的生命周期;若所述内存对象为所述栈对象或所述全局对象,则获取所述栈对象或所述全局...

【专利技术属性】
技术研发人员:张超陈星曼段海新
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1