【技术实现步骤摘要】
自动化堆内存池分析辅助的漏洞挖掘方法及装置
[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虽然提供有手动内存毒化的接口,但是在实际应用时需要 ...
【技术保护点】
【技术特征摘要】
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所述的方法,其特征在于,所述采用启发式自动补丁程序之前,所述方法还包括:将启发式自动补丁程序由引擎和规则构成,引擎封装编程语言的语法树分析、动态执
行跟踪以及启发式规则解析功能,启发式规则由内...
【专利技术属性】
技术研发人员:王斌,李峰,杨慧婷,邹振婉,郭学让,樊树铭,叶波,
申请(专利权)人:国网新疆电力有限公司电力科学研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。