自动化堆内存池分析辅助的漏洞挖掘方法及装置制造方法及图纸

技术编号:36565737 阅读:19 留言:0更新日期:2023-02-04 17:21
本发明专利技术实施例中提供了一种自动化堆内存池分析辅助的漏洞挖掘方法、装置及电子设备,属于数据安全技术领域,该方法包括:对目标应用程序的内存调用情况进行分析,判断所述目标应用程序在内存池管理过程中申请的内存区域是否包含多个内存页;若是,则进一步对所述目标应用程序使用的内存池管理库进行分析;当所述内存池管理库属于通用型内存管理库时,执行预制补丁替换程序;当所述内存管理库属于定制型内存管理库时,采用启发式自动补丁程序,所述自动补丁程序通过选择性的接收所述目标函数中的一组函数名称,通过启发式规则在目标程序代码中进行匹配替换,并生成LLVM的compile

【技术实现步骤摘要】
自动化堆内存池分析辅助的漏洞挖掘方法及装置


[0001]本专利技术涉及数据安全
,尤其涉及一种自动化堆内存池分析辅助的漏洞挖掘方法、装置及电子设备。

技术介绍

[0002]模糊测试是当前用于发现安全漏洞的有效手段,其中利用覆盖路径反馈的方法,即通过编译器进行插桩,然后运行目标程序收集执行路径信息从而指导样本变异,是十分有效的手段。与此同时,通常会采用ASAN(address sanitizer)来发现内存破坏类型的漏洞,例如:UAF(use

after

free),double free,OOB(out

of

bound)等等。
[0003]目前ASAN主要在程序执行堆内存申请/释放(malloc/free)时进行拦截(intercept),进行相应内存的毒化(poison)和去毒化(unpoison)操作,如此当程序访问了被毒化的内存,就可以及时抛出异常,报告调用栈回溯(call traceback)信息,从而帮助定位漏洞产生的位置。
[0004]但是有些程序为了提高效率,在标准的堆内存管理之上,采用了内存池技术,即每次申请(malloc)较大的内存区域,通常是内存页的整数倍,然后再分配给较小的对象使用,只有当内存池被销毁时才会调用释放(free)函数。可见,在内存池管理的过程中,编译器没有进行插桩拦截,也就基本无法发现内存破坏的发生。
[0005]LLVM虽然提供有手动内存毒化的接口,但是在实际应用时需要针对每个目标程序做一次代码的补充,如此就会存在大量重复性工作。

技术实现思路

[0006]有鉴于此,本专利技术实施例提供一种自动化堆内存池分析辅助的漏洞挖掘方法、装置及电子设备,至少部分解决现有技术中存在的问题。
[0007]第一方面,本专利技术实施例提供了一种自动化堆内存池分析辅助的漏洞挖掘方法,包括:
[0008]对目标应用程序的内存调用情况进行分析,判断所述目标应用程序在内存池管理过程中申请的内存区域是否包含多个内存页;
[0009]若是,则进一步对所述目标应用程序使用的内存池管理库进行分析,用以判断所述内存池管理库属于通用型内存管理库或定制型内存管理库;
[0010]当所述内存池管理库属于通用型内存管理库时,执行预制补丁替换程序,所述预制补丁替换程序通过对内存管理库中的包含的目标函数进行特征提取,以便于基于提取的特征对目标函数进行替换操作,并在LLVM的compile

rt中添加库所述目标函数对应的拦截代码;
[0011]当所述内存管理库属于定制型内存管理库时,采用启发式自动补丁程序,所述自动补丁程序通过选择性的接收所述目标函数中的一组函数名称,通过启发式规则在目标程序代码中进行匹配替换,并生成LLVM的compile

rt所需的拦截代码。
[0012]根据本公开实施例的一种具体实现方式,执行预制补丁替换程序之前,所述方法还包括:
[0013]提前制作预制补丁,以便于基于所述预制补丁,来执行预制补丁替换程序。
[0014]根据本公开实施例的一种具体实现方式,所述提前制作预制补丁,包括:
[0015]分析内存池管理库API,确定关键的内存分配和释放接口;
[0016]结合目标函数的源码分析内部实现原理,确定目标应用程序向操作系统内核申请内存的代码位置;
[0017]修改所述目标函数的源码,使得所述目标应用程序在申请大块内存的同时利用修改后的函数来规避原始ASAN中对内存的毒化操作;
[0018]查找向操作系统内核释放内存的代码位置;
[0019]修改所述目标函数的源码,以便于在所述目标应用程序释放内存的同时,维护在ASAN中添加的补丁代码的数据结构;
[0020]修改LLVM的compile

rt,添加对内存池管理API的拦截代码,维护毒化内存相关的数据结构;
[0021]使用diff工具制作patch文件,同时记录版本信息供后续应用补丁时使用。
[0022]根据本公开实施例的一种具体实现方式,所述执行预制补丁替换程序,还包括:
[0023]分析漏洞挖掘所对应的目标应用程序的源码中是否采用了已有预制补丁的内存池管理库;
[0024]如果是,确定所述已有预制补丁的内存池管理库的名称和版本,从所述已有预制补丁的内存池管理库中获取相应的补丁文件;
[0025]用patch程序对内存池管理库及LLVM的compile

rt库进行补丁操作;
[0026]确定补丁是否成功应用,避免由于存在第三方定制导致的补丁失效;
[0027]在确定补丁成功应用之后,编译应用补丁的库源码,生成静态链接库文件;
[0028]对目标应用程序的代码进行编译并静态链接库文件,后续进入模糊测试流程。
[0029]根据本公开实施例的一种具体实现方式,所述采用启发式自动补丁程序之前,所述方法还包括:
[0030]将启发式自动补丁程序由引擎和规则构成,引擎封装编程语言的语法树分析、动态执行跟踪以及启发式规则解析功能,启发式规则由内置和外置规则组成,内置规则采用编程语言实现,外置规则采用ML类语言描述;
[0031]提供辅助信息输入接口,允许在启动式分析之前给定辅助分析的数据或限制条件,以加快分析的过程;
[0032]输出补丁文件,以便后续进入打补丁和模糊测试流程。
[0033]根据本公开实施例的一种具体实现方式,所述采用启发式自动补丁程序,还包括:
[0034]人工收集辅助信息并对启发式补丁程序进行配置;
[0035]指定代码所在目录,以及可执行程序所在位置;
[0036]执行启发式补丁程序,生成补丁文件;
[0037]若生成补丁成功,则进行后续常规的打补丁和模糊测试流程;
[0038]若生成补丁失败,选择性添加辅助信息或调整启发式规则再次尝试;
[0039]如果多次尝试不成功,则建议直接开始常规的模糊测试流程,或人工介入补丁开
发。
[0040]根据本公开实施例的一种具体实现方式,所述方法还包括:
[0041]通过扫描目标应用程序的源码自动识别内存池管理库,通过yara规则匹配查找内存池管理库名称及版本;
[0042]如果返回库的名称和版本,则通过名称和版本确认补丁库中是否已有预制补丁,名称采用正则模糊匹配,版本采用范围匹配;
[0043]如果存在预制补丁,则正常打补丁后进入常规模糊测试流程;
[0044]如果不存在预制补丁,则根据是否启用启发式补丁的配置选项,进行启发式生成补丁的后续流程。
[0045]第二方面,本专利技术实施例提供了一种自动化堆内存池分析辅助的漏洞挖掘装置,包括:
[0046]判断模块,用于对目标应用程序的内存调用情况进行分析,判断所述目标应用程序在内本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种自动化堆内存池分析辅助的漏洞挖掘方法,其特征在于,包括:对目标应用程序的内存调用情况进行分析,判断所述目标应用程序在内存池管理过程中申请的内存区域是否包含多个内存页;若是,则进一步对所述目标应用程序使用的内存池管理库进行分析,用以判断所述内存池管理库属于通用型内存管理库或定制型内存管理库;当所述内存池管理库属于通用型内存管理库时,执行预制补丁替换程序,所述预制补丁替换程序通过对内存管理库中的包含的目标函数进行特征提取,以便于基于提取的特征对目标函数进行替换操作,并在LLVM的compile

rt中添加库所述目标函数对应的拦截代码;当所述内存管理库属于定制型内存管理库时,采用启发式自动补丁程序,所述自动补丁程序通过选择性的接收所述目标函数中的一组函数名称,通过启发式规则在目标程序代码中进行匹配替换,并生成LLVM的compile

rt所需的拦截代码。2.根据权利要求1所述的方法,其特征在于,执行预制补丁替换程序之前,所述方法还包括:提前制作预制补丁,以便于基于所述预制补丁,来执行预制补丁替换程序。3.根据权利要求2所述的方法,其特征在于,所述提前制作预制补丁,包括:分析内存池管理库API,确定关键的内存分配和释放接口;结合目标函数的源码分析内部实现原理,确定目标应用程序向操作系统内核申请内存的代码位置;修改所述目标函数的源码,使得所述目标应用程序在申请大块内存的同时利用修改后的函数来规避原始ASAN中对内存的毒化操作;查找向操作系统内核释放内存的代码位置;修改所述目标函数的源码,以便于在所述目标应用程序释放内存的同时,维护在ASAN中添加的补丁代码的数据结构;修改LLVM的compile

rt,添加对内存池管理API的拦截代码,维护毒化内存相关的数据结构;使用diff工具制作patch文件,同时记录版本信息供后续应用补丁时使用。4.根据权利要求3所述的方法,其特征在于,所述执行预制补丁替换程序,还包括:分析漏洞挖掘所对应的目标应用程序的源码中是否采用了已有预制补丁的内存池管理库;如果是,确定所述已有预制补丁的内存池管理库的名称和版本,从所述已有预制补丁的内存池管理库中获取相应的补丁文件;用patch程序对内存池管理库及LLVM的compile

rt库进行补丁操作;确定补丁是否成功应用,避免由于存在第三方定制导致的补丁失效;在确定补丁成功应用之后,编译应用补丁的库源码,生成静态链接库文件;对目标应用程序的代码进行编译并静态链接库文件,后续进入模糊测试流程。5.根据权利要求4所述的方法,其特征在于,所述采用启发式自动补丁程序之前,所述方法还包括:将启发式自动补丁程序由引擎和规则构成,引擎封装编程语言的语法树分析、动态执
行跟踪以及启发式规则解析功能,启发式规则由内...

【专利技术属性】
技术研发人员:王斌李峰杨慧婷邹振婉郭学让樊树铭叶波
申请(专利权)人:国网新疆电力有限公司电力科学研究院
类型:发明
国别省市:

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

1