论文部分内容阅读
安卓应用数量日益剧增、漏洞层出不穷,漏洞检测效率亟待提高。然而,安卓应用中代码复用、重打包等情况导致了应用间存在大量的重复代码,如何有效识别海量应用间的重复代码、消除冗余检测,进而提高检测效率具有重要意义。 本文以面向对象语言中基础数据类型“类”为切入点,面向Source/Sink规则类漏洞,研究基于重复类代码的漏洞检测加速方法。通过去除应用内已知漏洞信息的类代码实现漏洞检测范围的有效缩减,通过关联漏洞检测相关代码与重复类代码保证漏洞检测的正确性,从而提高海量应用整体的漏洞检测效率。本文主要贡献如下: 1、提出了一种基于漏洞指纹图的漏洞检测技术。漏洞指纹图是一个随着漏洞检测可动态增长的、记录漏洞检测关键代码信息的有向图,支持重复类代码中已知漏洞的快速检测。通过设计基于深度优先遍历和多维特征过滤的漏洞指纹图查询算法,并根据查询结果去除目标应用的冗余代码,缩小分析范围,提高漏洞检测效率。实验表明,随着分析应用的数量增长,可以去除的代码占比呈上升趋势。在第45~50万应用的分析阶段,平均可去除代码占比高达52%,相比不进行代码相似性分析的检测方式效率平均可提高34%。对50万应用整体而言,检测效率平均可提升23%。 2、基于现有第三方库识别方法,提出了一种基于“库/类两层代码重复识别”的漏洞检测优化方法,进一步提高漏洞检测效率。实验表明,在第45~50万应用的分析阶段,平均可去除代码占比高达70%,相比不进行代码相似性分析的检测方式效率平均可提高63%。对50万应用整体而言,检测效率平均可提升41%。 3、设计并实现了一个海量安卓应用漏洞检测模块FindAndrVul@VARAS。该模块可在VARAS平台上,作为安卓应用安全分析流水线的一个阶段,自动对安卓应用进行漏洞检测。目前,已经针对50万安卓应用选取四类常见漏洞进行检测,取得较好的效果。