作为JavaScript最大的包管理器,Node Package Manager (NPM) 近年来成为了供应链攻击的主要目标。NPM充斥着大量的恶意包,给终端用户带来了显著的安全风险。基于学习的方法在适应各种攻击类型方面展现了良好的性能,但仍面临两个主要局限性。首先,它们通常利用元数据特征或在包级别提取粗粒度的代码特征,而忽略了复杂的代码语义。其次,用于训练模型的数据集通常在数量和多样性方面存在不足,无法检测到多种类的攻击。为了解决这些问题,本研究提出了Maltracker,一种基于细粒度特征、大语言模型(LLM)增强数据集的NPM恶意软件检测工具。首先,Maltracker构建了精确的调用图,以提取可到达预定义敏感API的可疑函数,然后利用社区检测算法,基于程序依赖图识别可疑的代码片段,从中提取细粒度特征。为了解决数据集多样性不足的问题,本研究使用先进的大语言模型将其他编程语言(如C/C++、Python和Go)中的恶意函数翻译成JavaScript。评估结果显示,Maltracker相较于现有的最先进基于学习的方法有显著提升,在包级别的F1评分上提高了约12.6%,在函数级别提高了31.0%。此外,Maltracker的关键组件均对其性能的有效性做出了贡献。最终,Maltracker还在NPM中检测出了230个新恶意包,并收到了61封感谢信,其中一些包含了现有工具无法检测到的新种类恶意行为。
该成果“Maltracker: A Fine-Grained NPM Malware Tracker Copiloted by LLM-Enhanced Dataset”已被CCF列表A类会议“ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)”于2024年录用。ACM ISSTA是软件工程领域最权威的国际学术会议之一,主要关注软件测试与分析等前沿研究。ISSTA 2024共收到694篇投稿,最终接收143篇文章,接收率为21%。
-
论文链接:https://dl.acm.org/doi/abs/10.1145/3650212.3680397
背景与动机
Node Package Manager (NPM) 是 JavaScript 的包管理器,拥有超过 250 万个包。通过允许开发者使用 package.json 文件声明和管理依赖项,NPM 自动化了复用包的过程,创造了一个高效的开发环境。然而,随着 JavaScript 的流行度不断上升,NPM 成为了供应链投毒攻击的主要目标。例如,“event-stream” 事件就是一个严重的案例。该包每周下载量超过 150 万次,并被近 1600 个其他包所依赖。由于维护者的更换,“flatmap-stream”被注入恶意依赖。攻击者发布了一个包含恶意代码的新版本,该恶意代码旨在窃取与比特币相关的数据,对整个生态系统构成了重大安全威胁。而该恶意代码几个月后才被发现。
及时准确地检测 NPM 中的恶意包至关重要。近年来,许多自动化工具被提出用于检测 NPM 恶意软件,包括基于规则的工具和基于学习的工具。基于规则的工具在效率方面表现良好,但严重依赖预定义的规则。基于学习的工具可以建模更广泛的特征并消除潜在的误报,但其有效性和实用性仍然受到限制。首先,识别恶意代码并编码细粒度特征以精确建模恶意行为具有挑战性。现有工具通常利用抽象语法树 (AST) 提取敏感 API 的特征,无法捕捉到敏感 API调用之间的复杂关系。此外,如何持续检测新出现的攻击方式存在挑战性。训练数据集对于驱动基于学习的工具至关重要,而现有NPM恶意数据集在数量和多样性上有所缺乏。由于 JavaScript 具有多功能性和广泛的流行度,新的恶意攻击类型频繁出现,同时来自其他生态系统的各种攻击手段也可以轻松迁移到 NPM平台。因此,如何针对多种类的攻击类型成为一个关键的问题。
为了解决上述挑战,本研究提出了Maltracker,一种基于学习的 NPM 恶意软件检测器。Maltracker通过预定义的敏感API,静态分析定位可疑代码片段,并为每个可疑代码片段提取细粒度特征,包括数据流特征、参数特征等。其次,我们收集了大量其它语言的恶意样本,通过大语言模型(LLM)翻译成JavaScript,对现有恶意数据集进行了有效扩充。
设计与实现
如图1所示,Maltracker主要分为以下三个步骤。首先,Maltracker 基于预定义的敏感 API 定位给定包中可疑的函数,这些函数往往是恶意行为的来源。其次,为了提取与恶意行为密切相关的细粒度代码特征,Maltracker 基于程序依赖图 (PDG) 进行社区检测,进一步提取可疑的代码片段。最后,Maltracker从恶意代码片段中提取一组与敏感逻辑和恶意行为相关的特征。此外,本研究还利用大语言模型翻译来自其他生态系统的恶意样本,以扩充训练数据集,增强 Maltracker 的检测能力。
图 1 Maltracker整体框架
1)定位可疑函数:通过回顾已有的 NPM 恶意软件检测研究,本研究收集了与网络操作、加密、进程、文件和系统信息相关的敏感模块的 API,所有这些模块的方法都被视为敏感 API。Maltracker 的敏感 API 列表主要包含内置函数,并且会随着新内置 API 的出现而更新。然后通过构建包的调用图,Maltracker跟踪所有调用敏感 API 的函数,并标记为可疑函数。由于函数可能通过调用内置敏感 API 实现恶意操作,因此在构建调用图时包含了第三方依赖库。
2)提取可疑片段:Maltracker 在定位可疑函数后,通过构建相应的程序依赖图(PDG)进一步分析。PDG 是一个有向图,其中节点代表代码语句,边表示节点之间的数据流或控制流,并且保留了节点的执行顺序,因为敏感函数调用的顺序对于表现恶意逻辑至关重要。例如,窃取信息的恶意逻辑通常先收集敏感信息,然后执行网络操作。
在构建 PDG 后,Maltracker 使用社区检测算法(Leiden 算法)来检测可疑的代码片段。社区检测的核心思想是识别给定图中的子图,这些子图内部节点的连接密度较高,与外部节点的连接较少。基于这一原理,Maltracker 能够识别插入良性包中的恶意代码片段,因为这些代码通常与主代码的关联较弱。最终,Maltracker 将算法返回的代码块视为“代码片段”,其中调用敏感 API 的部分被标记为“可疑代码片段”。
3)特征提取:在提取了可疑片段之后,Maltracker分别为每个片段提取特征。本研究设计了包含基本特征、敏感节点特征以及图特征三大类特征,其中基本特征包括节点数量、敏感节点数量以及是否使用了特定API等信息。敏感节点特征包括敏感函数调用节点的结构特征、参数特征以及数据流特征。图特征编码了整个可疑代码片段的图结构。
另外,本研究还通过大语言模型对现有恶意数据集进行了扩充,具体来说,本研究手动收集了221个来自九种编程语言的恶意软件函数,图2展示了翻译前收集的恶意样本随恶意种类以及编程语言的分布情况。本研究采用 Gemini-1.0-pro、DeepSeekcode 和 GPT-3.5-turbo 三种大语言模型进行代码翻译,并通过静态语法检查以及动态运行对翻译效果进行了评估,图3展示了评估结果。
图2 恶意样本分布情况
图3 大模型翻译结果(%)
实验与结果
为了验证Maltracker的在检测恶意包方面的有效性,本研究在包级别和函数级别上开展了大规模实验,并与现有方法进行了对比。表格1展示了实验结果。实验结果表明,在包级别和函数级别上Maltracker均表现最优。具体来说,基于XGB模型进行实验,Maltracker在包级别F1-score相较于Amalfi和Ladisa分别提高了13.2%和12.6%;在函数级别分别高出了34.0%和31.0%,这表明了本研究方法的有效性。
表格 1 Maltracker与基准方法的有效性对比
此外,本研究还评估了Maltracker不同组件对于实验效果的影响。具体来说,该实验设置了五种变体:Maltrackersc、Maltrackercd、Maltrackerfb、Maltrackerfn、Maltrackerfg。Maltrackersc仅考虑对敏感API的直接调用,Maltrackercd省略了社区检测的过程,从整个可疑函数中提取特征。Maltrackerfb、Maltrackerfn、Maltrackerfg分别对特征集中三类特征进行了消融。表格2展示了实验结果。可以看出,Maltracker的每个组件和特征类别都发挥了重要作用,尤其在函数级别的检测任务中表现得尤为显著。
表格 2 Maltracker不同变体的性能评估
最后,本研究对Maltracker检测真实恶意包的能力以及大模型扩充数据集的作用进行了评估。表格3中Maltracker为原始数据集上训练的检测模型,MaltrackerL为在扩充数据集上训练的模型。结果表明,Maltracker成功检测到212个恶意包,误报率为37.3%。使用扩展数据集的MaltrackerL检测到的恶意包数量增加了18个,误报率下降至36.3%。此外,MaltrackerL能检测到6个新类型的恶意软件包(包括4个勒索软件和2个键盘记录软件),这证实了大语言模型扩展数据集在识别新型恶意软件方面的有效性。
表格3 Maltracker的实用性评估
详细内容请参见:
Zeliang Yu, Ming Wen, Xiaochen Guo, and Hai Jin. Maltracker: A Fine-Grained NPM Malware Tracker Copiloted by LLM-Enhanced Dataset. In Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2024). Association for Computing Machinery, New York, NY, USA, 1759–1771.
https://doi.org/10.1145/3650212.3680397
原文始发于微信公众号(穿过丛林):ISSTA'24:大语言模型数据增强的细粒度NPM恶意软件检测方法