NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

VS Code 有多么不安全:一个扩展就可能导致公司 GitHub 中的所有代码被擦除?

  • 2023-01-10
    北京
  • 本文字数:2637 字

    阅读完需:约 9 分钟

VS Code有多么不安全:一个扩展就可能导致公司GitHub中的所有代码被擦除?

安装一个扩展,就可能被勒索、被擦除掉所有代码?这是真的。

 

Aqua Security 的研究人员用一项演示,证明了分发伪造 Visual Studio Code(VS Code)扩展有多么简单。他们将这些实际来自不受信来源的扩展,伪装成了看似合法的流行插件,48 小时内成功被安装了 1000 多次。而 VS Code 扩展会以同等于用户的权限运行,一旦安装了“恶意”扩展,就很可能造成非常大的危害。

 

VS Code 是迄今为止最受欢迎的 IDE

 

VS Code 是目前全球最受欢迎的集成开发环境 (IDE), 根据StackOverflow的一项调查显示,目前有 74.48% 的开发人员在使用它。

 

VS Code 的强大之处在于它包含大量可用扩展,能帮助开发人员根据实际需求定制编辑器。这些扩展往往来自编辑器中内置的 VS Code Marketplace。开发人员可以通过该市场直接在 VS Code 内查找和安装扩展。用户一般会输入一个搜索词,例如“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

2023-01-10 16:038431

评论

发布
暂无评论
发现更多内容

手把手教你免费获取正版 Jetbrains 全家桶 License

郭旭东

ide JetBrains

社区团购大战升级:零售行业再次面临挑战

石头IT视角

基于LiteOS Studio零成本学习LiteOS物联网操作系统

华为云开发者联盟

操作系统 物联网 华为云

LeetCode题解:429. N叉树的层序遍历,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

海淀区政府携手百度,打造数字政务时代新门户

DT极客

网络入门模拟器:Cisco Packet Tracer 实验教程

关于敏捷开发的最佳实践和工具

PingCode

程序人生 敏捷开发 研发管理 管理工具 开发平台

喜大普奔,FL Studio终于出官方中文版了!

懒得勤快

编曲 编曲宿主 mid flstudio 汉化

工作日志:一文总结HBase从搭建到实操,大家一起进步

小Q

大数据 学习 编程 面试 HBase

SpringBoot魔法堂:应用热部署实践与原理浅析

设计原则 框架 spring Boot Starter

Mybatis是如何解析配置文件的?

田维常

mybatis

聚焦LS-MIMO的四大层面,浅谈5G关键技术

华为云开发者联盟

华为 5G 华为云

如何在软件发布计划中自动化语义化版本与变更日志

华为云开发者联盟

自动化 工具 发布

盘点 2020 | 坚持写技术博客一年能有多少收获!

小傅哥

Java 小傅哥 技术人 盘点2020

《构建高性能WEB站点》.pdf

田维常

架构

我叫你不要重试,你非得重试。这下玩坏了吧?

比伯

Java 编程 架构 面试 程序人生

你只修改了2行代码,为什么需要两天时间?

Java架构师迁哥

终于有人通过笔记+脑图+视频的模式把Spring源码讲明白了

Java架构追梦

Java 学习 架构 面试 spring源码

XMEX交易所系统软件开发|XMEX交易所APP开发

系统开发

即构SDK12月迭代:新增多项质量回调,互动白板、云录制SDK同步更新

ZEGO即构

公安一体化警务系统搭建,微警务APP开发

t13823115967

App 智慧公安

破51项国际榜单纪录!解读华为云擎天架构调度求解引擎

华为云开发者联盟

华为 架构 华为云

有了Git这个功能,再也不需要依赖IDE了!

编程 架构

快来!开源一份阿里微服务指导手册:springBoot+springCloud+MQ

小Q

学习 面试 微服务 MQ SpringCloud

Athena雅典娜交易所系统开发|Athena雅典娜交易所软件APP开发

系统开发

没弄懂这些Java基础,简历上千万别写熟悉:异常+反射+注解+泛型

小Q

Java 学习 编程 面试 基础

终于学完了阿里云大数据架构师推荐的Flink入门与实战PDF

小Q

大数据 flink 学习 编程 面试

阿里三面惨遭被虐,spring,jvm,mybatis,并发编程等一窍不通

Java架构之路

Java 程序员 架构 面试 编程语言

一鼓作气学会“一致性哈希”,就靠这 18 张图了

四猿外

分布式 算法 一致性哈希 一致性Hash算法 哈希算法

数据上链,区块链技术平台搭建

t13823115967

数据上链 区块链应用

一个改变世界的“箱子”

阿里巴巴云原生

Docker 阿里云 容器 云原生 k8s

VS Code有多么不安全:一个扩展就可能导致公司GitHub中的所有代码被擦除?_安全_核子可乐_InfoQ精选文章