原标题:
New npm timing attack could lead to supply chain attacks
原文链接:
据 Beepingcomputer 消息,安全研究人员发现了一种npm定时攻击,它会泄露私有软件包的名称,因此攻击者可以基于此公开发布恶意克隆软件包,以欺骗开发者使用它们。
该攻击的原理是利用在开发者搜索私有软件包时与库中的软件包相匹配时返回“404 Not Found”错误的微小时间差。虽然响应时间的差异只有几百毫秒,但这足以确定一个私有软件包是否存在,进而对包进行冒充。
企业为内部项目和某些软件产品创建私有软件包,以最大限度地减少其开发团队陷入错别字攻击的风险,并保密代码和功能。
企业让私有软件包一直处于私密状态是非常重要的,否则攻击者可以创建克隆或用有错别字的软件包以迷惑企业员工下载并在软件项目中使用它。如果开发者和内部软件测试人员没有发现这一纰漏,产品直达终端用户从而造成供应链的安全风险。
在一份由Aqua威胁研究团队出品的报告中指出,攻击者越来越关注软件供应链攻击,2021年针对软件供应链的攻击活动数量比往年翻了3倍。
定时攻击详情
npm包含了一个 registry API,它允许用户下载已存在的软件包,并检查包是否存在以及在特定范围内接收所有包的信息。当使用npm镜像仓库来下载不存在或者已经设为私密的软件包时,网站会返回一个 404 HTTP 的错误代码,这意味着无法找到软件包。
在npm中对一个API请求响应 404 Not Found
Aqua通过使用该API检查他们在npm上创建的私有软件包是否存在,并比较 404 HTTP 错误与API检查不存在的包的响应时间,从而发现了npm定时攻击。
研究人员通过检查5次某个软件包名称是否存在来进行测试。他们发现,npm响应请求所需的平均时间存在差异,这使他们能够分辨出一个软件包是私有的还是不存在的。具体而言,当私有软件包存在时其平均响应时间是648毫秒,而当其不存在时响应时间下降为101毫秒。
研究人员认为这是由于npm本身的缓存机制及API架构导致了这种信息泄露的可行性。
黑客可以尝试“全盲”字典式攻击,或者在目标组织的公开软件包中总结命名规律,以推导出可能的私有软件包名称。此外,在线信息中可能包含包的历史信息,所以攻击者可以利用它们来确定哪些公开包可能在后来会转为私密。
在后一种情况下,使用克隆包的潜在风险是较为隐蔽的,因为一个曾经公开的包的旧副本可能仍保留足够的功能,并依旧在软件产品中发挥作用。
GitHub 将不会修复这一问题
Aqua 曾于2022年3月向 GitHub 报告这一bug,但在3月25日时被告知由于架构限制将不会修复它。“由于架构所限,我们无法防止由于确定npm中是否存在特定私有软件包而产生的定时攻击”。
研究人员指出企业可以采取预防性措施,如经常在npm中检索可疑软件包,这些包常会以重复或相似的名字来迷惑开发人员。此外,由于npm不允许在公开的仓库中上传同名软件包,企业可以创建与私有包相似或重复名字的公开软件包来阻止恶意包的创建。
总而言之,维护软件供应链安全是一项复杂且极具挑战的工作,需要企业时刻关注软件开发各个阶段的安全。Seal 软件供应链防火墙为用户提供软件开发生命周期全阶段的端到端全局可视化,并且能快速识别和定位安全风险,根据漏洞严重等级评分确定修复优先级。