ATVHUNTER: Reliable Version Detection of Third-Party Libraries for Vulnerability Identification in Android Applications
今天与大家分享的论文是发表在ICSE 2021上的ATVHUNTER: Reliable Version Detection of Third-Party Libraries for Vulnerability Identification in Android Applications,作者是来自香港理工大学的Xian Zhan等。
Introduction
第三方库(TPL)作为移动生态系统的重要组成部分,已成为Android取得巨大成功的最重要贡献之一,这些库提供了可重用的功能,开发者可以利用这些功能来加快Android应用程序的开发。然而,大量第三方库的应用吸引了攻击者利用漏洞或在流行TPL中注入后门,这对于APP用户而言是严重的安全威胁。
检测Android应用程序中的TPL对于底层任务十分重要,例如恶意软件和重新打包的应用程序识别。然而,识别APP中的TPL面临一些挑战,例如TPL依赖性、代码混淆、精确的版本表示。由于各种TPL分散在不同的APP中,但APP中TPL组件的信息并不透明,由于许多直接和间接的依赖关系,许多开发人员难以清楚的知道他们的APP中使用了哪些TPL。
目前在此研究方向上主要存在如下问题:
•缺乏有漏洞的TPL版本(TPL-V)数据集。理想情况下,对于每一个有漏洞的TPL,应该包括TPL的名称、版本、类型、漏洞危害等级等。然而,据我们所知,没有这样公开的数据集。•精确的版本表示。我们需要在版本层面区分TPL,然而,如何提取合适的代码特征来表示同一TPL的不同版本是一个挑战。特别是当不同版本的代码差异很小的时候。•代码混淆干扰。代码混淆可以改变应用内TPLs与原始TPLs之间的代码相似性。毫无疑问,混淆技术增加了TPLs识别的难度。
因此,本文提出ATVHUNTER系统,可以精确地定位应用内TPLs版本的漏洞,并提供有关漏洞的详细信息。本文主要贡献如下:
•一个有效的TPL版本检测工具。本文提出了ATVHUNTER,这是一种抗混淆的TPL-V检测工具,具有很高的准确性,可以发现应用程序TPL-V的漏洞,并提供详细的漏洞和组件报告。•全面的数据集。本文构建了一个全面、大规模的TPL特征数据库,其中包含189545个不同的TPL,具有3006676个版本。其中,包括来自957个TPL的1180个cve,其中有38243个受影响版本,以及来自152个开源TPL的224个安全bug,有4533个受影响版本。•全面的比较。ATVHUNTER与当前的先进工具进行了系统、全面的比较。评估结果表明,ATVHUNTER对广泛使用的混淆技术具有良好的适应性,并优于目前最先进的TPL-V检测工具,在版本级识别中实现了较高的精度(90.55%)和召回率(88.79%)。•大规模的分析。ATVHUNTER对73110个使用TPLs的应用程序进行了大规模研究,发现9050个应用程序包含10616个有漏洞的TPLs。这些TPLs包括53337个已知漏洞和7480个安全bug。
Design
本文提出了一种抗混淆的TPL-V漏洞检测工具——ATVHUNTER,该工具可以报告应用内TPL漏洞的详细信息。首先,ATVHUNTER使用类依赖关系将TPL模块从主应用中模块解耦的目的是将应用的非主模块拆分为不同的独立候选库。我们采用类依赖图(CDG)作为分离候选TPL的特性,因为CDG不依赖于包结构,不会受package flattening影响。类依赖关系包括:1)类继承,不考虑接口关系,因为它可以在混淆中删除,2)方法调用关系,3)字段引用关系。分离出来,并采用两阶段策略识别应用内的TPL。它提取CFG作为粗粒度特征,在特征数据库中定位潜在的TPLs,以实现高效率。然后提取CFG每个基本块中的操作码序列作为细粒度特征,采用相似比较的方法识别精确版本。
系统分为两部分:TPL版本检测和TPL漏洞检查。版本检测分为以下四个步骤:
•预处理:ATVHUNTER在这一阶段主要执行两项任务。第一个任务是对输入应用程序进行反编译,并将字节码转换为适当的中间表示(IRs)。第二个任务是找到应用中的主模块(主应用的代码)并将其删除,以消除主应用对其的干扰。•模块解耦:模块解耦的目的是将应用的非主模块拆分为不同的独立候选库。我们采用类依赖图(CDG)作为分离候选TPL的特性,因为CDG不依赖于包结构,不会受package flattening影响。类依赖关系包括:1)类继承,不考虑接口关系,因为它可以在混淆中删除,2)方法调用关系,3)字段引用关系。•特征生成:提取特征并生成代表每个TPL文件的指纹(签名)。为了确保可伸缩性和准确性,我们选择了两个粒度特性。1)对于粗粒度的特征,我们选择提取控制流图(Control Flow Graph, CFG)来表示TPL,因为CFG是相对稳定的并在一定程度上保证语义信息。(2)对于细粒度特征,我们提取CFG每个基本块中的操作码作为精确版本识别的特征,并采用模糊哈希技术来代替传统的哈希算法来为每种方法生成代码签名。•TPL识别:识别潜在的TPL:a)按包名搜索、b)按类的数量搜索、c)粗粒度特征搜索。版本识别:比较方法相似度,两种方法只有在其方法相似度超过一个阈值时才匹配。然后根据匹配方法的数量,计算出TPL的相似度。当匹配方法的数量超过阈值时,我们认为我们找到了具有其版本的正确的TPL。
漏洞检测:主要分为两部分:
•建库,漏洞TPL-V建库过程包括从开源软件中收集Android tpl中已知的漏洞和security bugs。•TPL-v漏洞检测:ATVHUNTER搜索TPL数据库,检查被识别的TPL-v是否存在漏洞,并向用户生成详细的漏洞报告。
ATVHUNTER用python代码实现,采用APKTOOL对Android应用程序进行反编译,利用Androguard获取类依赖关系,使用SOOT生成CFG,并在SOOT的基础上获得CFG每个基本块的操作码序列。我们使用ssdeep进行模糊哈希算法生成代码特征,使用编辑距离算法查找app内TPLs。
Evaluation
准确率:ATVHUNTER优于目前最先进的TPL检测工具,库识别的准确率为98.58%,召回率为88.79%,版本识别的准确率为90.55%,召回率为87.16%。
效率:与其他工具相比,ATVHUNTER能够高效准确地识别TPL-v,检测TPL所需的时间更短。
抗混淆能力:对100个APP用工具Dasho进行模糊处理,得到一组原始应用和四组混淆过的应用,在此基础上进行比较。ATVHUNTER对代码混淆提供了比现有工具更好的恢复能力,特别是在标识符重命名、包扁平化和控制流随机化方面。
Conclusion
本文存在如下不足:
•只关注Java库,不考虑native库;•ATVHUNTER采用静态分析来查找TPLs,不支持如反射、动态类加载等;•不支持最新的TPL检测。
原文始发于微信公众号(COMPASS Lab):ATVHUNTER