-
-
[翻译]你能信任你的VSCode扩展吗?
-
发表于: 2023-1-10 10:24 7339
-
原文地址:https://blog.aquasec.com/can-you-trust-your-vscode-extensions
原文标题:Can You Trust Your VSCode Extensions?
翻译:梦幻的彼岸
Aqua Nautilus的研究人员最近发现,攻击者可以轻易地冒充流行的Visual Studio Code扩展,并欺骗不知情的开发人员下载这些扩展。在最初的漏洞研究中,我们发现了一种新的攻击方法,它可以作为攻击许多组织的一个入口。我们还发现,一些扩展程序可能已经在利用这个攻击载体。在本博客中,我们将进一步探讨我们的发现,包括我们上传到Marketplace的POC,并详细介绍我们如何进行这项研究。
Visual Studio Code是一个非常流行的集成开发环境(IDE)。
有多受欢迎?根据StackOverflow,的调查,VSCode是迄今为止需求量最大的IDE,有74.48%的开发者使用它。
VSCode的强大来自于它巨大的各种扩展。在VSCode Marketplace 上有超过4万个扩展,它们可以帮助你更有效地开发你的代码,集成特定语言的调试器,甚至可以将构件(artifact)部署到生产中。
备注:构件是软件开发的一个副产品。它是为了开发一个软件而创建的任何东西。这可能包括像数据模型、图表、设置脚本这样的东西--不胜枚举。
你可以通过安装的数量来了解VSCode扩展的受欢迎程度。例如,Jupyter扩展有5200万的安装量,Prettier扩展有2700万的安装量,还有很多扩展的安装量已经超过了1000万的门槛。
这不可避免地引出了另一个问题。作为一个VSCode用户,您是否曾问过自己VSCode扩展是否值得信赖?可能不会。但即使您有,您如何检查扩展是否合法?
答案是,即使是有安全意识的开发人员,区分恶意扩展和良性扩展也是一个挑战。当你考虑到任何人都可以创建一个用户,即使是使用临时电子邮件,事实是任何人都能发布一个可以在Marketplace中列出的扩展。
你可能已经问过自己,VSCode扩展能做什么。有些只是改变IDE的主题颜色。然而,所有的扩展都以打开VSCode的用户的权限运行,没有任何沙盒。这意味着,该扩展可以在你的电脑上安装任何程序,包括勒索软件、恶意软件清除程序等等。事实上,它可以访问甚至改变你在本地的所有代码,甚至使用你的SSH密钥来改变你的组织在GitHub的所有存储库中的代码!这可能会产生影响。这可能产生的影响可能是巨大的。
虽然媒体上有很多关于恶意软件包被上传到流行的软件包管理器(如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存储库中的扩展信息。令人惊讶的是,任何人都可以输入他想要的任何值,而不需要验证或确认这个扩展是否真的与注册表有联系。
赞赏
- [原创]物联网安全:基础篇 4099
- 威胁情报小课堂:阻止活跃勒索软件的感染 2165
- [翻译]发现利用 Facebook 和 MS 管理控制台实施的 Kimsuky APT 攻击 7041
- 威胁情报小课堂:LockBit Black 2041
- 威胁情报小课堂:Nitrogen 2067