npm 新型定时攻击或导致软件供应链安全风险
原标题:
New npm timing attack could lead to supply chain attacks
原文链接:
https://www.bleepingcomputer.com/news/security/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 毫秒。
5 次请求的响应时间
研究人员认为这是由于 npm 本身的缓存机制及 API 架构导致了这种信息泄露的可行性。
黑客可以尝试“全盲”字典式攻击,或者在目标组织的公开软件包中总结命名规律,以推导出可能的私有软件包名称。此外,在线信息中可能包含包的历史信息,所以攻击者可以利用它们来确定哪些公开包可能在后来会转为私密。
在后一种情况下,使用克隆包的潜在风险是较为隐蔽的,因为一个曾经公开的包的旧副本可能仍保留足够的功能,并依旧在软件产品中发挥作用。
GitHub 将不会修复这一问题
Aqua 曾于 2022 年 3 月向 GitHub 报告这一 bug,但在 3 月 25 日时被告知由于架构限制将不会修复它。“由于架构所限,我们无法防止由于确定 npm 中是否存在特定私有软件包而产生的定时攻击”。
研究人员指出企业可以采取预防性措施,如经常在 npm 中检索可疑软件包,这些包常会以重复或相似的名字来迷惑开发人员。此外,由于 npm 不允许在公开的仓库中上传同名软件包,企业可以创建与私有包相似或重复名字的公开软件包来阻止恶意包的创建。
总而言之,维护软件供应链安全是一项复杂且极具挑战的工作,需要企业时刻关注软件开发各个阶段的安全。Seal 软件供应链防火墙为用户提供软件开发生命周期全阶段的端到端全局可视化,并且能快速识别和定位安全风险,根据漏洞严重等级评分确定修复优先级。
评论