Page 309 - 《软件学报》2024年第6期
P. 309
徐建 等: LibPass: 基于包结构和签名的第三方库检测方法 2885
基准数据 源码 可用 集公开 否 √ × 否 √ 否 × 否 √ 是 √ 否 否 √ √ 是
F1-score (%) 无混淆 有混淆 24.39 90.64 17.00 83.55 24.19 83.00 23.82 91.37 55.36 92.05 - - - - 54.22 94.92
检测 效率 (s) ~2.8 <7 >800 >500 < 50 - - <15
本文工作的针对性改进 1) 引入包结构相似度量进行候选TPL筛 选, 解决人工设定相似性阈值的问题; 2) 提出基于多级签名的细粒度检测方法, 解决签名机制缺陷导致的漏报; 3) 设计了一种新的基于包结构树的表示 方法应对方法移除、类移除、包扁平化 等混淆技术的干扰 1) 提出基于多级签名的细粒度检测方法, 解决签名机制缺陷导致的漏报和误报; 2) 设计了一种新的基于包结构树的表示 方法应对方法移除、类移除、包扁平化 等混淆技术的干扰 引入包结构相似度量进行候选TPL筛选, 解决人工设定相似性阈值的问题 1) 引入包结构相似度量进行候选TPL筛 选, 解决人工设定相似性阈值的问题; 2) 设计了一种新的基于包结构树的表示 方法应对方法移除、类移除、包扁平化 等混淆技术的干扰; 3) 设计主模块识别和基于包结构的快速 检测组件改进检测效率 引入包结构相似度量进行候选TPL筛选, 解决人工设定相似性阈值的问题 - - -
表 2 与现有的基于相似性的方法比较 方法优点或贡献 首次提出Merkle树结构表示APP或 按照函数、类、包、 TPL (或APP)等层级提取特征 设计了5种方法字节码抽象表示以应 考虑方法及其间调用关系构建方法 特征映射为字符串作为APP或TPL摘 要用于相似性比较, 能抵御代码变更 改进LibScout签名机制, 考虑依赖关 系提出基于加权的签名机制, 以提升 设计基本块连同类特征的签名机制 提升扁平化、代码优化和控制流改 变混淆情形下的检测精度; LSH哈希 方式避免成对比较, 提高效率; 能区 改进LibScout, 新增函数特征向量降 低误匹配, 通过参数自整定方式自动 考虑包结构和内容信息刻画TPL或 APP应对多种混淆, 包括代码压缩、 优化和标志符混淆; 通过边缘计算提 设计了基于包结构树的表示方法, 提 出了包结构树整形方法改变包排序 方式和重命名以应对标志符混淆、 压缩操作; 能区分导入的TPL版本; 无 需人工设定相似性阈值
调优, 无需人工设定
分导入的TPL版本
升检测效率
检测精度
类签名相似
后依赖相似
包结构树签
树自底向上
而后类相似
性精确查找
性, 最后库
似性快筛,
相似性 比较方式 树自顶向下 TPL中的包, 逐层比较 方法相似性 快筛、而后 对方法和类混淆 类相似性 APP-Lib 相 一组方法级 名快筛, 而 后类相似性 精确查找
逐层比较
逐对比较
逐对比较
相似性
采用的 相似性度量 类库相似性、 包相似性、类 相似性和方法 相似性 方法相似性、 类相似性 APP-Lib 相似 性、类签名相 似性 加权模糊类签 名相似性 类签名相似性、性快筛, 而 依赖相似性、 库相似性 包相似性、类 相似性 图相似性 包结构树相似 性、加权类签 名相似性
表示形式 固定深度 Merkle树 一组方法级 字节码特征 字节码特征 固定深度 Merkle树 增强的类签 名字典 固定深度 Merkle树 API调用图 包结构树
检测方法 (年份) LibScout [14] (2016) LibDetect [31] (2017) Orlis [28] (2018) LibPecker [15] (2018) LibID-A [16] (2019) LibSeeker [33] (2019) PanGuard [32] (2019) LibPass