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

一种安卓系统服务内存消耗类漏洞挖掘方法技术方案

技术编号:33085235 阅读:15 留言:0更新日期:2022-04-15 10:47
本发明专利技术属于软件漏洞挖掘技术领域,具体为一种安卓系统服务内存消耗类漏洞挖掘方法。本发明专利技术方法分为静态分析和动态模糊测试两个阶段;静态分析阶段的任务是定位潜在漏洞,首先通过启发式规则定位数据存储指令和能够到达这些指令的系统服务接口;然后收集到达数据存储指令的约束条件,并根据约束条件生成模糊测试的初始输入。动态模糊测试阶段是判断时间窗口内对数据存储指令的攻击是否足以造成安全影响;在动态模糊测试过程中,在反馈收集、种子选择、种子生成和变异、攻击代码生成这四个方面提出了新的方法,从而实现高效的模糊测试:本发明专利技术可以高效、准确地检测安卓系统服务中的内存消耗类漏洞。内存消耗类漏洞。内存消耗类漏洞。

【技术实现步骤摘要】
一种安卓系统服务内存消耗类漏洞挖掘方法


[0001]本专利技术属于软件漏洞挖掘
,具体涉及安卓系统服务内存消耗类漏洞挖掘方法。

技术介绍

[0002]内存消耗类漏洞是一种可以通过多次触发数据存储指令占用进程内存资源,影响进程的正常运行,从而导致拒绝服务攻击的漏洞。安卓系统服务中存在大量未被监控的数据存储过程,这些数据存储过程及其相关的数据存储操作有可能导致安卓系统服务中的内存消耗类漏洞。现许多工作通过确定程序中不被需要但是未被释放的数据来检测内存泄露问题,但是这一方法不适用于检测安卓系统服务的内存消耗类漏洞,因为安卓系统服务中存储的内存数据可能在未来被使用,因此不能被视作不被需要的数据;此外还有一些工作仅聚焦于确定程序内存消耗的边界。
[0003]模糊测试是一项高效的漏洞挖掘技术,但是现有的方法难以满足自动化挖掘安卓系统内存消耗类漏洞的需要。现有的模糊测试方法难以满足挖掘安卓系统服务中内存消耗类漏洞的需求。首先,设计缺乏对数据存储指令的系统性理解,因此它们无法有效地覆盖大量安卓系统服务接口中不同种类的数据存储指令;其次,大多数模糊测试方法在输入生成和种子选择上依赖于人为提供的领域知识,比如AFLGO[1]在种子选择时采用固定时间进行阶段划分,但是不同的安卓系统服务接口提供了不同的功能,因此需要一种不依赖于专家知识的通用解决方案;此外一些工作虽然提出了针对这一问题的缓解措施,但是它们在内存消耗类漏洞挖掘方面仍然不够高效,比如Vuzzer[2]使用静态分析技术激进地提取条件检查的数据流特征用于输入生成,但是更好的做法是首先理解数据存储的过程,然后识别与数据存储指令有数据流关系的条件检查数据流特征,并且安卓系统中的条件检查通常依赖由系统运行状态所决定的动态值,因此难以通过静态分析直接获得;第三,现有工具大多对内存大小的变化不敏感,难以利用这一反馈信息有效提高定向模糊测试的效率;最后,现有工作的插桩方法有很大的开销,会严重影响反馈收集的效率。

技术实现思路

[0004]本专利技术的目的是提供一种全新的基于指令识别和定向模糊测试的安卓系统服务内存消耗类漏洞挖掘方法,适用于自动化挖掘和验证安卓系统服务中的资源消耗类漏洞。
[0005]本专利技术提供的基于指令识别和定向模糊测试的安卓系统服务内存消耗类漏洞挖掘方法,结合静态分析,根据启发式规则定位潜在的内存消耗类漏洞;并在以潜在漏洞为目标的定向模糊测试过程中,针对内存消耗类漏洞设计轻量化反馈收集、高质量种子选择和分阶段的种子生成变异方法;在此过程中平衡模糊测试路径探索阶段和漏洞攻击阶段的时间开销。本专利技术可以高效,且准确地检测安卓系统服务中的内存消耗类漏洞。具体分为静态分析和动态模糊测试两个阶段。
[0006](一)静态分析阶段;静态分析的任务是定位潜在漏洞,并且为模糊测试生成初始
输入;具体来说,首先通过启发式规则定位数据存储指令和能够到达这些指令的系统服务接口;然后收集到达数据存储指令的约束条件,并根据约束条件生成模糊测试的初始输入。
[0007](二)动态模糊测试阶段,动态模糊测试的目的是判断时间窗口内对数据存储指令的攻击是否足以造成安全影响。本专利技术在动态模糊测试过程中,在反馈收集、种子选择、种子生成和变异、攻击代码生成这四个方面提出了新的方法,从而实现高效的模糊测试:
[0008](1)关于反馈收集,本专利技术设计轻量级的反馈收集方法,来指导模糊测试;包括高效地收集模糊测试过程中输入的执行路径和内存消耗状况,以此评估种子输入在探索和内存消耗方面的贡献;具体地,收集执行路径到目标指令的距离作为模糊测试探索的反馈信息(探索贡献),收集内存大小的变化作为模糊测试攻击的反馈信息(内存消耗贡献);
[0009](2)关于种子选择,模糊测试需要选取高质量的种子输入进行变异和执行;本专利技术采用模拟退火算法,结合收集的反馈信息,动态地选择和淘汰种子输入;
[0010](3)关于种子生成和变异,本专利技术根据种子在模糊测试所处的阶段分别采取不同的变异策略生成新的输入;
[0011](4)关于攻击代码生成,本专利技术复用模糊测试中高质量的种子,产生有效的攻击代码。
[0012]本专利技术方法的流程参见图1所示。
[0013]进一步地,在静态分析阶段:
[0014]所述潜在漏洞定位,具体做法为,基于对安卓系统服务中的内存消耗漏洞的观察,漏洞存在一些约束条件——系统服务要保存所存储数据的引用,并且用于保存的数据结构具有可变的大小。基于这一观察,首先识别安卓系统服务中定义的所有字段,和安卓框架中的所有全局静态字段;然后从中选出容器字段,并将它们的扩容操作标记为数据存储指令;最后用后向控制流分析找到可能到达数据存储指令的系统服务接口,并通过数据流分析过滤出参数与目标指令有数据依赖的接口。
[0015]所述模糊测试初始输入的生成,是从路径约束的分支条件中选取初始输入。通常分支语句会将输入与特定的常量或是动态的系统状态变量(如UserHandler.getUserId())进行比较。因此,本专利技术直接使用常量或者这类函数的返回值作为初始输入。
[0016]在静态分析过程中,本专利技术还通过控制流和数据流分析结果将接口参数划分为控制流相关输入、数据流相关输入和其他类输入,之后模糊测试可以在不同阶段选择性变异不同类别的输入。
[0017]进一步地,在模糊测试阶段:
[0018](1)关于反馈收集
[0019]执行路径到目标指令的距离的计算流程为:考虑到数据存储指令是否被调用取决于它们调用者控制流结构中的前置条件,本专利技术收集函数级别的执行路径,并利用函数内控制流(CFG)信息来改进函数级别距离计算的精确性,从而计算函数到达目标的估计概率,进而利用这一概率计算定向模糊测试的“距离”。具体来说,首先将函数调用图(CG)上的目标函数可达概率设置为1.0,然后在CG图上后向遍历计算每一个可达函数到达目标的估计概率,在模糊测试过程中对于种子输入的执行路径,将其中函数估计概率的最大值c
r
作为种子的探索贡献分数。在后向遍历时,根据函数的CFG估计函数调用CG上相邻函数的概率,进而通过遍历算出函数最终调用目标函数的估计概率。如图3所示。
[0020]为了观测多次执行的累加后果,本专利技术设计了一个内存大小监控器。具体来说监控器选用两个指示器来观测内存大小变化。分别为:1)JVM堆大小,安卓的JVM限制了进程占用的堆内存上限;2)定制化内存大小,定制化内存对象分布在安卓系统服务中,通过静态分析可以识别出这些对象,本专利技术进一步通过控制流分析找到检查这些对象大小的条件判断语句,并从中提取表示定制化内存大小上限的常量。通过观测接口执行前的系统服务内存指示器大小m
i
,执行后大小m
e
,结合内存指示器上限m
t
,可以计算种子的内存消耗贡献c
m

[0021][0022](2)关于种子选择
[0023]具体流程为:选取“距离”目标更近或消耗本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种安卓系统服务内存消耗类漏洞挖掘方法,其特征在于,分为静态分析和动态模糊测试两个阶段;其中:(一)静态分析阶段;静态分析的任务是定位潜在漏洞,并且为模糊测试生成初始输入;具体来说,首先通过启发式规则定位数据存储指令和能够到达这些指令的系统服务接口;然后收集到达数据存储指令的约束条件,并根据约束条件生成模糊测试的初始输入;(二)动态模糊测试阶段,动态模糊测试的目的是判断时间窗口内对数据存储指令的攻击是否足以造成安全影响;在动态模糊测试过程中,在反馈收集、种子选择、种子生成和变异、攻击代码生成这四个方面采用新的方法,从而实现高效的模糊测试:具体为:(1)关于反馈收集,设计轻量级的反馈收集方法,来指导模糊测试;包括高效地收集模糊测试过程中输入的执行路径和内存消耗状况,以此评估种子输入在探索和内存消耗方面的贡献;具体地,收集执行路径到目标指令的距离作为模糊测试探索的反馈信息,称为探索贡献,收集内存大小的变化作为模糊测试攻击的反馈信息,称为内存消耗贡献;(2)关于种子选择,模糊测试需要选取高质量的种子输入进行变异和执行;具体采用模拟退火算法,结合收集的反馈信息,动态地选择和淘汰种子输入;(3)关于种子生成和变异,根据种子在模糊测试所处的阶段分别采取不同的变异策略生成新的输入;(4)关于攻击代码生成,复用模糊测试中高质量的种子,产生有效的攻击代码。2.根据权利要求1所述的安卓系统服务内存消耗类漏洞挖掘方法,其特征在于,在静态分析阶段:所述潜在漏洞定位的具体做法为:基于对安卓系统服务中的内存消耗漏洞的观察,漏洞存在一些约束条件——系统服务要保存所存储数据的引用,并且用于保存的数据结构具有可变的大小;据此,首先识别安卓系统服务中定义的所有字段,和安卓框架中的所有全局静态字段;然后从中选出容器字段,并将它们的扩容操作标记为数据存储指令;最后用后向控制流分析找到可能到达数据存储指令的系统服务接口,并通过数据流分析过滤出参数与目标指令有数据依赖的接口;所述模糊测试初始输入的生成,是从路径约束的分支条件中选取初始输入;分支语句将输入与特定的常量或是动态的系统状态变量进行比较;故直接使用常量或者这类函数的返回值作为初始输入。3.根据权利要求2所述的安卓系统服务内存消耗类漏洞挖掘方法,其特征在于,在静态分析过程中,还根据控制流和数据流分析结果将接口参数划分为控制流相关输入、数据流相关输入和其他类输入,便于之后模糊测试在不同阶段选择性变异不同类别的输入。4.根据权利要求3所述的安卓系统服务内存消耗类漏洞挖掘方法,其特征在于,在模糊测试阶段,关于反馈收集中所述的执行路径到目标指令距离的计算流程为:依据数据存储指令是否被调用取决于它们调用者控制流结构中的前置条件,收集函数级别的执行路径,并利用函数内控制流CFG信息来改进函数级别距离计算的精确性,从而计算函数到达目标的估计概率;进而利用这一概率计算定向模糊测试的“距离”;具体地,首先将函数调用图CG上的目标函数可达概率设置为1.0,然后在CG图上后向遍历计算每一个可达函数...

【专利技术属性】
技术研发人员:杨珉张磊张晓寒张源杨哲慜张智搏
申请(专利权)人:复旦大学
类型:发明
国别省市:

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

1