原文标题:Can You Trust Your VSCode Extensions? 翻译:梦幻的彼岸 你能信任你的VSCode扩展吗?Aqua Nautilus的研究人员最近发现,攻击者可以轻易地冒充流行的Visual Studio Code扩展,并欺骗不知情的开发人员下载这些扩展。在最初的漏洞研究中,我们发现了一种新的攻击方法,它可以作为攻击许多组织的一个入口。我们还发现,一些扩展程序可能已经在利用这个攻击载体。在本博客中,我们将进一步探讨我们的发现,包括我们上传到Marketplace的POC,并详细介绍我们如何进行这项研究。 VSCode最常用的IDEVisual Studio Code是一个非常流行的集成开发环境(IDE)。
VSCode的强大来自于它巨大的各种扩展。在VSCode Marketplace 上有超过4万个扩展,它们可以帮助你更有效地开发你的代码,集成特定语言的调试器,甚至可以将构件(artifact)部署到生产中。 备注:构件是软件开发的一个副产品。它是为了开发一个软件而创建的任何东西。这可能包括像数据模型、图表、设置脚本这样的东西--不胜枚举。 你可以通过安装的数量来了解VSCode扩展的受欢迎程度。例如,Jupyter扩展有5200万的安装量,Prettier扩展有2700万的安装量,还有很多扩展的安装量已经超过了1000万的门槛。 这不可避免地引出了另一个问题。作为一个VSCode用户,您是否曾问过自己VSCode扩展是否值得信赖?可能不会。但即使您有,您如何检查扩展是否合法? 答案是,即使是有安全意识的开发人员,区分恶意扩展和良性扩展也是一个挑战。当你考虑到任何人都可以创建一个用户,即使是使用临时电子邮件,事实是任何人都能发布一个可以在Marketplace中列出的扩展。 VSCode扩展的危险性你可能已经问过自己,VSCode扩展能做什么。有些只是改变IDE的主题颜色。然而,所有的扩展都以打开VSCode的用户的权限运行,没有任何沙盒。这意味着,该扩展可以在你的电脑上安装任何程序,包括勒索软件、恶意软件清除程序等等。事实上,它可以访问甚至改变你在本地的所有代码,甚至使用你的SSH密钥来改变你的组织在GitHub的所有存储库中的代码!这可能会产生影响。这可能产生的影响可能是巨大的。 介绍一个新的攻击媒介--恶意的VSCode扩展!?虽然媒体上有很多关于恶意软件包被上传到流行的软件包管理器(如NPM和PyPI)的故事,但关于恶意的VSCode扩展的信息却非常少。我们问自己,这是因为这种攻击媒介不太流行,还是安全社区完全忽略了它? 当在网上搜索恶意的VSCode扩展时,结果很少,而那些返回的查询是关于VSCode或其扩展的漏洞。在这一点上,我们应该强调,一个有漏洞的扩展不一定是一个恶意的。 冒充流行的扩展程序我们在这里的目标是阐明攻击者可以通过VSCode Marketplace使用的安全威胁。这种威胁之一是伪装(MITRE)。当有人创建了一个类似于另一个流行的扩展,唯一的目的是引诱毫无戒心的开发者下载一个伪装成其他东西的扩展。例如,我们选择了流行的VSCode扩展Prettier,并着手创建一个新的扩展,伪装成它。现在,让我们比较一下这些扩展之间的异同:
你能发现其中的差别吗?让我们仔细看一下页面的顶部。 正常:
伪装:如果我们仔细看看指向URL的#1,我们可以看到在发布者的名字(esbenp vs espenp)以及扩展的名字(prettier-vscode vs pretier-vscode)都有恰好两个不同之处。当你搜索Prettier扩展时,我们的冒充扩展出现在第26位,这构成了低风险。我们可能会通过提高下载率和星级来影响排名,但这仍有待商榷。尽管如此,当输入 "pretier "时(开发者很可能在无意中输入),我们的伪装扩展是唯一的结果。我们可以假设,这将给犯了这个错误的人带来很大的风险。
URL中的一个小变化,如省略一个字母 "t "或将 "b "转化为 "p",被称为 "错别字的引用"(MITRE)。这是攻击者用来欺骗开发者的一种流行技术。其他注册机构已经与这种技术进行了斗争,通常不允许用户创建具有这种相似性的新包。根据微软的指导方针网站,微软和红帽公司的官方扩展受到保护,不会出现错别字。然而,在这种情况下,VSCode Marketplace允许我们为一个高度流行的软件包创建一个冒充的软件包。这让我们怀疑VSCode Marketplace是否部署了类似的保护措施,如果没有,是否有空间部署这种保护措施,至少为了阻止攻击者伪装成流行的扩展。
在这一点上,我们希望把重点放在上述截图中的黄色背景的项目上。我们发现这些项目更有影响力。
在上面的截图中,2号标识了扩展的发布者的名字,而3号则标识了扩展的名称。令人惊讶的是,我们能够创建一个与一个高度流行的扩展完全相同的名称。这是被允许的,因为当创建一个新的扩展时,你在一个叫做'displayName'的属性下创建它,这是扩展的名字和发布者的名字,被显示在扩展的页面上。这些名称不需要是唯一的,因此,任何人都可以在这些名称下输入几乎任何想要的值。由于这一点,任何人都可以伪装成几乎任何扩展名!
此外,#4和#5分别确定了安装的数量和星级的数量。目前,这些数字是相当低的。然而,随着时间的推移,越来越多的不知情的用户将下载我们的假扩展。随着这些数字的增长,该扩展将获得可信度。此外,由于在暗网中可以购买各种服务,一个极其坚定的攻击者有可能通过购买服务来操纵这些数字,从而夸大下载量和星星的数量。
接下来,让我们放大到扩展的右下侧,再做一次比较:
6号标识了GitHub存储库中的扩展信息。令人惊讶的是,任何人都可以输入他想要的任何值,而不需要验证或确认这个扩展是否真的与注册表有联系。 7号标识的是 "更多信息 "部分。在这里,我们可以看到发布日期和最后更新日期。这一部分更难欺骗。最后,8号标识了你可以看到扩展的唯一标识符,这与上面的URL#1中显示的内容相似。 微软公布了关于如何决定一个VSCode扩展是否值得信任的指南:
然而,我们已经看到,一个匿名的注册用户可以轻易地声称他拥有GitHub上的任何项目。在他们的防御措施中,几乎所有的注册机构都缺乏这些保护措施。 不要让“验证(Verified)”这个词欺骗你VSCode Marketplace在作者的名字附近使用了一个蓝色的"√"形复选标记。在本节中,我们将讨论它所代表的内容与它的实际含义之间的区别。 通常情况下,我们已经开始期待一个带有蓝色复选标记的出版商意味着平台已经验证了该出版商实际上是他所声称的人。 然而,在Marketplace上,经过验证的蓝色复选标记仅仅意味着,无论发布者是谁,都已经证明了一个域名的所有权。这意味着任何域名。在现实中,发布者可以购买任何域名,并注册它以获得核实的复选标记。 让我们看一下Marketplace中如何显示的例子:
在这种情况下,显示了一个验证图标,但它出现在 "Sam McLeod "旁边,而 "Sam McLeod "是出版商的 "displayName "属性。如上文合法与恶意的比较所示,"Prettier "这个 "显示名称 "很容易被模仿。 如果一个攻击者获得了一个经过验证的发布者复选标记,将他的 "displayName "更新为 "Prettier",然后上传一个恶意的扩展,那该怎么办? 可能的答案是,即使是最警惕的开发者也会安装这个恶意的 "Prettier "扩展,更不用说最初的Prettier发布者esbenp并没有验证一个域名。 Marketplace中的恶意VSCode扩展程序在我们的研究中,我们发现有几个可疑的VSCode扩展驻扎在Marketplace上,尽管目前还不清楚这些扩展是否真的是由攻击者创建并上传到VSCode Marketplace,或者它们在创建时有一些不良的编码选择,导致有漏洞的代码。
在上面的截图中,你可以看到安装后和每次VSCode启动时运行的激活功能。在这个函数中,代码向一个外部URL发送请求,该URL有一个专门的子域("http://$[hostname].robotnowai.top/vscode"),是你服务器的主机名。一旦它收到来自URL的响应,它就使用eval函数执行响应数据。这个请求每30秒发生一次。除此之外,由于通信使用HTTP而不是HTTPS,它容易受到中间人的攻击,当使用这个扩展时,允许其他不良行为者注入恶意代码。 这些扩展已被报告给微软。 概念验证(POC)在我们发现上面的 "坏 "扩展既不高级也不包含伪装的尝试后,我们看到了Marketplace中伪装的潜在面,我们决定创建一个POC。 我们上传了一个POC扩展,如上图所示,伪装成Prettier,这是Marketplace上安装最多的十个扩展之一。它被设置为在每次安装时给我们一个PING。 安装的数量就在你的面前:
在短短的48小时内,我们得到了来自世界各地的活跃开发者的超过一千次的安装! 现在,想象一下一个真正的攻击者(这将使扩展有更多的时间活跃起来,从而获得更多的信誉),用一个真正的恶意扩展,安装在许多开发者身上,损害许多组织。这方面的影响是至关重要的。 总结和缓解措施归根结底,恶意的VSCode扩展的威胁是真实的。可以说,在过去,这并没有得到最高的关注,也许是因为我们还没有看到它留下巨大影响的活动。然而,攻击者正在不断努力扩大他们的技术库,使他们能够在组织的网络中运行恶意代码。作为研究人员,我们在这里揭示像这样的威胁,并提高社区对这些新的潜在进入点的认识。 同样重要的是要注意,VSCode扩展是用Node编写的,软件包从NPM下载。请记住,还存在着恶意代码包被上传到NPM等软件包管理器的持续威胁。因此,存在这样的实际风险:一个不知情的合法开发者可能在不知情的情况下使用NPM中的恶意包作为他的扩展的依赖,导致整个扩展被破坏,并在不知不觉中给社区带来风险。
除了VSCode扩展外,Marketplace还提供Visual Studio和Azure DevOps.的扩展。乍一看,它们也很容易被伪装的外观所欺骗。然而,在这一轮的研究中,我们并没有追求这些线索。 最后,我们已经展示了在短短几天内,我们是如何得到数以千计的冒充一个非常流行的选项的扩展的安装。像往常一样,对你安装的扩展保持警惕,并记住每个扩展都是以用户的权限运行的。
|