论文部分内容阅读
为了缩短开发时间,安卓应用开发中大量使用了第三方库。然而不恰当地使用第三方库将引入漏洞代码和违反开源协议。对安卓应用中第三方库进行检测与分析,有利于应用市场对应用程序进行第三方库安全性审查、监督开发者遵守开源协议规定。由于基准库包含的库数量较少,并且每次检测需要和百万个应用中的第三方库特征进行相似度计算,因此第三方库检测存在准确率低、效率低等问题;并且,已有文献分析的开源协议种类少,只检测了 GPL(General Public License)和AGPL(Affero General Public License)协议违规情况。针对以上问题,本文提出了安卓应用第三方库检测与分析方法,建立了目前规模最大的第三方库基准库,对第三方库进行白名单和调用关系子图识别的两级检测方法,并分析应用是否违反GPL、Apache、BSD(Berkeley Software Distribution License)以及 MIT(Massachusetts Institute of Technology)四种开源协议的规定。主要工作和贡献如下。(1)作为第三方库协议检测的基准,需要构建一个覆盖全面的第三方库基准库。本文从安卓应用市场中获取了 1530个应用,使用开源第三方库检测工具LibD进行检测,生成了第三方库的库名列表。基于该列表,在开源代码托管网站中检索第三方库的开源协议文件,将协议类型为GPL、Apache、BSD或者MIT的第三方库加入基准库。本文共获得709个第三方库,显著多于已有文献报告的库数量。(2)针对现有第三方库检测工具准确率低和效率低的问题,本文提出了基于白名单和基于调用关系子图识别的两级检测方法。首先提出了重命名混淆检测方法,若安卓应用中存在符合重命名混淆规则的包名,将被判定为使用了混淆工具进行了重命名混淆,本文将对此种类型的应用使用基于调用关系子图识别的检测,否则使用基于白名单的检测。调用关系子图识别的检测在函数调用图中保存了不会被混淆技术更改的操作码,在计算安卓应用侯选库和第三方库的相似度时能抵御重命名混淆。(3)提出了检测安卓应用是否违反GPL、Apache、BSD以及MIT四种开源协议的方法。当应用的第三方库协议类型为GPL时,在开源应用商店和开源代码托管网站中查找应用的源码,若未找到源码则视为违规;当应用的第三方库协议类型为Apache、BSD或者MIT时,在反编译后的应用中检索和开源协议授权相关的文字,检查是否包含相应的协议声明,若未包含则视为违规。为验证本文方法的有效性,本文将1096个开源应用作为检测第三方库实验数据集,结果表明检测准确率为83.89%、漏报率为15.99%,与已有方法相比,提高了准确率、降低了漏报率;本文将安智市场中的15055个应用作为分析开源协议实验数据集,结果表明共5378个应用违反了开源协议,其中3118个应用违反了一种开源协议,2160个应用同时违反了多种开源协议,并且,在违规应用中违反Apache协议的应用数量最多,共4952个。