一种Android系统堆溢出漏洞验证方法及装置制造方法及图纸

技术编号:14348116 阅读:155 留言:0更新日期:2017-01-04 18:43
本发明专利技术提供一种Android系统的堆溢出漏洞验证装置和方法,包括:漏洞检测模块,用于向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定堆溢出漏洞的存在性;利用判定模块,用于根据漏洞检测模块的结果,向堆缓冲区填写第二输入样本,通过执行漏洞引发Android系统的系统进程崩溃,以确定堆溢出漏洞被利用的可能性;利用验证模块,用于根据利用判定模块的结果,向堆缓冲区填写第三输入样本,通过执行漏洞控制Android系统的系统进程的执行流程,以验证堆溢出漏洞的可利用性。本申请可以有效判断Android系统是否存在特定的堆溢出漏洞,能否被攻击者利用,评估堆溢出漏洞给Android系统带来的安全风险,提升系统安全性。

【技术实现步骤摘要】

本专利技术涉及信息安全
,涉及一种移动智能终端的操作系统的堆溢出漏洞验证方法,更具体地,涉及一种Android系统的堆溢出漏洞验证方法。
技术介绍
随着移动互联网的快速发展,Android系统已经成为目前全球市场占比最高的移动智能终端操作系统。基于Android系统的智能设备作为用户日常社交通信和移动办公的媒介,存储了大量的用户隐私信息和敏感数据,因此很容易成为恶意攻击的主要目标。近年来,Android系统不断曝光各种漏洞,严重影响了系统自身的安全性,进而威胁到上层应用软件的数据、业务和代码安全。Android系统更新机制慢、更新周期长和版本碎片化问题,使得系统漏洞的补丁无法及时有效地部署到用户的终端设备上,这在无形中提升了系统漏洞的利用价值,为攻击者提供了可乘之机。其中,堆溢出漏洞是一类危害很大的Android系统漏洞。堆溢出漏洞能导致堆内存空间中的缓冲区溢出,覆盖一些关键数据,让攻击者有机会篡改系统的执行流程,控制系统去执行恶意代码,达到窃取隐私信息和敏感数据的目的。为了提升系统安全性,有必要对各个版本的Android系统中的堆溢出漏洞进行验证,以判断Android系统是否存在特定的堆溢出漏洞,并且这些漏洞能否被攻击者利用。中国专利技术专利CN104751056A披露了一种基于攻击库的漏洞验证系统与方法,该方法以漏洞扫描结果为基础设计验证方法,在虚拟机中构建合适的模拟攻击环境,编写漏洞验证脚本进行测试,以验证目标漏洞的存在性和危害性。多个漏洞验证脚本形成一个攻击库,当新的漏洞出现时,匹配攻击库中的漏洞验证脚本进行验证。该方案是在Windows平台上实现的,Windows是电脑操作系统,而Android是移动智能终端操作系统,二者实现机制完全不一样,因此该方案不适用于Android系统。另外,该方案需要在虚拟机中构建合适的模拟攻击环境,配置模拟环境的过程需要人工进行,开发成本高。此外,Android模拟器虽然支持在电脑上模拟终端设备的运行环境,但是它受限于硬件配置,无法完全还原出真实设备的环境,因此该方案并不适用于Android系统。KeYan等人在论文《AHighlyAutomatedBinarySoftwareVulnerabilityRiskEvaluationMethodForOff-by-oneStackBasedBufferOverflow》中提出了一个栈缓冲区溢出漏洞的验证方案。该漏洞验证方案会构造畸形的输入数据,触发栈内存空间的缓冲区溢出,覆盖函数返回地址;当程序完成函数调用后尝试返回时,被覆盖的函数返回地址会将程序控制流引导到其它地址,执行注入的漏洞验证代码;通过确定目标漏洞的存在性和可利用性,完成漏洞验证。该方案是在Windows平台上实现的;Windows是电脑操作系统,而Android是移动智能终端操作系统,二者实现机制完全不一样,因此该方案不适用于Android系统。该方案针对二进制软件的栈溢出漏洞进行验证,栈内存空间与堆内存空间的实现机制和内存布局有很大差别,因此该方案不适用于堆溢出漏洞。
技术实现思路
为了克服上述问题,本专利技术提供一种Android系统的堆溢出漏洞验证方法。根据本专利技术的一个方面,提供一种Android系统的堆溢出漏洞验证装置,包括漏洞检测模块、利用判定模块和利用验证模块;其中,漏洞检测模块,用于向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定堆溢出漏洞的存在性;利用判定模块,用于根据漏洞检测模块的结果,向堆缓冲区填写第二输入样本,通过执行漏洞引发Android系统的系统进程崩溃,以确定堆溢出漏洞被利用的可能性;利用验证模块,用于根据利用判定模块的结果,向堆缓冲区填写第三输入样本,通过执行漏洞控制Android系统的系统进程的执行流程,以验证堆溢出漏洞的可利用性。根据本专利技术的另一方面,提供一种Android系统的堆溢出漏洞验证方法,包括:步骤1,向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定Android系统是否存在堆溢出漏洞;步骤2,基于堆溢出漏洞存在的检测结果,向堆缓冲区填写第二输入样本,执行漏洞引发Android系统的系统进程崩溃,确定堆溢出漏洞被利用的可能性;步骤3,基于堆溢出漏洞可能可利用,向堆缓冲区填写第三输入样本,执行漏洞控制Android系统的系统进程的执行流程,验证堆溢出漏洞的可利用性。本申请提出的装置和方法对Android系统中存在的堆溢出漏洞进行验证,以确定漏洞的存在性和可利用性,所述方法针对Android系统漏洞,不需要构建模拟环境,可以直接在真实的终端设备中进行验证。本专利技术提出的Android系统堆溢出漏洞验证装置和方法可以有效判断Android系统是否存在特定的堆溢出漏洞,并且这些漏洞能否被攻击者利用,从而评估堆溢出漏洞给Android系统带来的安全风险,促使安全研究人员及时采取保护措施来加固系统,提升系统安全性。该装置和方法的针对性强,准确度高,可扩展性良好。附图说明图1为含虚函数的C++对象的内存布局示意图;图2为根据本专利技术实施例的Android系统堆溢出漏洞验证装置的示意图;图3为根据本专利技术实施例的堆溢出漏洞验证的利用判定步骤的流程图;图4为根据本专利技术实施例的堆溢出漏洞验证的利用验证步骤的流程图;图5为根据本专利技术实施例的缓冲区输入样本的结构示意图。具体实施方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。在Android系统中,一个C++对象的实例通常被分配在堆内存空间中。如果这个C++对象实现了虚函数,那么它在内存中的基本布局如图1所示,图1为含虚函数的C++对象的内存布局的示意图。可见,这个C++对象的实例被分配在堆内存空间中,其内存起始位置存放四字节长度的虚函数表指针。成员变量等其它数据被分配在这个虚函数表指针的后面。虚函数表指针指向代码段中的一个虚函数表。这个虚函数表默认由构造函数进行初始化,包含这个C++对象所有虚函数的函数指针。这些函数指针指向代码段中对应的函数片段。当Android系统中的某个系统进程调用这个C++对象的虚函数时,它会通过对象实例在堆内存空间中的地址得到虚函数表指针,根据虚函数表指针找到代码段中对应的虚函数表,然后遍历其中的函数指针,找到对应的函数片段并执行相应的函数。如果虚函数表指针被非法破坏,这个C++对象的虚函数调用就会出现异常。如下可以知道,Android系统堆溢出漏洞的成因。向堆缓冲区填写数据时,没有正确检查缓冲区的边界,导致填写的数据长度超过了缓冲区的大小。超出的数据会覆盖堆缓冲区后面的内存区域。如果C++对象的虚函数表指针恰好被溢出的数据覆盖,指向了堆缓冲区所在的内存区域,那么系统进程在调用这个C++对象的虚函数时,会被错误地引导到堆缓冲区,去寻找虚函数表和函数指针并执行相应函数。由于Android系统默认将堆内存标记为不可执行,因此堆溢出后的虚函数调用过程会发生错误,抛出违反执行约束的异常信息,导致系统进程崩溃。本申请的实施例将利用上述原理进行漏洞验证,提供一种Android系统的堆溢出漏洞验证装置和方法。图2示出根据本专利技术实施例的Android系统堆溢出漏洞验证装置的运行示意图,如图2本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/201610645266.html" title="一种Android系统堆溢出漏洞验证方法及装置原文来自X技术">Android系统堆溢出漏洞验证方法及装置</a>

【技术保护点】
一种Android系统的堆溢出漏洞验证装置,其特征在于,所述装置包括漏洞检测模块、利用判定模块和利用验证模块;其中,漏洞检测模块,用于向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定堆溢出漏洞的存在性;利用判定模块,用于根据漏洞检测模块的结果,向堆缓冲区填写第二输入样本,通过执行漏洞引发Android系统的系统进程崩溃,以确定堆溢出漏洞被利用的可能性;利用验证模块,用于根据利用判定模块的结果,向堆缓冲区填写第三输入样本,通过执行漏洞控制Android系统的系统进程的执行流程,以验证堆溢出漏洞的可利用性。

【技术特征摘要】
1.一种Android系统的堆溢出漏洞验证装置,其特征在于,所述装置包括漏洞检测模块、利用判定模块和利用验证模块;其中,漏洞检测模块,用于向堆缓冲区填写第一输入样本,检测是否发生堆溢出,以确定堆溢出漏洞的存在性;利用判定模块,用于根据漏洞检测模块的结果,向堆缓冲区填写第二输入样本,通过执行漏洞引发Android系统的系统进程崩溃,以确定堆溢出漏洞被利用的可能性;利用验证模块,用于根据利用判定模块的结果,向堆缓冲区填写第三输入样本,通过执行漏洞控制Android系统的系统进程的执行流程,以验证堆溢出漏洞的可利用性。2.根据权利要求1所述的装置,其特征在于,所述第一输入样本比堆缓冲区大小多四个字节,多出的该四个字节为溢出值value1,用来覆盖堆中C++对象的虚函数表指针;所述漏洞检测模块用于:创建C++对象,监控该对象所在的堆内存区域;该内存区域的前四个字节存放虚函数表指针,记录该值为vftp1;向堆缓冲区填写第一输入样本,记录该内存区域的前四个字节的值为vftp2;如果满足条件vftp2!=vftp1且vftp2=value1,确定C++对象的虚函数表指针被第一输入样本的溢出值覆盖,确定堆溢出漏洞存在。3.根据权利要求1所述的装置,其特征在于,所述利用判定模块用于:构造第二输入样本,所述第二输入样本比缓冲区大小多四个字节,多出的该四个字节为溢出值,并且该值位于堆缓冲区的内存地址区间内,用来覆盖堆中C++对象的虚函数表指针;向堆缓冲区填写所述第二输入样本,堆溢出后引发系统进程崩溃,基于系统进程在虚函数调用点崩溃,确定堆溢出漏洞利用可能性。4.根据权利要求1所述的装置,其特征在于,所述利用验证模块用于构造第三输入样本,所述第三输入样本比缓冲区大小多四个字节,包含:溢出值、伪造虚函数表、伪造函数以及填充数据;其中,多出的该四个字节为溢出值,其值被设置为伪造虚函数表在堆内存空间中的起始地址,用于覆盖C++对象的虚函数表指针;其中,伪造虚函数表中含有一个伪造函数指针,其值被设置为伪造函数在堆内存空间中的起始地址,用来误导系统进程调用相应的虚函数,执行伪造函数;其中,伪造函数由多个汇编指令组成,用于将堆缓冲区的内存区域标记为可执行,并且实现一个显式的功能;其中,填充数据,用于追加在伪造虚函数表和伪造函数之后,以实现堆内存空间的字节对齐,并保证所述第三输入样本的大小比缓冲区大小多四个字节。5.根据权利要求4所述的装置,其特征在于,所述利用验证模块用于:向堆缓冲区填写第三输入样本,触发堆缓冲区溢出;C++对象的虚函数表指针将会被溢出值覆盖,指向堆内存空间中伪造虚函数表;系统进程调用虚函数,根据被覆盖的虚函数表指针找到伪造虚函数表,被伪造函数指针错误地引导到伪造函数处执行指令;...

【专利技术属性】
技术研发人员:朱大立李莹冯维淼郭辰阳邓习海
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京;11

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

1