Page 324 - 《软件学报》2024年第6期
P. 324

2900                                                       软件学报  2024  年第  35  卷第  6  期


                    不过幸运的是约       70% APK  采用了  ProGuard  的默认配置, 仅启用了优化、标识符混淆和压缩, 原因在于扁平
                 化可能导致发布后的       APP  存在不能在所有版本的        Dalvik  上运行的风险, 因此默认不启用该混淆功能. 从上述分析
                 可以得出结论, LibPass 具备良好的在优化、标识符混淆和压缩等混淆情形下抗混淆能力, 但在对抗扁平化情形的
                 混淆方面还有待提升.
                  3.5   讨 论
                    本节讨论研究工作中的局限性以及未来可能的改进工作.
                  3.5.1    多维度相似性
                    LibPass 仅依赖于  APP  和  TPL  的包结构信息和类申明信息度量        APP  的根包与   TPL  的根包之间的结构相似性
                 实现  TPL  检测, 而没有考虑具体的代码实现及其语义信息、UI 资源等其他维度的相似性. 代码克隆检测或程序相
                 似性比较中常考虑语法相似性, 可以利用             APK  的  opcode 序列抽取语法层面的特征, 进行设计相似性度量. 又如,
                 对于那些使用了      Java 注解机制开发的     TPL, 注解信息会被嵌入到字节码中, 这些注解信息可以用于度量注解相似
                 性. 再如, 有些  TPL  提供了  UI 资源, 因此  UI 相似性也可以作为一个比较维度来识别引入的                 TPL. 鉴于每个   TPL
                 都有其各自的隐含特征, 考虑多维度相似性, 而不仅仅是单一维度相似性, 或许对于提升                           TPL  检测精度有明显帮
                 根包为参照, 通过加权方式度量相似性, 识别引入的特定版本的
                 助, 需要进一步的工作加以验证.
                  3.5.2    相似性阈值
                    LibPass 虽然也采用了基于相似性比较的方法, 但却没有引入相似性度量相关的阈值, 这是有别于其他基于相
                 似性度量方法的. 例如, LibScout 引入了 Merkle 树相似度阈值. LibPass 中没有引入非零阈值作为更严格筛选条件
                 有两个优势之处: 一是避免漏检, 将所有可能的             TPL  都纳入细粒度检测范围, 虽然增加了一定的检测时间开销, 但
                 是实际测试中发现能排除绝大部分            TPL; 二是无需先验知识来设定相似性阈值.
                  3.5.3    其他应用场景
                    提出的   TPL  检测方法不仅可以识别引入的          TPL, 而且可以确定    TPL  的具体版本, 因此作为程序分析的一个前
                 置任务, TPL  检测方法可以被整合到更加复杂的任务中. 例如, 文献                [23] 提供了一种代码补全场景, 在该场景中给
                 定程序片段以及该程序片段所属项目先前已经发布的版本, 建立该程序片段的上下文, 进一步基于上下文借助于
                 诸如  WALA  等工具完成代码补全. 在该任务场景中, 提出的              TPL  检测方法可以被整合到程序片段上下文识别阶
                 段, 用于提升识别准确性. 更具体地说, 将程序片段视为               APP, 而该程序片段所属项目先前已经发布的版本中出现
                 的  JARs 作为  TPLs, 应用  TPL  检测方法可以识别程序片段是否与先前使用的             JARs 相关. 如果待分析程序片段来
                 自于某个   JAR, 并且不同项目版本中存在该          JAR  的多个版本, 则可以进一步确定具体的           JAR  版本, 从而获取更加
                 准确的上下文. 上述      TPL  检测方法的基本应用思路在具体场景下的实现过程和细节尚待进一步斟酌.

                  4   结 论

                    本文采用相似性比较的思想, 从结构相似性角度提出了一种基于包结构树和多级签名的                              TPL  检测方法, 由主
                 模块识别、候选      TPL  识别和细粒度检测等      3  个关键组件以流水线方式组成. 主模块识别和候选               TPL  识别组件旨
                 在提升检测效率, 分别通过减少移除主模块的根包和识别可能候选                       TPL  的方式降低了约     29%  和  97%  的时间开
                 销, 能够在秒级完成      TPL  检测. 候选  TPL  识别组件对检测性能也有影响, 该组件利用包结构树稳定的特性产生签
                 名识别可能的     TPL  候选, 具备应对标志符混淆、包移除、控制流混淆等常用混淆的对抗能力. 细粒度检测组件旨
                 在提升检测性能, 以类级、方法级和属性级签名为比较对象, 充分利用类内的不变特性产生签名, 并以                                APP  中的
                                                                  TPL, 具备对抗类、方法、属性移除等混淆操作的
                 能力, 在基准数据集上获得了         94.6%  的  F1-score. 此外, 本文还提出了  3  种不同策略构建基准数据集, 并将其公开
                 供研究人员使用, 对      TPL  检测方法评价有积极贡献.

                 References:
                  [1]  Hu WH, Octeau D, McDaniel PD, Liu P. Duet: Library integrity verification for Android applications. In: Proc. of the 2014 ACM Conf.
                     on Security and Privacy in Wireless & Mobile Networks. Oxford: Association for Computing Machinery, 2014. 141–152. [doi: 10.1145/
   319   320   321   322   323   324   325   326   327   328   329