译者 | 原子武器果汁、Tina
加装两个扩充,就可能将被敲诈、被抹杀掉大部份标识符?这是吗。
Aqua Security 的研究相关人员用几项模拟,证明了递送假造 Visual Studio Code(VS Cod就很可能将引致十分大的危害性。
VS Code 是迄今最畅销的 IDE
VS Code 是现阶段亚洲地区最畅销的软件系统合作开发自然环境 (IDE), 依照StackOverflow的几项进行调查表明,现阶段有 74.48% 的合作开发者在使用它。
VS Code 的强悍之处是它包涵大批需用扩充,能协助合作开发者依照前述市场需求订制GUI。这些扩充常常源自GUI中内建的 VS Code Marketplace。合作开发者可以通过该市场间接在 VS Code 内搜寻和加装扩充。使用者一般会输出两个blo,比如“Rust”或“Svelte”,尔后得到两个回到的相匹配扩充条目,其中表明各扩充的浏览单次和使用者信用评级。
VS Code Marketplace 少于 40,000 个扩充,可协助开发相关人员更高效率地合作开发标识符、软件系统某一词汇的软件程序,甚至将钻孔布署到生产自然环境中。许多扩充的加装浏览数目十分大,比如,Jupyter 扩充有 52M 的下载量,Prettier 扩充有 27M,还有许多也已经少于 10M 。
Marketplace 中的炙手可热扩充
这无可避免地带出了两个难题:作为 VS Code 使用者,你是不是问过自己许多难题: VS Code 扩充与否值得称赞尊敬?怎样检查和扩充与否不合法?不过历史事实看似,即便对于具有安全可靠意识的合作开发者而言,界定蓄意和良性循环扩充也是两个考验。
构筑两个不安全可靠的扩充很难
VS Code 扩充可以实施各种各样的功能,有些扩充只是为了改变一下 IDE 的主题颜色。但大部份扩充都以打开 VS Code 而没有任何沙盒的使用者的权限运行,这意味着该扩充程序可以在使用者的计算机上加装任何程序,包括敲诈软件、抹除器等。
Aqua 研究相关人员宣称:“历史事实上,通过不安全可靠的扩充,黑客可以访问甚至更改合作开发者在本地拥有的是大部份标识符,甚至可以通过使用合作开发者的 SSH 密钥更改企业或组织在 GitHub 中大部份存储库中的标识符!这可能将会产生巨大的影响!”
VS Code 系统中也提供了好几项保护合作开发者免受蓄意扩充侵害的功能,首先,微软保证“对每个新扩充和每项扩充更新都运行病毒扫描。只有扫描完成、安全可靠无误,该扩充才会上架 Marketplace 供公众使用。”此外,微软还采取一系列措施来防止名称抢注——即发布者故意把名称跟知名方案混淆。合作开发者也可以观察扩充与否带有蓝色对号,这代表着发布者已通过网络域大部份权验证。
这些举措当然也都有效果,但 Aqua 研究相关人员宣称“对蓄意和良性循环扩充做正确界定颇有难度。”
针对这个结论,他们给出了以下理由:
任何人都可以利用新的一次性电子邮件地址,将自己注册为扩充发布者。扩充名称和发布者名称不必唯一,可以间接复制现有名称。在示例中,研究相关人员发布了两个名为 Pretier 的扩充,碰瓷的明显是 Marketplace 上的高人气标识符格式化插件 Prettier。发布者的蓝色对号仅代表其对域具备大部份权。研究相关人员强调,“发布者完全可以买下两个域名并填写注册,这样就能获得经过验证的对号标记。”浏览和评论肯定有指导意义,但这些东西同样可以假造。只要精心策划,拉高浏览量并不是难事。Aqua 团队已经发现 Marketplace 中存在几个可疑的 VSCode 扩充,比如“API Generator Plugin”和“code-tester”扩充。
“code-tester”内部标识符
这些扩充有可能将是标识符写得很糟糕,也有可能将是蓄意软件。安全可靠相关人员具体分析了“code-tester”的标识符。如截图所示,你可以看到该扩充在加装后和 VS Code 启动运行的时候会激活函数,向具有专用子域(“http://$[hostname].robotnowai.top/vscode”)的外部 URL 发送请求,该子域是你的服务器的主机名。一旦收到源自 URL 的响应,它就会使用 eval 函数执行响应数据。此请求每 30 秒发生一次。最重要的是,由于通信使用 HTTP 而不是 HTTPS,因此很难受到中间人攻击,从而允许其他不良行为者在使用此扩充时注入蓄意标识符。
另外,Aqua 团队为了验证制造“不良”扩充很难的结论,还模仿了两个流行扩充,引诱毫无戒心的合作开发者浏览它。
他们选择了流行的 VS Code 扩充 Prettier,仅仅是将发布者名称从 esbenp 变为了 espenp,扩充名从 prettier-vscode 变为了 pretier-vscode。当合作开发者无意中输出“ pretier ”时,假造的扩充是唯一的搜索结果。
Aqua 团队详细解释道,URL 中的微小变化,比如省略字母“t”或将“b”转换为“p”,称为域名仿冒 ( MITRE)。这是攻击者用来欺骗合作开发者的一种流行技术。许多注册管理机构反对这种技术,通常不允许使用者创建具有此类相似性的新包。依照 Microsoft 的指导网站,Microsoft 和 Red Hat 的官方扩充不受域名仿冒保护。在这种情况下,VS Code Marketplace 允许使用者为两个十分畅销的包创建两个模拟包。而且,加装数目和信用评级也是可以通过“在暗网中可以购买各种服务”进行操纵的。也就是说,不管项目有多大影响力,任何人都可以给它构筑两个伪装扩充,让越来越多的不知情使用者会浏览假扩充程序。
Aqua 团队并未模拟蓄意扩充可以通过微软的病毒检查和程序,但这个假冒版的 Prettier 仍在 48 小时内成功被加装了 1000 多次。假货之所以成功,就归功于它使用了常见的拼写错误。一旦合作开发者在搜索时稍不留神,就会加装成 Pretier 这款假造扩充。VS Code 扩充会以同等于使用者的权限运行,而两个真正的攻击者,绝对不会只有 48 小时的活动时间。
48 小时的加装数目
同样重要的是要注意 VS Code 扩充是用 Node 编写的,并且包是从 NPM 浏览的,将蓄意标识符包上传到 NPM 等包管理器的威胁也一直存在。而且,像 NPM 或 PyPi 这样的大型软件包仓库体量甚巨,已经不太可能将对每次提交都进行人工检查和。在这种自动化检查和的大背景下,蓄意扩充常常在前述发现乃至下架前,就已经被浏览了数千次。因此一旦加装蓄意扩充被加装在许多合作开发者的机器上,就会危及许多组织,其影响会十分大。当然,微软专门设置了“枪毙清单”,被列入其中的条目一经发现会被间接卸载。
许多朋友都知道软件包仓库中存在不良依赖项风险,但在合作开发插件这边则难掉以轻心。这可能将是因为前者的加装过程更明确,这样编程者稍加关注就更可能将发现难题。无论怎样,插件同样有可能将引发真实危害性,此次研究报告就凸显出了现有保护措施中的软肋所在。
参考链接:
https://devclass.com/2023/01/09/researchers-demonstrate-a-thousand-installs-of-fake-vs-code-extension-in-48-hours/?td=rt-3a
https://blog.aquasec.com/can-you-trust-your-vscode-extensions