Visual Studio Code(VSCode),一款由微软发布的源代码编辑器,受到了全球许多专业软件开发者的喜爱——然而近日,一组国外研究团队宣称:他们仅在 30 分钟内,开发了一个“山寨” VSCode 扩展程序,并成功黑进了多家市值数十亿美元的公司。
“明明我们正处于安全应用和环境的顶峰,但 30 分钟就能绕过最复杂的安全环境。”
该研究团队不公开“受害者”的具体名称,但透露其中包括一家市值 4830 亿美元的上市公司、多家大型安全公司和某个国家司法法院。
“三个热爱安全和产品开发的人”,为解决问题而做实验
在进入正题前,有一点需要明确:该研究团队做这个实验,是为了发现并解决问题,并不是真正的黑客,也没有造成实质性伤害。
该研究团队由三个人组成,即 Amit Assaraf、Itay Kruk 和 Idan Dardikman,他们自诩是“三个热爱安全和产品开发的人”。在探索网络安全领域时,他们偶然发现了一篇在 VSCode 扩展中发现漏洞的媒体文章。据悉,这个恶意扩展伪装成了另一个被广泛使用、较为知名的扩展,即通过容易混淆的名字欺骗用户安装,以窃取开发者设备上的信息。
对此事进行研究后,该研究团队发现有许多文章都提到了在 VSCode 扩展和其他集成开发环境中均存在类似漏洞,但他们却找不到解决这个问题的相关方法。其背后理由也很好理解:
(1)对于大型安全公司来说,这个问题太小不值得关注;
(2)对于初创安全公司来说,这个市场太小,无法建立自己的业务;
(3)对于微软本身来说,这也不是一个高度优先的问题,甚至还可能有悖于其利益:他们肯定希望市场上能有尽可能多的扩展,若上传过程中与开发者摩擦太多,不利于市场的快速扩大。
“那么,谁来为这个问题提供解决方案呢?三个热爱安全和产品开发的人。”
在这样的背景下, Amit Assaraf、Itay Kruk 和 Idan Dardikman 三人决定进行一个实验:创建一个恶意 VSCode 扩展,看看用它来窃取源代码并将其发送到远程服务器有多难。
与正版 Dracula 极为相似的山寨版“Darcula”
开始构建前,这三人想到了之前看过的一篇文章,其中提到在一个山寨扩展中发现了恶意代码,而该扩展盗用了一个名为“Prettier - Code formatter”的主流 VSCode 扩展的名字。
受此启发,他们决定做一个“Dracula Official”的山寨版——“Darcula Officia”(字母 r 和 a 颠倒了位置)。
据了解,正版 Dracula 是一个广受欢迎的开源主题,专为喜欢暗色界面的开发者设计。其暗色模式具有高对比度的色调,视觉上非常吸引人,还有助于减少长时间编码过程中的眼睛疲劳,因此被大量开发人员使用,在 VSCode Marketplace(微软为 VSCode 运营的一个扩展市场)上的安装量甚至已超过 700 万。
(正版 Dracula 的安装页面)
瞄准好“山寨”目标后,该研究团队就在 30 分钟内下载了正版 Dracula 源代码、额外添加了部分代码并复制了所有资源后,得到了下面这个山寨版“Darcula Officia”——乍一看,与正版毫无区别。
(山寨版 Darcula 的安装页面)
除了下载页面高度相似,该研究团队还特别注册了一个与官方 draculatheme.com 类似的域名:darculatheme.com。令他们感到意外的是,想要成为 VSCode Marketplace 上的验证发布者,也只需验证域名。
于是不过几分钟后,这个山寨版 Darcula 就通过了 VSCode Marketplace 的验证,可信度瞬间提高。
不仅如此,他们发现在 package.json 中添加任何 Github repo 都能让微软将其列为扩展页面上的官方 repo,即使不是该 repo 作者也行。因此,该团队进一步在山寨版 Darcula 上添加了正版 Dracula 的官方 repo,使其可信度再度提升。
山寨版 Darcula 竟登上了热门趋势!
既然山寨版 Darcula 的可信度已经有了,接下来就是添加恶意代码了。
上文提到,该研究团队向这个扩展中“额外添加了部分代码”,这实际上是一个附加脚本,用于收集系统信息,还会通过 HTTPS POST 请求将其发送到远程服务器:“简而言之,每次受害者在编辑器上打开文档时,我们都能读取代码并将其发送到我们的 Retool 服务器,此外还会向我们的服务器发送一个信标,其中包含主机信息,如主机名、域名、平台、扩展数量等。”
下面是他们添加到该扩展中的部分具体代码:
可能会有人质疑,这样的恶意代码不会被端点检测和响应(EDR)工具标记吗?研究人员表示:不会的,因为 VSCode 作为开发和测试系统,因此在这方面受到了宽大处理。
“不幸的是,传统的端点安全工具(EDR)无法检测到这种恶意活动。VSCode 的构建是为了读取大量文件、执行许多命令并创建子进程,因此 EDR 无法了解 VSCode 的活动是合法的开发者活动还是恶意扩展。”
一切准备就绪,他们便把这个山寨版 Darcula 进行了发布。它在 VSCode Marketplace 刚上线不过几分钟,就迎来了第一位“受害者”:
一天之后,该研究团队并没有特别为此进行推广,但还是又多了 100 多名不同的“受害者”。另外,或许是由于发布者经过验证,在 VSCode Marketplace 搜索“Darcula”时,该扩展显示在第一页。
没想到,几天后这个“受害者”规模愈发庞大。该研究团队确认,有一家市值 4830 亿美元的上市公司落入陷阱,还有数十家市值数十亿美元的公司、全球最大的安全公司之一以及某个国家的司法法院都出现在了“受害者”名单中——为了保护各方利益,研究团队选择不透露公司名称。
更离谱的是,他们最后发现,这个山寨版 Darcula 竟还一度登上了 VSCode Marketplace 的热门趋势!
微软尚未对此进行回应
在亲身经历了创建和发布恶意扩展有多么容易之后,该研究团队自己都感到意外:“当开始这个实验时,我们从未想象过它最终会发展成这样。事后看来,这种攻击载体的风险和高影响潜力显而易见,也凸显了它对攻击者的巨大价值。”
这样的结果,让他们意识到了这个实验的意义重大,由此深入研究了一番 VSCode Marketplace 中恶意扩展的现状,并发现了以下情况:
● 1283 个带有已知恶意代码(共计 2.29 亿次安装)。
● 8161 个与硬编码 IP 地址通信。
● 1452 个运行未知可执行文件。
● 2304 个使用另一个发布者的 Github repo,说明它们是山寨版。
究其原因,是因为微软在 VSCode 市场上缺乏严格的控制和代码审查机制,使得攻击者可以肆无忌惮地滥用平台规则。可以预见的是,随着该平台的使用越来越多,未来情况将愈发糟糕。
研究人员警告称,从数字上可以看出,VSCode Marketplace 中存在大量会给企业带来风险的扩展程序:“VSCode 扩展是一种被滥用和暴露的垂直攻击,具有零可见性、高影响和高风险。这个问题对企业构成了直接威胁,值得安全界关注。”
目前,该研究团队已把检测到的所有恶意扩展都报告给微软,并详述了当前 VSCode Marketplace 存在的巨大安全设计缺陷。不过截至发稿,绝大多数扩展仍可通过 VSCode Marketplace 下载,微软方面也尚未对加强安全审查的要求作出回应。
参考链接:
https://medium.com/@amitassaraf/the-story-of-extensiontotal-how-we-hacked-the-vscode-marketplace-5c6e66a0e9d7
https://www.bleepingcomputer.com/news/security/malicious-vscode-extensions-with-millions-of-installs-discovered/amp/
推荐阅读: