ATVHUNTER:Reliable Version Detection of Third-Party Libraries for Vulnerability Identification in Android Applications(ICSE 2021)

基本介绍#

**研究背景:**安卓中第三方库(TPLs)使用十分常见,检测第三方库对于漏洞识别等都十分有用,但是由于TPL的分散性、直接或间接的依赖性以及应用中TPL信息的不透明性,现有工具不能很好的检测,更不用说检测具体某版本

研究挑战:

现有的TPL检测技术使用基于聚类的方法或相似性比较方法。但是聚类方法只能用于识别常用TPL且难以区分TPL版本,而相似性方法所依赖的TPL数据集规模远小于实际应用市场的TPL集合,导致这两种方式低召回率、难以精确识别版本的问题。对于TPL的检测,作者总结了三个挑战:

  1. 缺乏易受攻击的TPL版本数据集。
  2. 缺乏精确表述TPL版本的方法。
  3. 大量代码混淆导致TPL识别的困难。

研究贡献:

  • ATVHunter:高效的TPL版本检测工具,可以找到app的TPL中存在的漏洞并给出报告
  • 一个大型TPL数据集:包含189,545个不同的TPL,具有3,006,676个版本
    • 包含957个TPL中的1180个CVE,共38243个有漏洞的版本
    • 162个TPL中的224个安全bug,共4533个版本
  • 大数据分析:利用ATVHunter对104,446个安卓应用进行了大规模分析,发现9,050个应用程序包含具有53,337个漏洞和7,480个易受攻击的TPL版本

ATVHunter#

image-20210317185140023

主要分为下面两部分:

  • TPL版本检测
  • TPL漏洞检测

TPL版本检测#

  • Preprocessing
  • Module Decoupling
  • Feature Generation
  • Library Identification

Preprocessing#

image-20210323085634848
  • Decompiling:反编译输入的app,将bytecode转为中间IR表示
  • Primary module elimination:识别app中的主要模块并移除,尽可能地除去host app(primary module)对TPLs(non-primary module)的影响。

Module Decoupling#

image-20210323085713593
  • 把non-primary module拆分为独立的候选库

这里作者不采用诸如包依赖图(PDG)这类易受package flattening影响的方式,而是采用类依赖关系,从而克服了之前的问题

image-20210323085759307

主要选取以下类依赖关系:

  1. 类继承(不考虑interface)

  2. 方法调用关系

  3. 作用域关系

使用CDG区分TPL的文件,作为备选TPL

Feature Generation#

image-20210323085921645

粗粒度的特征生成:基于CFG,用于定位潜在的TPL

  1. 根据CFG为节点编号0 1 2 …
  2. 节点n的子节点中出边最多的编号为n+1,其他节点编号为n+2
  3. 生成签名(节点数,邻接列表hash值) :邻接列表示例: parent1->(child1,child2…)

image-20210323090100273

细粒度的特征生成:基于CFG中每个基本块的Opcode,用于区分TPL的版本,使用fuzzing hash计算hash,避免传统 hash算法在相似性比对上的缺陷

image-20210323090151852

image-20210323090218730

普通hash有细微差别结果就会差距很大,而Fuzzing hash是先分片再hash,最后组合,因此部分差别对结果影响不大。表现为hash值相似

Library Identification#

TPL数据库构造:从Maven Repository爬取了3,006,676个版本的软件,获取到了189,545个TPL,提取粗粒度和细粒度的特征存储到Mongodb中(300GB特征)

粗粒度和细粒度结合,先通过粗粒度识别TPL,再通过细粒度识别版本

库匹配:

  1. 通过包名缩小比较范围(只用于缩小范围) 并且判断是否被混淆

  2. 根据类数目继续缩小范围(去除数目差太大的)

  3. 粗粒度根据CFG搜索

版本匹配:

  1. methods相似度匹配算法(根据编辑距离),阈值0.85

  2. TPL相似度计算算法,阈值0.95

image-20210323090430045

TPL漏洞检测#

image-20210323090449430

收集了1,180 CVEs from 957 unique TPLs with 38,243 affected versions. 当检测出TPL版本后在漏洞数据库中进行搜索并生成报告

Evalutaion#

工具链:APKTool(反编译)+Soot(CFG)+ssdeep(Fuzzing Hash)

准确率#

image-20210323090537158

时间效率#

image-20210323090553969

抗混淆性能#

image-20210323090613556

大规模数据分析#

数据集:搜集了33个分类下,下载量1w-500w的最新版app共104,446个 其中73110个app包含TPL

发现: 9050/73110个app存在问题,涵盖53337个漏洞和7480个安全漏洞

个人感想#

  1. 研究基础:通过对9个工具的统计调研发现不足(ASE 2020)

  2. 大规模的实验直接展示了当前软件安全现状,容易吸引眼球

评论