论文部分内容阅读
第三方库作为一种重要的代码复用技术,在Android应用开发中存在广泛的应用,但同时也造成了权限滥用和用户隐私泄漏等诸多安全问题。现有的大部分研究工作使用白名单或基于聚类的方式来识别和检测第三方库。这些方法存在诸多不足,其原因包括:(1)第三方库种类和数量巨大,白名单方式无法完全覆盖;(2)Android应用内代码的结构关系错综复杂,第三方库的边界无法通过Java Package直接确定;(3)常见的代码混淆或优化技术不仅使得聚类结果包含大量误报,同时也使白名单无法准确检测第三方库。针对Android第三方库检测存在的上述三个问题,本文提出了一个新的第三方库识别和检测工具。研究者可以借助该工具快速、准确地定位Android应用程序所使用的第三方库。具体而言,本文的创新点和主要工作如下:1.提出了一种新的第三方库识别方法。首先改进了基于依赖关系图的第三方库边界识别算法,依赖关系包括函数调用、字段引用以及首次提出的接口实现和Dalvik注解。同时算法舍弃了传统的Package层次关系,从而避免将拥有相同包名前缀的多个第三方库识别成相同的类库。接着利用依赖关系图中的弱连通分量恢复各第三方库实例的边界,并计算各实例的特征值,通过聚类的方式准确识别第三方库。最后,首次提出针对聚类结果的三步优化过程,减少聚类结果中的误报。2.提出了一种新的基于索引数据库和贪心策略的第三方库检测算法。对聚类识别的第三方库实例建立基于特征的索引数据库,使算法能够快速地查找候选第三方库实例,从而避免一一对比的检测方式。另一方面,以贪心策略和相似度为基础的特征匹配算法确保最有可能的候选第三方库实例优先进行匹配,保证检测算法的鲁棒性和准确性。3.实现并开源了检测工具:LibHawkeye。本文从第三方库边界识别算法的可靠性、聚类优化方法的有效性、第三方库检测算法的准确性以及性能开销等方面系统地对所提出方法进行了评估。基于1,000个应用的边界识别实验表明,LibHawkeye的识别准确率比现有方法提高26.5%。通过对3,987,206个Android应用的聚类分析,识别出22,492个不同第三方库的1,414,173个实例。对聚类结果进行随机抽样检测,其边界准确率达到93.25%。基于聚类结果对不同应用市场的1,000个应用进行三方库检测,平均F1值达到93.5%,比最新方法提高40%。实验表明LibHawkeye在快速准确检测的同时能够抵抗常见的代码混淆,且性能开销合理可接受。