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  具备相同的特征. 利用上述特点, 研究人员提出了基于聚类的检测方法, 该方法通过对大量的应用进行聚
   302   303   304   305   306   307   308   309   310   311   312