Backstabber’s Knife Collection: A Review of Open Source Software Supply Chain Attacks

{2020}, {Marc Ohm, Henrik Plate, Arnold Sykosch, and Michael Meier.}, {DIMVA}

Key Points

  • npm, PyPI, RubyGems
  • Malicious Packages、Vulnerable Packages
  • attack tree

Summary

本文聚焦开源软件供应链攻击,手动收集并分析了 2015 年 11 月至 2019 年 11 月间通过 npm、PyPI、RubyGems 分发的 174 个恶意软件包。研究围绕这些恶意包的注入方式、触发时机、执行特征、攻击目标等展开,发现其主要通过打字错误 squatting 注入,常在安装时触发,以数据泄露为主要目标,且存在条件执行、混淆技术使用及集群化等特征。该研究旨在为开源软件供应链攻击的预防、检测与缓解提供数据集和分析依据。

Research Objective(s)

  • 收集、分类并手动分析 174 个在真实世界开源软件供应链攻击中使用的恶意软件包(来自 npm、PyPI、RubyGems,时间范围 2015-2019)。
  • 揭示这些恶意包的特征与攻击模式,为开源社区和研究界开发预防、检测此类攻击的安全措施提供支持。

Background / Problem Statement

  • 背景:开源软件开发中依赖管理器自动处理大量依赖包,使软件供应链攻击风险升高;现有研究多关注含无意漏洞的包,对含恶意代码的包关注不足。
  • 问题:需要明确开源软件供应链中恶意包的注入方式、行为特征等,以填补相关研究空白,助力应对供应链攻击威胁。

Method(s)

  • 方法:通过 Snyk 数据库、安全公告、研究博客等渠道筛选明确标记为 “恶意” 的包,从镜像下载已移除的版本,对 174 个包进行手动静态分析,包括元数据(名称、发布日期)、恶意代码触发条件、目标、混淆手段等。
  • 基于前人研究:参考了关于漏洞包传播(如 Decan 等对 npm 漏洞继承的研究)、检测方法(如 Pfretzschner 等的静态分析工具)等工作,但聚焦恶意包跨生态系统分析。

Evaluation

setup: 未明确提及具体软硬件环境配置。

  • 评估方式:对 174 个恶意包的注入方式、触发时机、执行特征、攻击目标等进行统计与分析。
  • 数据集:174 个恶意包(62.6% 来自 npm,16.1% 来自 PyPI,21.3% 来自 RubyGems),时间范围 2015-2019。
  • 关键结果:61% 通过 typosquatting 注入;56% 在安装时触发;55% 以数据泄露为目标;41% 条件执行;49% 使用混淆技术;平均存在 209 天才被披露,形成 21 个集群。
  • 问题:数据集偏向 npm,缺少 Java(Maven)和 PHP(Packagist)包;部分包的二级载荷不可得。

Conclusion

  • 强结论:恶意包主要通过 typosquatting 注入,安装时触发常见,以数据泄露为主要目标,常使用条件执行和混淆技术,且存在跨语言代码复用的集群;该数据集为相关防御研究提供了基础。
  • 弱结论:推测 RubyGems 近期受攻击增加可能与 npm、PyPI 的防御加强有关(缺乏直接实验证据)。

Thought(s)

  • 疑问:如何有效识别未被标记为 “恶意” 但实际含恶意代码的包?如何缩短恶意包的检测周期?

  • 不足与展望:数据集覆盖范围有限(缺 Java、PHP 包);未来可扩展到更多生态系统,开发基于恶意包特征(如控制流模式)的自动化检测工具,探索动态分析与静态分析结合的检测方法。

Notes

  • npm、PyPI、RubyGems
  • 现有研究聚焦于漏洞代码,这与恶意代码的区别在于开发者的意图(vulnerable packagesmalicious packages
  • (LockFile)版本锁定是导致继承性漏洞的主因,因为开发者通常会避免频繁更新软件包,只需保证软件包功能正常。当旧软件包存在漏洞时,开发者更新补丁,这个补丁往往不能被存在漏洞的项目通过更新获取。版本锁定机制阻止了已存在的修复被自动应用到项目中。
    • npm中的LockFile:package-lock.file, packge.json中的版本是范围性的,而package-lock.json中的版本都是具体的。(一开始不存在package-lock.json, 则会通过package.json生成,后续如果有package-lock.json, 则会严格按照package-lock.json中的安装)
  • 恶意代码注入攻击树
    • 提交一个新包
      • 特洛伊木马程序
      • 仿冒域名(Typosquatting)
      • 释放后使用(use after free)
    • 感染现有包
      • 在源头注入
      • 在构建时注入
      • 在仓库系统注入
  • 恶意代码执行的时机也有不同,大多数是在安装的时候执行,也有专门在测试条件下才会执行,这时攻击的主要目标是开发者和维护者。
  • 条件执行:应用状态、操作系统、依赖树或者无条件执行。
  • 攻击目标:
    • 大多数数据窃取
    • 下载器,下载第二阶段的包
    • 打开后门,反向shell,连接远程服务器
    • 耗尽资源,破坏功能,导致拒绝服务
    • 运行加密货币挖矿程序或直接窃取加密货币
    • 也可能是以上结合出现
  • 恶意软件包还会通过判断ip来绕过一些动态分析的沙箱(例如ip为空和0.0.0.0时跳过恶意代码逻辑),只对真实ip起作用,所以在进行动态分析的沙箱时,要用真实ip。
  • PHP的包管理器:Packagist

思路:

  • 针对漏洞软件包的研究(如软件包复用机制、漏洞软件别闹的影响与传播)也能适用恶意软件包,因为它们共同存在于同一个生态系统,具有相同的软件生命周期。

References

Pfretzschner, B., ben Othmane, L.: Identification of dependency-based attacks on node.js. In: Proceedings of the 12th International Conference on Availability, Reli- ability and Security, p. 68. ACM (2017)

Garrett, K., Ferreira, G., Jia, L., Sunshine, J., K¨astner, C.: Detecting suspicious package updates. In: Proceedings of the 41st International Conference on Software Engineering: New Ideas and Emerging Results, pp. 13–16. IEEE Press (2019)

Towards Measuring Supply Chain Attacks on Package Managers for Interpreted Languages

{2021}, {Ruian Duan, Omar Alrawi, Ranjita Pai Kasturi, Ryan Elder, Brendan Saltaformaggio, and Wenke Lee.}, {NDSS}

Key Points

  • npm, PyPI, RubyGems
  • Supply chain attacks in registries

Summary

本文聚焦解释型语言包管理器(如 PyPI、Npm、RubyGems)的供应链攻击问题。作者提出了一个比较框架,从功能、安全和补救维度分析包管理器的特征,并开发了 MALOSS 分析工具,结合元数据、静态和动态分析识别恶意包。通过分析超 100 万个包,检测到 339 个新恶意包,其中 82% 被移除,3 个下载量超 10 万的包获 CVE 编号。研究揭示了打字劫持和账户劫持是主要攻击向量,窃取和后门是常见恶意行为,并针对不同 stakeholders 提出了缓解建议,以增强软件供应链安全性。

Research Objective(s)

  • 理解包管理器供应链攻击中的安全漏洞和信任错位问题;
  • 构建比较框架定性评估包管理器的功能与安全特征;
  • 开发分析工具(MALOSS)识别恶意包,实证研究供应链攻击的特征;
  • 提出可操作的改进措施,提升包管理器及软件供应链的安全性

Background / Problem Statement

  • 背景:包管理器是现代软件开发的核心工具,支持代码复用和简化开发,但近年来被攻击者滥用,通过恶意包窃取凭证、安装后门等,影响开发者、企业甚至政府组织。
  • 问题:现有解决方案多为零散的针对性措施(如运行时隔离、漏洞检测),难以应对新型攻击(如加密劫持);缺乏对供应链攻击的系统性分析,无法明确攻击程度、方式及有效防范机制。

Method(s)

  • 比较框架:从功能(账户保护、包发布 / 管理等)、审查(元数据 / 静态 / 动态分析)、补救(移除、通知)维度定性分析 PyPI、Npm、RubyGems 的特征。
  • MALOSS pipeline:整合元数据分析(包名、作者、依赖等)、静态分析(API 使用、数据流)、动态分析(沙箱执行、系统调用追踪),基于已知攻击的启发式规则筛选恶意包。
  • 基于前人研究:如 Zimmermann 等对 Npm 生态风险的研究、BreakApp 的运行时隔离方法,但进行了整合与扩展,形成系统性检测工具。

Evaluation

setup:

软硬件环境
CPU 8 x 3.60GHz Intel Xeon CPUs
操作系统 Ubuntu 16.04
内存 64GB
存储 60TB 网络附加存储(NAS)
工具 Docker、Sysdig、Airflow、Celery、PyT、JSPrime、Brakeman 等
数据集 PyPI(18.6 万包)、Npm(99.7 万包)、RubyGems(15.1 万包)
  • 评估方法:通过 MALOSS 检测恶意包并向注册表维护者报告,分析攻击向量、恶意行为、持久性、影响范围(下载量、反向依赖)等。
  • 关键结果:检测到 339 个恶意包,82%(278 个)被移除;3 个下载量超 10 万的包获 CVE;打字劫持和账户劫持是主要攻击向量,窃取和后门是主要恶意行为;20% 恶意包存在超 400 天,反向依赖显著放大影响(如 eslint-scope 依赖下载量达 25.9 亿)。
  • 可借鉴之处:整合多维度分析的检测框架,结合被动 DNS 数据评估攻击影响的方法。

Conclusion

  • 强结论:打字劫持和账户劫持是最主要的攻击向量;窃取和后门是最常见的恶意行为;恶意包可存在超 400 天,且影响被反向依赖显著放大;MALOSS 能有效检测恶意包(339 个,82% 被移除)。
  • 弱结论:提出的缓解建议(如注册表维护者加强审查)的实际有效性未通过长期实验验证;对某些模糊行为(如用户跟踪 vs 信息窃取)的界定依赖政策完善,缺乏明确技术解决方案。

Thought(s)

  • 疑问:MALOSS 对新型反分析技术(如复杂混淆、动态触发逻辑)的检测能力如何?不同包管理器的安全特征差异是否影响攻击向量的分布(如 RubyGems 恶意包更多)?

  • 展望:可研究更精准的静态 / 动态分析方法以应对反分析技术;建立跨包管理器的统一威胁情报共享机制;推动包管理器制定明确的用户跟踪与信息窃取界定政策,减少模糊地带。

Notes

  • 存在有些攻击者先发布一个有用的包,然后在随后的更新中掺入恶意代码。
  • 恶意软件包对代码托管平台的注册表进行攻击(此注册表不同于Windows下的注册表),指的是软件包注册。
  • 作者划分了参与开发、管理和使用注册表包的四个主要利益相关者:注册表维护者、包维护者、开发人员、最终用户。
  • 作者认为供应链攻击的目标是利用包管理器生态系统中的上游涉众(即Package Maintainer和Registry Maintainer),以扩大其对下游涉众(即开发人员和用户)的影响。
  • MALOSS
    • 元数据分析:包括包名、作者、release、下载、依赖
    • 静态分析:侧重源文件
      • 手动api标记:重点关注网络、文件系统、process、代码生成
      • api使用分析:将包的源文件解析为抽象语法树(AST),在AST中搜索手动标记api的使用情况
      • 数据流分析:需要处理流出或流入依赖项的流
    • 动态分析:侧重于执行包和跟踪系统调用(在Docker容器中执行包,使用Sysdig进行动态跟踪)
      • 动态跟踪中,捕获进程与底层系统交互,在基于linux上有三种流行的工具:Strace、Dtrace、Sysdig
    • 真阳性验证
  • 攻击者不断演变,采用代码混淆、多阶段有效载荷和逻辑炸弹等技术来逃避检测

References

BreakApp隔绝了不受信任的包,但是没有阻止加密货币挖掘和后门

N. Vasilakis, B. Karel, N. Roessler, N. Dautenhahn, A. DeHon, and J. M. Smith, “Breakapp: Automated, flexible application compartmen- talization,” Feb. 2018.

模块化的静态分析

S. Arzt and E. Bodden, “Stubdroid: Automatic inference of precise data-flow summaries for the android framework,” in Proc. 38th Inter- national Conference on Software Engineering (ICSE), Austin, Texas, May 2016.

最先进的工具将源文件转换为抽象语法树

P. S. Foundation, The ast module helps python applications to process trees of the python abstract syntax grammar, Aug. 2019. [Online]. Available: https://docs.python.org/3/library/ast.html. G. M. Bravo, Ecmascript parsing infrastructure for multipurpose analysis, Aug. 2018. [Online]. Available: https://github.com/Kronuz/ esprima-python. whitequark, Parser is a production-ready ruby parser written in pure ruby. Aug. 2019. [Online]. Available: https://github.com/whitequark/ parser. N. Popov, A php parser written in php, Jul. 2019. [Online]. Available: https://github.com/nikic/PHP-Parser.

pyt Python静态分析工具

python-security, A static analysis tool for detecting security vulner- abilities in python web applications, Jul. 2018. [Online]. Available: https://github.com/python-security/pyt.

JSPrime JS静态分析工具

N. Patnaik and S. Sahoo, “Javascript static security analysis made easy with jsprime,” Blackhat USA, 2013.

Brakeman Ruby静态分析工具

S. Inc., A static analysis security vulnerability scanner for ruby on rails applications, May 2019. [Online]. Available: https://github.com/ presidentbeef/brakeman.

数据流分析中参考的方法

S. Arzt and E. Bodden, “Stubdroid: Automatic inference of precise data-flow summaries for the android framework,” in Proc. 38th Inter- national Conference on Software Engineering (ICSE), Austin, Texas, May 2016.

恶意软件逃避检测的研究

D. Kirat, G. Vigna, and C. Kruegel, “Barecloud: Bare-metal analysis- based evasive malware detection,” in Proc. 23rd USENIX Sec., San Diego, CA, Aug. 2014. D. Kirat and G. Vigna, “Malgene: Automatic extraction of malware analysis evasion signature,” in Proc. 22nd ACM CCS, Denver, Col- orado, Oct. 2015. A. Jadhav, D. Vidyarthi, and M. Hemavathy, “Evolution of evasive malwares: A survey,” in 2016 International Conference on Compu- tational Techniques in Information and Communication Technologies (ICCTICT), IEEE, 2016, pp. 641–646. Y. Gao, Z. Lu, and Y. Luo, “Survey on malware anti-analysis,” in Fifth International Conference on Intelligent Control and Information Processing, IEEE, 2014, pp. 270–275. A. Bulazel and B. Yener, “A survey on automated dynamic mal- ware analysis evasion and counter-evasion: Pc, mobile, and web,”in Proceedings of the 1st Reversing and Offensive-oriented Trends Symposium, ACM, 2017, p. 2.

npm生态系统中的安全威胁研究

M. Zimmermann, C.-A. Staicu, C. Tenny, and M. Pradel, “Small world with high risks: A study of security threats in the npm ecosystem,” in Proc. 28th USENIX Sec., Santa Clara, CA, Aug. 2019.

Killing Two Birds with One Stone: Malicious Package Detection in NPM and PyPI using a Single Model of Malicious Behavior Sequence

{2024}, {Junan Zhang, Kaifeng Huang, Yiheng Huang, Bihuan Chen, Ruisi Wang, Chong Wang, and Xin Peng.}, {TOSEM}

Key Points

  • 多语言知识融合
  • 行为序列

Summary

提出 Cerebro 模型,通过恶意行为序列建模和跨生态知识融合,实现 NPM 和 PyPI 恶意包的统一检测,解决现有方法跨生态知识利用不足和缺少序列建模的局限,评估显示其有效性、效率及实际应用价值

Research Objective(s)

解决现有恶意包检测的两大局限:不同生态系统(NPM 和 PyPI)恶意包知识未充分利用;未建模恶意行为的序列性,进而提出单一模型 Cerebro 实现跨生态恶意包检测。

Background / Problem Statement

  • 背景:作者阻碍实现现有方法有效的两个局限性是:不同生态系统的恶意软件包知识没有得到充分利用,公开可用的恶意软件包数据集规模较小;现有方法缺少序列知识(恶意软件包通常会执行一系列可疑活动以实现攻击)。
  • 问题:现有方法无法跨 NPM 和 PyPI 融合恶意包知识,且未捕捉恶意行为的序列性(恶意包通过一系列可疑活动完成攻击),导致检测效果受限,需一种能利用双语知识和序列行为的统一检测模型。

Method(s)

特征集与最先进的基于规则的方法MalOSS、无监督方法Garrett等人的工作和PPD、监督方法Amalfi和Ohm等人的工作进行比较。

在针对不同生态系统的恶意软件包知识没有得到充分利用这一局限性,作者将不同语言的恶意代码行为序列S转换为文本描述D,以促进双语知识融合。

作者用3.7万行python代码实现了Cerebro。 为了提取特征,我们使用tree-sitter[81]将Python和JavaScript代码转换为AST表示,并通过使用tree-sitter提供的AST查询匹配语法结构来识别可疑行为。 为了确定方法的优先级,我们还使用树坐姿器来解析每个源代码。 为了生成调用图,我们利用Python的PyCG[69]和JavaScript的Jelly[17, 52, 53, 55]。 在微调过程中,我们采用学习率为1e-6,批大小为1的Adam优化器。 该模型经过3个epoch的训练,以确保最佳的学习和性能。

Cerebro 包含三部分:

  1. 特征提取器:通过静态分析提取 16 种语言无关的静态特征(涵盖信息读取、数据传输等维度),支持跨生态知识融合;
  2. 行为序列生成器:按执行可能性(安装时 > 导入时 > 运行时)和调用图顺序,将特征组织为行为序列;
  3. 恶意分类器:将序列转为文本描述,微调 BERT 等预训练模型为二进制分类器。 实现:3.7K 行 Python 代码,用 tree-sitter 提取特征,PyCG/Jelly 生成调用图,Adam 优化器微调(学习率 1e-6,批大小 1,3 个 epoch)

Evaluation

setup:

硬件组件 具体配置
CPU Intel Xeon(R) Silver 4314(2.40GHz)
内存 128G RAM
显卡 NVIDIA GeForce RTX 3090
  • 评估方式:单语言、跨语言、双语言场景与现有方法对比;消融实验;实际部署检测新包。
  • 数据集:从Backstabber 's Knife Collection[59]中共收集到438个恶意PyPI包和1788个恶意NPM包。 我们从MalOSS的数据集[12]中添加了88个恶意PyPI包。 我们还从pypi_malregistry[89]中抽取了总共5,874个软件包中的361个
    • 2675 个恶意包(PyPI 887、NPM 1788)和 7391 个良性包(PyPI 2398、NPM 4993)
  • 关键结果:单语言场景精度超现有方法 10.0%、召回率 7.4%;双语言场景分别超 9.9%、8.9%;平均分析时间 10.5 秒;检测到 683 个 PyPI 和 799 个 NPM 新恶意包,获 707 封感谢信。
  • 问题:

Conclusion

  • 强结论:Cerebro 通过跨生态知识融合和序列行为建模,有效提升恶意包检测效果,优于现有方法,具有实际应用价值。
  • 弱结论:其在更多生态系统的适用性及假阳性优化需进一步验证。

Thought(s)

  • 疑问:如何进一步降低假阳性率?扩展至编译型语言的难度如何?
  • 不足与展望:仅支持 NPM 和 PyPI,受预训练模型 token 限制;未来计划扩展至更多语言,精确定位恶意序列,结合动态分析优化检测。

Notes

  • 现有研究可以分为:

    • 基于规则
      • 通常依赖于关于包元数据(例如,包名)以及可疑导入和方法调用的预定义规则。 它们往往会产生很高的误报,远远达不到实际需求
    • 无监督学习
      • 将恶意行为捕获为一组离散的特征。 他们忽视了恶意行为的顺序性,而恶意行为通常是由一系列可疑活动组成的,这阻碍了恶意行为的实际有效性。 此外,很多方法都是针对一个生态系统(即NPM或PyPI)设计和评估的。
    • 有监督学习

References

基于规则

(特征比较)

Ruian Duan, Omar Alrawi, Ranjita Pai Kasturi, Ryan Elder, Brendan Saltaformaggio, and Wenke Lee. 2020. Towards measuring supply chain attacks on package managers for interpreted languages. In Proceedings of27th Annual Network and Distributed System Security Symposium.

Microsoft. 2020. OSS Detect Backdoor. Retrieved May 30, 2023 from https://github.com/microsoft/OSSGadget/wiki/OSS-Detect-Backdoor

Matthew Taylor, Ruturaj Vaidya, Drew Davidson, Lorenzo De Carli, and Vaibhav Rastogi. 2020. Defending against package typosquatting. In Proceedings ofthe 14th International Conference on Network and System Security. 112–131.

Duc-Ly Vu. 2020. Bandit4Mal. Retrieved May 30, 2023 from https://github.com/lyvd/bandit4mal

Duc-Ly Vu, Ivan Pashchenko, Fabio Massacci, Henrik Plate, and Antonino Sabetta. 2020. Typosquatting and combosquatting attacks on the python ecosystem. In Proceedings ofthe 2020 2020 IEEE European Symposium on Security and PrivacyWorkshops. 509–514.

Nusrat Zahan, Thomas Zimmermann, Patrice Godefroid, Brendan Murphy, Chandra Maddila, and Laurie Williams. 2022. What are weak links in the npm supply chain?. In Proceedings ofthe 44th International Conference on Software Engineering: Software Engineering in Practice. 331–340.

无监督学习

(特征比较)

Kalil Garrett, Gabriel Ferreira, Limin Jia, Joshua Sunshine, and Christian Kästner. 2019. Detecting suspicious package updates. In Proceedings of the IEEE/ACM 41st International Conference on Software Engineering: New Ideas and Emerging Results. 13–16.

(特征比较)

Genpei Liang, Xiangyu Zhou, Qingyu Wang, Yutong Du, and Cheng Huang. 2021. Malicious Packages Lurking in User-Friendly Python Package Index. In Proceedings ofthe IEEE 20th International Conference on Trust, Security and Privacy in Computing and Communications. 606–613.

Marc Ohm, Lukas Kempf, Felix Boes, and Michael Meier. 2020. Supporting the detection of software supply chain attacks through unsupervised signature generation. arXiv preprint arXiv:2011.02235 (2020).

监督学习

Aurore Fass, Michael Backes, and Ben Stock. 2019. Jstap: A static pre-filter for malicious javascript detection. In Proceedings ofthe 35th Annual Computer Security Applications Conference. 257–269.

Aurore Fass, Robert P Krawczyk, Michael Backes, and Ben Stock. 2018. Jast: Fully syntactic detection of malicious (obfuscated) javascript. In Proceedings ofthe 15th International Conference on Detection ofIntrusions and Malware, and Vulnerability Assessment. 303–325.

Piergiorgio Ladisa, Serena Elisa Ponta, Nicola Ronzoni, Matias Martinez, and Olivier Barais. 2023. On the Feasibility of Cross-Language Detection of Malicious Packages in npm and PyPI. In Proceedings ofthe 39th Annual Computer Security Applications Conference. 71–82.

(特征比较)

Marc Ohm, Felix Boes, Christian Bungartz, and Michael Meier. 2022. On the feasibility of supervised machine learning for the detection of malicious software packages. In Proceedings ofthe 17th International Conference on Availability, Reliability and Security. 1–10.

(特征比较)

Adriana Sejfia and Max Schäfer. 2022. Practical automated detection of malicious npm packages. In Proceedings ofthe 44th International Conference on Software Engineering. 1681–1692.

Liang Wentao, Ling Xiang, Wu Jingzheng, Luo Tianyue, and Yanjun Wu. 2023. A Needle is an Outlier in a Haystack: Hunting Malicious PyPI Packages with Code Clustering. In Proceedings ofthe 38th IEEE/ACM International Conference on Automated Software Engineering.

攻击分类

Piergiorgio Ladisa, Henrik Plate, Matias Martinez, and Olivier Barais. 2023. SoK: Taxonomy of Attacks on Open-Source Software Supply Chains. In Proceedings ofthe 2023 IEEE Symposium on Security and Privacy. 1509–1526.

数据集来源

Guo Wenbo, Xu Zhengzi, Liu Chengwei, Huang Cheng, Fang Yong, and Liu Yang. 2023. An Empirical Study of Malicious Code In PyPI Ecosystem. In Proceedings ofthe 38th IEEE/ACM International Conference on Automated Software Engineering.