原文作者:Nusrat Zahan, Thomas Zimmermann, Patrice Godefroid, Brendan Murphy, Chandra Maddila, Laurie Williams
原文标题:What are Weak Links in the npm Supply Chain?
原文链接:https://arxiv.org/pdf/2112.10165.pdf
原文来源:ICSE2022
笔记作者:Mini@SecQuan
文章小编:bight@SecQuan
1. 介绍
现代软件开发经常使用第三方软件包,引起了人们对供应链安全攻击的关注。许多攻击者以流行的包管理器(如npm)及其用户为目标,实施供应链攻击。2021年通过利用开源软件的供应链,安全攻击同比增长了650%。所以需要积极主动的方法来预测高风险供应链攻击中的包脆弱性。本文的目标是通过实证研究NPM包的元数据,帮助软件开发者和安全专家测量npm供应链薄弱环节信号,以防止未来的供应链攻击。
本文中,作者分析了163万JS的NPM包的元数据。作者提出了软件供应链中安全弱点的六个信号,例如存在安装脚本、过期电子邮件域相关的维护人员账户,以及具有不活跃维护人员的不活跃软件包。一个案例研究,从安装脚本信号中识别出了11个恶意软件包。同时研究发现2818个过期域相关的维护者电子邮件地址,允许攻击者通过接管npm帐户劫持8494个包。作者从开发人员中获得反馈,大多数开发人员支持所提出的六个弱链接信号中的三个。开发人员还表示,他们希望在使用第三方软件包之前得到有关弱链接信号的通知。此外,作者还讨论了包开发人员建议的新信号。
在本文研究中,作者认为,如果一个信号可以使软件包面临更高的供应链攻击风险,并且攻击者可以利用该信号执行供应链攻击,那么便将该信号定义为薄弱环节。
2. 论文主要成果
-
作者提出了六个薄弱环节信号,其中三个以及经过了470名的NPM机组维护人员的调查,并确认为强信号 -
调查参与者建议了八个新的薄弱环节信号
3. 薄弱环节信号
作者提出了六种薄弱环节信号
-
维护者域名过期:如果维护者的域过期,并且没有在其账户上设置2FA身份验证,则攻击者可以劫持其组件
-
在NPM注册表中,攻击者可以执行更简单的方法来劫持电子邮件地址。攻击者可以在域注册站点中跟踪维护者的域。如果域以及过期并且可以出售,攻击者可以注册并且更改DNS的“邮件交换”(MX)记录,来劫持维护者的电子邮件地址。在大多数情况下,维护者的账户和包注册表中的电子邮件地址是相关联的。可以通过电子邮件地址直接充值NPM账户,除非维护人员激活2FA身份验证或在用户账户中使用不同的电子邮件地址 -
作者从每个package.json文件中提取并存储了维护者的名字和电子邮件地址。我们发现有2818个维护者的域名可供出售,可以购买。这些维护人员在npm注册表中拥有8494个软件包,在过去12个月内,平均直接依赖于2.43个软件包,平均下载量为53K -
安装脚本:攻击者可以使用安装脚本运行通过包安装步骤执行的恶意行为的命令
-
攻击者可以窃取用户敏感数据或执行新的子进程来创建后门访问或获得远程执行一系列命令的访问权限。此外,攻击者可以渗透第三方的依赖关系,因为目标软件包以及其用户在安装过程中自动的运行该安装脚本。虽然安装脚本本身并不是直接的恶意表现,但自动运行的权限使安装脚本成为供应链中的薄弱环节信号。即使是npm registry也建议避免安装脚本-“不要使用安装…您几乎不必显式设置预安装或安装脚本”。虽然通过安装脚本进行此类攻击的证据并不罕见,但未来很可能会发生攻击 -
我们发现2.2%(33249)的软件包使用安装脚本,这表明97.8%的软件包可能遵循npm的建议。此外,作者从npm收集了3,635个恶意的packages.json文件。我们发现93.9%(3412)的恶意软件包至少有一个安装脚本,这表明恶意攻击者经常使用安装脚本。从作者的研究中,他们发现攻击者经常使用的四种类型的攻击模式:发送用户数据、下载恶意工具并运行、反弹Shell、删除目录 -
未维护软件包:攻击者可以针对攻击那些由于缺乏维护而更有可能掌控并且植入恶意软件的软件包。
-
即使包自身可能没有需要维护,但由于依赖关系中存在的安全问题,它仍可能需要维护,或者使用新的语法来提高性能、修复bug或者改进文档。2020年开源项目中修复安全问题的平均时间为68天,NPM包中有66%的安全漏洞仍未修补。因此,修复未维护包中的安全问题所需的时间仍然是未知的。 -
作者发现发现58.7%的软件包和44.3%的维护人员在npm注册表中处于非活动状态。还有5532个不推荐使用的软件包,其中不推荐使用的日期超过了作者所建议的阈值(近两年未更新) -
太多的维护者:一个包含太多维护人员的包将为攻击者提供许多攻击目标,以利用帐户接管和社会工程攻击
-
开源软件的开放性以及npm没有强制实施双因素身份验证,使得维护者的安全帐户更难得到保证。经验表明,拥有更多的开发人员的项目通常会存在着更多的漏洞。自攻击以来,当前版本的维护人员比以前少。虽然作者还不清楚攻击者是如何破坏维护者的帐户的,但已经观察到了攻击解决后维护者数据所发生的变化 -
NPM中,维护人员的数量可能会更少,150万个NPM包的平均有1.7名维护者。作者选择了NPM中按维护人员总数排名的前1%的包。作者发现,他们选择的1%的包中,平均每个包有32.4个维护者,这是整个注册表中平均包维护者的19倍。 -
太多的参与者:当维护人员对许多的参与者负责时,攻击者可以绕过维护人员的警惕来植入恶意代码。
-
以前的研究表明,当多个参与者更改一个文件时,该文件更可能会出现更多的问题,其中包括安全问题。如果维护者没有足够重视审视参与者的请求,包的质量将不可避免地受到影响。攻击者可以将具有多个参与者的包作为目标,在这些包中,攻击者可以进行社会工程以成为受信任的参与者,然后来植入恶意的代码 -
作者研究发现,选定的1%(389)软件包的平均维护者与参与者的比率为1:40,是平均比率的60倍 -
维护者超负荷:攻击者可能把拥有多个包的维护人员当作目标,因为维护人员可能没有足够的的时间来维护所有包的安全性
-
具有以下几个特征的维护者超负荷属于薄弱环节:有大量的依赖;在包中使用较大的依赖链,攻击者可以在依赖中注入恶意代码;如果这些维护者有不活跃的包,攻击者就可以尝试控制这些包 -
作者发现48.2%的维护者拥有多个包,而只有24.8%拥有下游用户。作者再次挑选了按最高维护人员覆盖率排名前1%的包,来了解极端情况。最终发现,前1%的维护者平均拥有180.3个包,直接依赖4010个软件包
4. 从业人员所提出的新信号
-
所有权转移或添加新的维护人员:包维护人员列表中的任何突然变化都被认为是从业者的薄弱环节
-
维护者的身份:从业人员就维护人员专业知识和身份验证在供应链中的作用发表了评论。那些拥有真实图片、组织背景和电子邮件地址、链接的社交媒体或存储库、与其他维护人员合作的历史的维护人员将使得这些维护人员比任何新的维护人员更可靠
-
维护者双重身份验证:在维护人员发布包的时候,2FA应该作为一种强制措施
5. 限制
作者认为所提出的这些薄弱环节信号并不只是唯一应该考虑的因素。从业者所提出的其他的一些薄弱环节信号表明,还需要对此进行进一步的研究。此外作者对后三个薄弱环节并没有进行有效的评估,因为没有足够的数据来验证,只是基于直觉。为了解决这一个点,未来作者可以尝试收集和利用其他维护者的元数据,包括提交的历史记录、漏洞修复、和维护者更替等。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com
原文始发于微信公众号(安全学术圈):NPM供应链的薄弱环节是什么?