最近,趋势科技的研究人员分析了几种可被滥用来攻击供应链的攻击载体的概念证明,其中一种便是针对开发者的供应链攻击,该证明重点关注了本地集成开发环境(IDE),考虑当项目或生成被错误地“信任”时,通过注入命令执行恶意生成脚本的情况 。
在本文中,我们将关注供应链的一个特定部分——开发者本身 。要找到针对开发者的合适攻击模型,我们必须首先了解谁是开发者、他们的工作流程和日常工具 。我们还将重点放在开发者和他们各自的工具如何被滥用来破坏供应链 。
文章插图
谁是“开发者”?
按照字面理解,将开发者定义为开发计算机软件的人 。在安全研究人员的理解中,则是写代码的人 。这包括流行的编程或脚本语言,如JAVA、JavaScript、TypeScript、Go、Python/ target=_blank class=infotextkey>Python、C/ c++和许多其他语言,包括基础设施或容器部署定义,如Dockerfile、Kube.NETes、Terraform HCL等 。仅从这个描述来看,该定义就涵盖了IT行业的各个部分,包括编写代码的每个人、安全研究人员等等 。
尽管工作流本身可能因开发者和公司的不同而有所不同,但根据开发者如何使用集成开发者环境(IDE),它很可能属于以下类别之一:
1.本地IDE:开发者在自己的设备上本地安装了IDE 。在这种情况下,开发者有两个选择:
1.1将代码拉入或推送到远程存储库,并在本地执行生成和调试;
1.2将更改提交到远程存储库,触发持续集成/持续交付(CI/CD)事件,并导致质量保证(QA)评估,甚至部署到生产环境中 。
2.云IDE:开发者使用云服务托管的IDE,如AWS Cloud9、Visual Studio Online、GitHub代码空间和许多其他当今可用的平台 。在这种情况下,开发者设备就像网关一样工作,通常通过浏览器访问IDE,主要的代码执行是在云服务提供者内部的云IDE的远程主机中执行的 。
由于开发者涵盖多个职业,一些工作流可能会从列表中排除一些项目 。例如,本文的概念证明很可能不会建立一个完整的CI/CD管道 。然而,大多数工作流将包括使用IDE进行开发 。在这篇文章中,我们将重点放在本地IDE上 。
文章插图
本地IDE的示例
当使用本地IDE时,其中一个示例是开发者将代码拉到本地计算机上 。该代码被进一步编译为二进制格式,以便执行 。对以前的贡献者编写的代码有一种隐含的信任,因为大多数开发者认为代码库可能不会被污染,因为它可以按预期工作 。这种信任不仅存在于源代码本身中,还存在于生成脚本、库、依赖项和其他项目文件中 。这就引出了第一个攻击场景:将恶意操作注入到项目文件或生成脚本中 。
作为开发者,在执行远程代码之前,是否有必要在拉入远程代码之后阅读生成脚本?
研究人员通过向生成脚本或项目文件注入恶意生成命令(如果适用的话)来测试各种流行的IDE和编程语言 。以下是测试的IDE版本的结果:
Eclipse 2022-09Apache NetBeans 16PyCharm 2022.2.4IntelliJ IDEA 2022.03Visual Studio 2022Visual Studio Code 1.73.1
当我们考虑通用攻击模型时,还必须包括每个非受控输入 。这包括源代码及其文件,并包括生成前和生成后脚本和IDE扩展(如果适用的话) 。我们之前在2020年的一篇文章中写过可能存在恶意IDE扩展的危险 。
文章插图
IDE攻击模型
我们为每个IDE定义了以下场景,以验证可能的攻击模型:
开发者在线从不受信任的存储库中拉入代码;
开发者在IDE中打开一个项目;
开发者试图编译或生成项目;
文章插图
使用Visual Studio代码
从Visual Studio Code 1.57版(2021年5月发布)开始,代码编辑器引入了Workspace Trust的概念 。此功能通过防止代码从不受信任的文件和存储库执行,帮助开发者安全地浏览和编辑代码,而不考虑源代码或作者 。这可能是由于当时第三方扩展漏洞的数量不断增加,当被滥用时,在打开不受信任的文件时,可能会允许远程代码执行(RCE) 。这个概念很简单:除非工作区是可信的,否则它不允许任何(生成/调试)任务或某些扩展功能运行 。这就可以将责任转移到开发者身上,并提示他们是否要信任下载的代码 。
推荐阅读
- 干货| 如何实现VLAN间的通信
- RotaJakiro 双头龙,一个至少潜伏了3年的后门木马
- 运维工程师必知的十项Linux常识
- TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化
- 答案是什么?ChatGPT和谷歌的搜索之战
- ChatGPT爆火, 是AI的“狂飙”吗
- 初学者轻松学习 JavaScript 的路线图
- 一键恢复和重装系统的区别是什么
- 如何区分市面上的液晶显示屏?找到最适合你的液晶显示屏!
- 可以提高 ssh 安全性的几个配置
