Page 307 - 《软件学报》2024年第6期
P. 307
徐建 等: LibPass: 基于包结构和签名的第三方库检测方法 2883
入 APP 后, 在正式发布前采用的混淆器根据混淆配置对 APP 进行混淆, 改变标志符名称、移除未使用的包和类、
将类移动到指定包、改变控制流等.
APP
非 ARP 1 ARP 2 ARP i
···
主
AP 1 AP 2 AP 1 AP n ··· ··· ··· ···
ARP 1 ARP x 模
块
主模块
╳ ╳ ╳ ╳ ╳ ╳
··· ··· ···
LRP 1
方法还有
LRP i
TPL 库 完整导入 (包) 定制导入 (类) 定制导入
图 1 APP 组成以及与引入 TPL 的对应关系
1.3 相关工作
作为 Android 应用安全分析的重要前置任务之一, TPL 检测方法得到了很多的关注. 现有的检测方法大致可
以分为 3 类: 基于白名单的方法 [5,6,21−24] , 基于机器学习的方法 [9−13,25–27] 和基于相似性比较的检测方法 [14−18,28−33] . 下
面逐一阐述代表性的方法, 总结其基本思路和优缺点, 归纳对比结果如后文表 2 所示.
基于白名单的方法是 TPL 检测最初使用的方法. 该方法的基本思想是预先建立一个知名 TPL 的白名单, 列出
每个 TPL 的名称以及库中包含的包名, 将从待检测的应用中提取的包名与白名单进行比较, 识别应用中引入的
[5]
TPL. DroidMoss 是第 1 个基于白名单方式的检测方法, 并用于 Android 应用重打包检测中. Chen 等人 [21] 构造了
73 个流行 TPL 的白名单用于 Android 应用克隆检测. 最大规模的白名单是由 Li 等人 [22] 采集的, 包含 5 000 个不
同的 TPL. 此外, Juxtapp 、AdRisk 和 [7] Lin 等人 [24] 也应用该方法识别应用中的广告库、社交库、金融库等, 进而
[6]
进行恶意应用分析. 该方法的一个显著特点是简单、高效, 但是缺点同样明显. 首先检测效果极大依赖于白名单
中 TPL 覆盖率, 而建立一个完备的白名单是困难的, 在持续有新的 TPL 出现的现实情境下保持白名单的完备性就
显得愈发困难. 其次, 该方法不能用于识别混淆后的 TPL. 上述不足严重影响了该方法的广泛应用.
为了能从混淆后的 Android 应用中识别第三方库, 机器学习技术被应用于第三方库检测. Narayanan 等人首次
提出了基于机器学习的第三方库检测方法—AdDetect [12] , 用于识别第三方广告库. 该方法的基本思想是通过特征
工程将待分析的 Android 应用转为特定的特征向量, 且确保每个特征在混淆情形下具备稳定性, 进而应用传统的
机器学习方法建立 TPL 识别器用于第三方库. 该方法具有抗混淆, 准确率高的优点, 主要原因在于借助于领域专
家的经验开展的特征工程很好地捕获了广告库易于区分的、抗混淆的特征, 如 View 组件, 权限和 API 等. 类似的
PEDAL [13] 等, 取得了不错的应用效果. 然而, 这一方法也存在不足之处. 首先, 方法仅局限于检测广告类
的 TPL, 不能直接用于检测任意 TPL, 除非重新针对性的人工建立有效的特征刻画 TPL. 其次, 方法在构建识别器
的过程中依赖于应用与 TPL 之间关系标注信息, 而本领域尚缺乏大规模的带标注的基准数据集, 且人工标注一个
Android 应用引入的 TPL 是一个耗时且极易产生漏报、误报的工作. 针对上述问题, 研究人员深入分析了 APP 引
入 TPL 的开发过程, 发现了两个比较突出的特点: 一是特定的 TPL 会被多个应用集成使用, 且该 TPL 越流行, 在
应用中出现的频率越高; 二是绝大多数的应用开发者在引入 TPL 时基本不做修改和裁剪, 于是不同应用中的同一
个 TPL 具备相同的特征. 利用上述特点, 研究人员提出了基于聚类的检测方法, 该方法通过对大量的应用进行聚