这篇文章是Pwn2Own比赛期间,研究人员发现的Parallels Desktop漏洞,Parallels Desktop 被称为 macOS 上最强大的虚拟机软件。可以在 Mac 下同时模拟运行 Win、Linux、Android 等多种操作系统及软件而不必重启电脑,并能在不同系统间随意切换。
最新版的 Parallels Desktop 16 (PD16) 完美支持最新的 macOS Big Sur 并对 Windows 10 特别优化!可不重启直接在 Mac 系统上运行 Win10 UWP 通用应用、运行游戏、使用 Windows 版软件如 Office 办公软件、IE 浏览器、VisualStudio、AutoCAD 等。新版 PD16 支持 DirectX 11,大幅提升了启动速度以及 3D 游戏图形性能!!绝对是 Mac 用户必备神器。
在Pwn2Own比赛期间,搜索有关安全性问题时,我注意到我的研究目标很奇怪:Parallels Desktop在主机操作系统(MacOS)上将用户的主目录作为Parallels 共享文件夹共享到Guest OS *,这也是默认的,除非你选择退出并容忍虚拟化可用性问题。对于任何稍微了解基于unix的操作系统(MacOS就是其中的一个实例)并熟悉管理程序的标准安全性期望的人来说,这样的设计决策会立即引起怀疑,也就是说,评判任何软件供应商的设计决策不是我的工作。让我们看看它是如何工作的?
在所有以MacOS为实例的基于Unix的操作系统上,从攻击者的角度来看,对用户主文件夹的写入访问本质上没有任何理论上的可能性。虽然经典的操作系统长期以来一直接受这个事实,并在必要时按着要求确保特权不被使用,但虚拟机管理程序必须以前所未有的新方式来考虑其主机操作系统设计细节。
这里的第一个攻击媒介是一个基本脚本,它通常被称为“bash Profile”:
Profile是针对每个帐户的数据存储,比如一个电子商务网站的用户购物车数据。Profile是HttpContext类的一个属性,是ProfileBase类,继承自SettingsBase类。所谓Provider,是你可以定义Profile如何存储,默认是存储在LocalServer数据库中,需要网站重启动不丢失数据,所以不能存在内存中。
当bash作为交互式登录shell或具有——login选项的非交互式shell调用时,它首先从/etc/profile文件中读取并执行命令(如果该文件存在的话)。读取该文件后,它将按此顺序查找~/.bash_profile, ~/.bash_login,和~/.profile,并从第一个存在且可读的命令中读取和执行命令。当shell开始禁止此行为时,可以使用——noprofile选项,MacOS Big Sur的man page(全称为Manual page,是linux /unix 环境下命令与函数的帮助文档)详细介绍了’bash’。
显然,在Linux上它提供了登录shell,但是MacOS呢?这里没有什么特别的:注册的交互式shell二进制文件在每次你启动终端应用程序时被执行或者其他一些进程在不可见的情况下为你执行。从MacOS Big Sur的摘录中可以看到,Mac上的交互式shell行为在配置文件读数方面完全符合Unix标准。
我们还知道MacOS在一段时间以前已经从bash切换到zsh作为默认的交互式shell,这毫不奇怪,因为它符合了类似的方式:
然后从$ZDOTDIR/.zshenv中读取命令,如果shell是登录shell,则从/etc/zprofile读取命令,然后从$ZDOTDIR/.zprofile读取命令。然后,如果shell是交互式的,则从/etc/zshrc读取命令,然后从$ZDOTDIR/.zshrc读取命令。最后,如果shell是一个登录shell,则读取/ etc / zlogin和$ ZDOTDIR / .zlogin,MacOS Big Sur的man page详细介绍了’zsh’。
合并来看就是,在共享的主文件夹中放置一个恶意二进制文件,并从.zprofile或任何其他交互式shell配置文件调用它。每次启动终端时,二进制文件将在主机操作系统上执行。这构成了一个用户交互的RCE *plus*持久性,并且在虚拟化上下文中,是一个完整的访问到主机的虚拟机转义。切记,不要忘记使用.dot文件名模式隐藏ls的恶意内容。
是否必须与用户互动?不一定。从基于Unix的操作系统的经典和默认设置出发,Mac有了一个位于用户主目录下的目录LaunchAgents,该目录本质上是一个启动文件夹。用户的应用程序可以通过在此处放置名为“ .plist”的特殊格式的配置文件来进行自我注册,以在启动时(或更具体地说,在用户登录时)运行。更多详细信息,请参阅Apple的官方文档。
需要注意的是,交互式shell配置文件和LaunchAgents不会耗尽攻击者对用户主文件夹的选项。另一件事是,我注意到一些软件进程(如谷歌Chrome的ksfetch updater二进制)可以直接从~/Library/ cache运行,这也可能被劫持为一个完全自动化的任意代码执行。这里的一般原则是,对用户主文件夹的编写访问本质上等同于以潜在的方式在用户权限下执行二进制文件。
概念验证
这在Parallels Desktop 16.5.0 (M1和Intel)上演示了一个完整的客户端到主机的虚拟机持久化,安装了Parallels Tools的Ubuntu 20.04客户操作系统:
cpmybinary/media/psf/Home/.hello chmod+x/media/psf/Home/.hello echo"~/.hello">>/media/psf/Home/.zprofile
带有示例“恶意载荷”的概念验证代码也镜像在我的github上。注意,它只包含M1的预构建有效载荷,如果你想在Intel Mac上对其进行测试,则需要对其进行重新构建。
总结
到目前为止,通常认为虚拟机管理程序至少强制执行虚拟机和主机操作系统之间的一些基本安全边界和特权隔离。如果某个特定的管理程序产品或部署包含违反这一假设的设计原则,则必须在启动虚拟机时明确警告用户,而不需要找出一些特殊的隐藏选项或文档说明。
在用户方面,重要的是至少要知道危害系统的最简单的方法,最容易受到攻击的媒介通常会被最具破坏性的恶意软件利用。
本文翻
转载请注明:IT运维空间 » 安全防护 » 请勿将主文件夹共享给不受信任的访问者
发表评论