标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2831] 作者: ecawen 发表于: [2021-02-13]
本文共 [526] 位读者顶过
一名研究人员在一次新颖的软件供应链攻击中成功闯入了超过35家大公司的内部系统,这些大公司包括微软,苹果,PayPal,Shopify,网飞,Yelp,特斯拉和优步等。
[出自:jiwo.org]
攻击过程包括将恶意软件上传到包括PyPI,npm和RubyGems内部的开源代码库,然后恶意软件自动向下游分布,进入到相应公司的内部应用软件中。
不像传统的蓄意错误拼写攻击依赖社会工程学手段或受害者拼写错误的错误名称,这种特殊的供应链攻击更为复杂,原因在于其根本不需要采取任何操作,受害者自动收到恶意贿赂。
这是由于攻击利用了开源生态系统中一种独特的设计缺陷,导致依赖取代(dependency confusion)。
由于科研道德研究工作,这名研究人员获得了超过13万美元的突破赏金。
恶意软件自动向下游分发
去年,安全研究人员Alex Birsan与另一名研究人员Justin Gardner合作时无意中产生了一个想法。
Gardner当时与Birsan共享了一个清单文件package.json,该清单文件来自PayPal内部使用的npm替代。
PayPal突破性的公共和私有(即内部开发)的依赖项
Birsan注意一些清单文件不会在公共npm代码库中,而是PayPal私下创建的npm复制,由该公司在内部使用和存储。
这位研究人员看到这一点后就想:要是名称相同的一部分之外存在于私有NodeJS代码库中外,还存在于公共npm代码库中,哪一个获得优先级?
为了检验这一假设,Birsan开始寻找在GitHub代码库或知名公司的CDN中的清单文件中可以找到,但并不存在于公共开源代码库中的专有内部冗余的名称。
然后,该研究人员开始在npm,PyPI和RubyGems之类的开源代码库上创建使用相同名称的假冒项目。
Birsan发布的每个副本都是在他的真实帐户下发布的,看上去附有,替换为“该唯一仅用于安全研究目的,不包含任何有用的代码。”
附有安全研究声明发布的双重
Birsan快速调整,如果应用程序使用的依赖项同时存在于公共开源代码库和专有代码库中,公共将获得优先级并被获取,无需开发人员采取任何操作。
在一些情况下,与PyPI扩展相同,研究人员注意:无论位于何处,更高版本的重叠都将获得优先级。
利用这种技术,Birsan立即发布使用与相应公司的内部名称相同的公共场所,就可以对微软,苹果,PayPal,Shopify,网飞,特斯拉,Yelp和优步实施成功的供应链攻击。
“我认为,依赖纠正与蓄意错误拼写或品牌劫持大不相同,因为它不一定需要来自受害者的任何一种手动输入。”
Birsan在电子邮件采访中告诉IT安全外媒Bleeping Computer:“相反,自动编译或安装工具中的突破或设计缺陷可能会导致公共依赖项被误认为是名称完全相同的内部依赖项。”
通过DNS进行的侦察和数据渗漏
这些冗余有preinstall(预安装)脚本:重新编译流程获取扩展,此类脚本就会自动启动脚本,从机器扩展并识别身份信息。
Birsan知道他的脚本会与公司网络建立连接,因此决定利用DNS来渗漏数据,避免被检测到。
Birsan在其博文中称:“知道大多数可能的目标都放置在精心保护的公司网络的内部,所以我认为DNS渗漏是有效的手法。”
DNS用于侦察和数据渗漏
下面显示的代码片段来自蓄意错误拼写的npm扩展“ analytics-paypal”,该分支从npm删除。而作为Sonatype的安全研究人员,我能够从我们的自动恶意软件检测系统中检索到它。
一旦“ analytics-paypal”依赖项被获取,该脚本就会自动启动,并包含向dns.alexbirsan-hacks-paypal.com发送DNS请求的代码。
从PayPal系统收到的每隔一段时间会警告研究人员:发出请求的IP属于PayPal,用户名和受感染系统的主目录也属于PayPal。
概念验证(PoC)骨折渗漏数据
Birsan一收到这种样本,并充分验证其假冒组件成功渗入到了公司网络,就向相应公司报告发现结果,从而领取突破赏金。
领到逾13万美元的赏金
这名研究人员通过突破悬赏计划和预先批准的渗透测试协议,共领到了逾13万美元的赏金。
Birsan警告:“我认为有必要纠正这一点,即在此研究过程中攻击的每一家组织都事先允许接受安全测试,或通过公共突破悬赏计划或通过私下协议。请不要在授权下的情况下尝试进行这种测试。”
Birsan披露后,微软向他发布了其突破悬赏计划的最高金额:4万美元,并发布了有关该安全问题的白皮书。
微软将影响其Azure Artifactory产品的这个问题标为CVE-2021-24105。
然而微软在电子邮件中告诉Birsan,他们认为这是双重管理器中的一个设计缺陷。
“虽然我们将其视作一个严重的安全问题,但最终只能通过重新配置安装工具和工作流程,而不是通过更正向代码库本身中的任何内容来修复该问题。”
“为解决该问题,微软对天蓝色文物进行了小幅改进,以确保可以作为一种可靠的变通方法。”
微软在电子邮件中说:“话虽如此,我们还是认为该问题的根本原因是多重管理器中的一个设计缺陷(而不是bug),只能通过重新配置才能解决。”
Yelp在发给BleepingComputer的声明中证实了该研究人员的报告,在一天之内打上补丁后对他给予了奖励。
“通过Yelp的突破悬赏计划,Alex Birsan帮助我们揪出了一个突破,我们立马在一天之内打上了补丁。”
Yelp发言人告诉BleepingComputer:“我们致力于与安全专家合作,密切关注最新的安全技术,并应对我们的突破悬赏计划来奖励技术娴熟的安全研究人员帮助改善Yelp的系统和服务。”
苹果告诉BleepingComputer,Birsan将因负责任地揭示该问题而获得苹果安全悬赏计划的奖励。
PayPal公开披露透露了Birsan在HackerOne上报告的内容,提到了3万美元的赏金。
然而,该研究人员的安全研究工作并没有得到所有人的接受。
Python软件基金会董事Dustin Ingram是谷歌开发倡导者,他经过一番调查后,从PyPI撤下了Birsan的几个分裂。他说:“我认为[这]可能导致将这些项目从PyPI上撤下。”
Ingram花了一个小时撤退这些额外的后扩展,将非法合并上传到PyPI上给自愿维护PyPI的人员带来了更多的负担。
Ingram进一步说:“最终,如果您有兴趣保护用户本身这种攻击,有更好的方法可以来保护整个生态系统,而不是保护冲突突破悬赏计划的仅仅几家组织。”
预计攻击会增加,这是很难解决的棘手问题
Birsan表示,通过针对该大公司的研究,他已经使这些知名度的科技公司称为这种攻击,现在它们已经在各自的基础架构中实施了某种缓解措施。发现更多的受害者。
这种攻击可能可能重新露面,越来越常见,尤其是在无法轻松解决依赖替代问题的开源平台上。
这位研究人员在博文中下摘要:“具体而言,我认为找到泄漏内部别名的新方法将会揭露更多易受攻击的系统,而深入研究要攻击的其他编程语言和代码库将为依赖突破性发现另外的某个攻击面。”
Sonatype已在GitHub上发布了一个脚本,Nexus存储库管理器用户可以运行该脚本,检查自己的任何私有依赖项是否以公共npm,RubyGems和PyPI代码库中存在的现有副本命名。提供其他工件(工件)代码库管理器的公司可能采用同样的实现方法。
BleepingComputer已预先联系了这里中提到的几家公司,包括微软,苹果,PayPal,Shopify,网飞,特斯拉,Yelp和优步。此处附有发稿前作出回应的几家公司的声明。
|