论文分享解读:Android第三方库的版本识别和漏洞检测

 

概要

第三方库(TPLs)作为移动生态系统的重要组成部分,促进了Android应用程序的快速发展。但是,对于TPL识别,存在TPLs依赖、代码混淆、精确的版本表示等问题。现有的TPLs检测工具不能很好地解决这些问题。因此,提出了ATVHUNTER的系统,该系统可以精确地定位应用内TPLs版本的漏洞,并提供有关漏洞的详细信息。

 

挑战

除了上述现有工具的缺陷,目前在这个研究方向上仍然面临一些挑战:

缺乏有漏洞的TPL版本(TPL-V)数据集。理想情况下,对于每一个有漏洞的TPL,应该包括TPL的名称、版本、类型、漏洞危害等级等。然而,据我们所知,没有这样公开的数据集。

精确的版本表示。我们需要在版本层面区分TPL,然而,如何提取合适的代码特征来表示同一TPL的不同版本是一个挑战。特别是当不同版本的代码差异很小的时候。

代码混淆干扰。代码混淆可以改变应用内TPLs与原始TPLs之间的代码相似性。毫无疑问,混淆技术增加了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。

 

ATVHUNTER系统架构

我们提出了一种抗混淆的TPL-V漏洞检测工具——ATVHUNTER,该工具可以报告应用内TPL漏洞的详细信息。首先,ATVHUNTER使用类依赖关系将TPL模块从主应用中分离出来,并采用两阶段策略识别应用内的TPL。它提取CFG作为粗粒度特征,在特征数据库中定位潜在的TPLs,以实现高效率。然后提取CFG每个基本块中的操作码序列作为细粒度特征,采用相似比较的方法识别精确版本。

如图1所示,系统设计分为两部分:(1)TPL版本检测;(2)TPL漏洞检测。

TPL版本检测

ATVHUNTER的TPL检测部分包括四个关键阶段:
(1)预处理,(2)模块解耦,(3)特征生成,(4)TPL识别。

(1)预处理:

ATVHUNTER在这一阶段主要执行两项任务。第一个任务是对输入应用程序进行反编译,并将字节码转换为适当的中间表示(IRs)。第二个任务是找到应用中的主模块(主应用的代码)并将其删除,以消除主应用对其的干扰。

(2)模块解耦:

模块解耦的目的是将应用的非主模块拆分为不同的独立候选库。我们采用类依赖图(CDG)作为分离候选TPL的特性,因为CDG不依赖于包结构,不会受package flattening影响。 类依赖关系包括:1)类继承,不考虑接口关系,因为它可以在混淆中删除,2)方法调用关系,3)字段引用关系。

(3)特征生成:

提取特征并生成代表每个TPL文件的指纹(签名)。为了确保可伸缩性和准确性,我们选择了两个粒度特性。 1)对于粗粒度的特征,我们选择提取控制流图(Control Flow Graph, CFG)来表示TPL,因为CFG是相对稳定的并在一定程度上保证语义信息。(2)对于细粒度特征,我们提取CFG每个基本块中的操作码作为精确版本识别的特征,并采用模糊哈希技术来代替传统的哈希算法来为每种方法生成代码签名。

(4)TPL识别:

识别潜在的TPL:a)按包名搜索、b)按类的数量搜索、c)粗粒度特征搜索。

版本识别:比较方法相似度,两种方法只有在其方法相似度超过一个阈值时才匹配。然后根据匹配方法的数量,计算出TPL的相似度。当匹配方法的数量超过阈值时,我们认为我们找到了具有其版本的正确的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。

 

实验

准确率

ATVHUNTER优于目前最先进的TPL检测工具,库识别的准确率为98.58%,召回率为88.79%,版本识别的准确率为90.55%,召回率为87.16%。

效率

与其他工具相比,ATVHUNTER能够高效准确地识别TPL-v,检测TPL所需的时间更短。

抗混淆能力

对100个APP用工具Dasho进行模糊处理,得到一组原始应用和四组混淆过的应用,在此基础上进行比较。ATVHUNTER对代码混淆提供了比现有工具更好的恢复能力,特别是在标识符重命名、包扁平化和控制流随机化方面。

 

不足

(1)只关注Java库,不考虑native库。
(2)ATVHUNTER采用静态分析来查找TPLs,不支持如反射、动态类加载等
(3)不支持最新的TPL检测。

 

来源

ATVHunter:Android应用程序第三方库的版本识别和漏洞检测工具
文章收录于ICSE 2021:
https://conf.researchr.org/details/icse-2021/icse-2021-papers/18/ATVHunter-Reliable-Version-Detection-of-Third-Party-Libraries-for-Vulnerability-Iden
工具主页:
https://sites.google.com/view/atvhunter/home

 

团队介绍

Vulpecker Team

隶属于360公司信息安全部的移动IOT安全团队,专注于移动安全研究。成员致力于Android、iOS、IOT漏洞挖掘,逆向脱壳分析,安全扫描、隐私合规、脱壳机工具开发。
团队定制了公司内部产品安全开发规范,支撑公司SDL流程建设。在提高工作效率的同时也为开发者提供了便捷的安全测试平台。
欢迎感兴趣的同学加入,联系方式g-sec-mobile@360.cn

(完)