2025-04-07-2025-04-13论文阅读周报
1+1>2: Integrating Deep Code Behaviors with Metadata Features for Malicious PyPI Package Detection
{2024}, {Sun X, Gao X, Cao S, et al.}, {ASE}
Sun X, Gao X, Cao S, et al. 1+ 1> 2: Integrating Deep Code Behaviors with Metadata Features for Malicious PyPI Package Detection[C]//Proceedings of the 39th IEEE/ACM International Conference on Automated Software Engineering. 2024: 1159-1170.
Key Points
- Adaboost
- 代码行为序列
- 元数据
- FastText
- Bert
Summary
本文提出了一种名为Ea4mp的新方法,用于检测PyPI(Python包索引)中的恶意软件包。该方法通过集成深度代码行为特征与元数据特征,解决了现有基于规则或单一特征方法的局限性。具体而言,EA4MP利用BERT模型从代码行为序列中提取深层语义特征,同时对元数据通过机器学习训练,然后使用Adaboost算法集成这两个模型。实验表明,Ea4mp在精确率、召回率和F1分数上显著优于现有基线方法,并在实际检测中成功识别出119个未知恶意包,其中82个已被PyPI官方移除。该方法为开源软件供应链安全提供了高效且可扩展的解决方案。
Research Objective(s)
开发一种高效且准确的恶意PyPI包检测方法,通过结合代码行为序列的深度语义分析与元数据特征,解决现有方法在人工特征工程成本高、检测动态变化恶意行为能力不足,以及忽视元数据价值等问题。
Background / Problem Statement
研究背景:PyPI作为Python生态的核心组件,近年来面临恶意软件包激增的威胁。现有方法依赖人工规则或单一静态分析,存在以下问题:1.人工特征工程成本高且难以适应快速演化的攻击;2.深度学习方法对长代码序列处理能力有限;3.元数据信息未被充分挖掘。
问题:如何有效结合代码行为和元数据特征,提升恶意包检测的准确性和鲁棒性?
Method(s)
作者基于两个发现来展开实验:
- 发现1:恶意代码行为跨越多个脚本文件并表现出相互关联
- 发现2:元数据包含丰富的有用信息
步骤1:基于代码行为序列的模型微调(Bert)
步骤2:基于元数据特征向量的模型序列(朴素贝叶斯,机器学习模型)
步骤3:模型集成,用Adaboost算法将微调后的Bert模型和训练好的机器学习模型进行集成(Adaboost)
基于前人的方法:
- FastText模型
- 将元数据作为特征集的一部分
Evaluation
评估:
数据集:收集了 3404 个恶意软件包和 10000 个良性软件包作为评估数据集,训练集和测试集9:1
基线模型:VirusTotal、OSSGadget 和 Bandit4Mal
指标:精确率、召回率、F1值
setup:
软硬件环境 | |
---|---|
CPU | AMD RYZEN 7735HS CPU, 32GB RAM |
操作系统 | Unbuntu with CUDA12.1 |
GPU | NVIDIA V100 GPU |
Python | |
Pytorch | |
BERT | HuggingFace的预训练BERT模型 |
Conclusion
Ea4mp 在大多数方面都优于现有的基线。虽然在召回率方面略逊于 Bandit4mal,但 Ea4mp 的精度比 Bandit4mal 高 17.1%。(精确率很高,召回率略高,这意味着,在检测后,我们不需要大量的人工审查来验证被标记为可疑的包是否为恶意软件。)
Ea4mp 能识别现实中存在的恶意软件包,Ea4mp 确实新发现了 119 个恶意软件包,其中 82 个已被 PyPI 官方移除。
我们的集成方法确实比单个非集成模型表现更好。使用 Adaboost 算法集成模型,确实,自适应地为模型分配权重可以比为模型预设权重更好地帮助识别恶意软件包。
Thought(s)
展望与不足:
- 本论文侧重于扫描Python脚本,还有其他可执行文件也可以被用作恶意代码的载体,例如DDL。
- 更复杂形式的代码混淆镜像解混淆
- Python版本
- Ea4mp 仅关注各种 API 和函数调用之间的关系,忽略了这些函数中传递的参数。这导致九个良性包被错误地标记为恶意,因为它们调用了与恶意包类似的 API。
Notes
Adaboost算法:
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
后一个模型的训练永远是在前一个模型的基础上完成!
这里的集合起来的策略是通过提高前一轮分类器分类错误的样本的权值,降低分类分类正确的样本权值,对于那些没有本分类正确的样本会得到后面分类器更多的关注。然后可以产生很多的弱分类器,通过多数加权投票组合这些弱分类器,加大误差率小的分类器,减少误差率大的分类器,使其在表决中起到较少的作用。
(1)初始化训练样本的权值分布,每个样本具有相同权重;
(2)训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;
(3)将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。
References
引用1
引用2
引用3
......