当前位置: 首页 > 科技观察

不要与不受信任的访问者共享您的主文件夹

时间:2023-03-18 23:32:27 科技观察

本文是研究人员在Pwn2Own竞赛期间发现的ParallelsDesktop漏洞。ParallelsDesktop被称为macOS上最强大的虚拟机软件。无需重启电脑即可在Mac下同时模拟运行Win、Linux、Android等多种操作系统和软件,并可随意切换不同系统。最新版本的ParallelsDesktop16(PD16)完美支持最新的macOSBigSur,并专门针对Windows10进行了优化!无需重启Explorer、VisualStudio、AutoCAD等即可直接在Mac系统上运行Win10UWP通用应用、运行游戏、使用Office办公软件、IE浏览等Windows软件,新版PD16支持DirectX11,大幅提升启动速度和3D游戏图形性能!!绝对是Mac用户的必备神器。在Pwn2Own比赛期间搜索安全问题时,我注意到我的研究目标很奇怪:ParallelsDesktop将主机操作系统(MacOS)上的用户主目录作为Parallels共享文件夹共享给来宾操作系统*,这也是默认的,除非您选择退出并容忍虚拟化可用性问题。对于任何对基于Unix的操作系统(MacOS就是一个例子)和熟悉虚拟机管理程序的标准安全期望的人来说,这样的设计决策会立即引起怀疑,即判断任何软件供应商的设计做决定不是我的工作。让我们看看它是如何工作的?在以MacOS为例的所有基于Unix的操作系统上,从攻击者的角度来看,对用户主文件夹的写访问在理论上基本上是不可能的。虽然经典操作系统早已接受这一事实,并在必要时确保不使用特权,但管理程序必须以前所未有的新方式考虑其主机操作系统设计的细节。这里的第一个攻击向量是一个基本脚本,通常称为“bash配置文件”:配置文件是每个帐户的数据存储,例如电子商务网站的用户购物车数据。Profile是HttpContext类的一个属性,HttpContext类是ProfileBase类,继承自SettingsBase类。所谓Provider就是你可以定义Profile的存储方式。默认是将其存储在LocalServer数据库中。需要在不丢失数据的情况下重启网站,所以不能存入内存。当使用--login选项将bash作为交互式登录shell或非交互式shell调用时,它首先从/etc/profile文件(如果该文件存在)中读取并执行命令。读取该文件后,它会依次查找~/.bash_profile、~/.bash_login和~/.profile,并从第一个存在且可读的文件开始读取和执行命令。当shell开始禁止这种行为时,可以使用--noprofile选项。MacOSBigSur的manpage(全称Manualpage,是linux/unix环境下的命令和功能的帮助文档)对'bash'进行了详细的介绍。显然,在Linux上它提供了一个登录shell,但是MacOS呢?这里没有什么特别的:每次启动终端应用程序时都会执行已注册的交互式shell二进制文件,或者在执行时不可见其他进程。从MacOSBigSur的这段摘录中可以看出,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,MacOSBigSur的手册页对“zsh”有详细描述。结合使用,将恶意二进制文件放入共享主文件夹并从.zprofile或任何其他交互式shell配置文件调用它。每次启动终端时,二进制文件都会在主机操作系统上执行。这构成了一个用户交互的RCE*plus*持久化,并且在虚拟化上下文中,完全访问主机的虚拟机逃逸。请记住,不要忘记使用.dot文件名模式来隐藏ls的恶意内容。它必须与用户交互吗?不必要。从基于Unix的操作系统的经典和默认设置来看,Mac有一个位于用户主目录下的目录LaunchAgents,它本质上是一个启动文件夹。用户的应用程序可以通过在此处放置一个名为“.plist”的特殊格式的配置文件来注册自己以在启动时(或更具体地说,当用户登录时)运行。更多细节请参考苹果官方文档。请务必注意,交互式shell配置文件和LaunchAgents不会耗尽攻击者对用户主文件夹的选项。我注意到的另一件事是,一些软件进程(例如GoogleChrome的ksfetch更新程序二进制文件)可以直接从~/Library/缓存运行,它也可以被劫持以完全自动化地执行任意代码。这里的一般原则是,对用户主文件夹的写访问权本质上等同于可能在用户权限下执行二进制文件。概念验证这演示了在ParallelsDesktop16.5.0(M1和Intel)、安装了ParallelsTools的Ubuntu20.04来宾操作系统上完整的客户端到主机虚拟机持久性:cpmybinary/media/psf/Home/。hellochmod+x/media/psf/Home/.helloecho"~/.hello">>/media/psf/Home/.zprofile我的github上也反映了带有示例“恶意负载”的概念验证代码。请注意,它仅包含M1的预构建有效负载,如果您想在IntelMac上测试它,则需要重新构建。总结到目前为止,管理程序通常被认为至少在虚拟机和主机操作系统之间实施一些基本的安全边界和特权隔离。如果特定的管理程序产品或部署包含违反此假设的设计原则,则必须在启动虚拟机时明确警告用户,而不必寻找一些特殊的隐藏选项或文档。在用户方面,重要的是至少要知道破坏系统的最简单方法,最易受攻击的向量通常会被最具破坏性的恶意软件所利用。本文翻译自:https://zerodayengineering.com/blog/dont-share-your-home.html如有转载请注明出处。