寻找漏洞。在NVIDIA GeForce NOW虚拟机上执行任意代码

介绍



在冠状病毒大流行的背景下,云服务的普及度提高了,您可以玩视频游戏。这些服务提供了运行游戏并向用户设备实时广播游戏玩法所需的计算能力。这种系统最明显的优点是播放器不需要强大的硬件。要启动服务客户端并花费时间进行自我隔离,完全预算的机器就足够了:所有计算都在远程服务器上进行。



NVIDIA的GeForce NOW是这样的云平台之一。根据Google趋势,该服务的全球搜索量在2月达到顶峰。这与亚洲,欧洲,北美和南美以及其他地区的许多国家开始实施限制措施有关。同时,对于俄罗斯,自隔离制度后来开始的三月,我们看到了类似的情况,但有相应的延迟。



鉴于对GeForce NOW的高度关注,我们决定从安全角度考虑该平台。



探索平台



在我们进行研究时,GeForce NOW有两个版本-免费版和订阅版。它们的区别在于,当免费使用该服务时,您必须等到免费的虚拟环境可用为止。对于付费选项,虚拟机以更高的优先级启动,并且播放器通常不需要等待。在安全性方面,服务的两个版本都相同。对于任何违反使用平台规则的行为,云运行时将立即关闭,并且可能会阻止冒犯游戏者的帐户。



菜单包含服务支持的游戏列表。要玩游戏,您需要一个或多个已经与此游戏相关联的数字内容商店中的一个帐户(如果已付费,则需要提前购买)。在这项研究中,我们正在研究GeForce NOW和Steam商店捆绑包。



当您在主应用程序窗口中单击“播放”按钮时,将启动一个远程虚拟环境,并从服务器端实时流向用户设备。



如果所选游戏已经购买,它将在全屏模式下运行,并且虚拟环境的其他功能对用户不可用。但是,如果游戏设置允许您选择窗口操作模式,那么我们就有机会访问Steam库。进入游戏的另一种方法是选择一个不在图书馆中的游戏。







已经很清楚,如果我们利用服务支持的游戏中的漏洞,就可以执行任意代码。唯一的限制是该漏洞必须通过网络传递。此处可能有各种情况。例如,如果漏洞利用在磁盘上创建了一个可执行模块,则该服务理论上可以通过代表自助服务终端用户(这是GeForce NOW服务虚拟机中的标准用户)跟踪可执行文件的创建,从而阻止有效负载执行。另一方面,如果由于利用漏洞而执行了shellcode,则该服务将无法防御自身。



要对虚拟机环境进行全面探索,我们不需要访问cmd.exe或powershell.exe。但是你怎么得到的呢?在Steam库的菜单中徘徊了一点之后,我们找到了一种方法,可以让您运行系统中已经可用的任意可执行exe文件。为此,我们将使用“添加第三方游戏...”功能。







通常,将cmd.exe作为第三方游戏添加到库中不会有问题。但是,此功能已在GeForce NOW中禁用,并且单击下面的屏幕快照中的“浏览”按钮没有任何作用。不过,您可以选择现有的应用程序之一(同时查看虚拟机的肠道中安装了哪些程序)。例如,让我们选择7-Zip存档器(其他程序也很棒)。







将7-Zip添加到Steam库后,可以更改程序参数。在这里,我们将路径固定为所需的cmd.exe文件。做完了!我们启动第三方“游戏”并获得有效的外壳程序:







现在,我们可以环顾四周,找出自己的位置。启动winver:







事实证明,服务虚拟机在Windows Server 2019上运行。



因此,我们已经可以执行GeForce NOW虚拟机默认未提供的操作。但是我们还能做些什么,这将有多危险?



根据NVIDIA Vulnerability Reporting页面上的FAQ,在GeForce NOW Service VM中获得对cmd.exe的访问不是漏洞。这是由于以下事实:在虚拟环境中,用户具有最少的权限,并且还对启动的应用程序进行了过滤。因此,例如,在启动powershell.exe之后,运行时将立即停止。



因此,要认真对待我们的研究,我们需要解决两个问题:



1)将有效负载交付给虚拟机,

2)绕过应用程序白名单运行它。



在解决第一个问题的过程中,我们尝试下载流行的LOLBIN(例如regsvr32,bitsadmin等)。在所有情况下,虚拟机均崩溃:







但是这个决定本身就来了。 GeForce NOW是一款适用于游戏(包括多人游戏)的服务,其中游戏客户端可以连接到游戏服务器并从那里下载声音,模型,地图和其他文件。因此,我们需要选择一款可以将任意文件交付给客户端的游戏。同时,我们无需担心文件扩展名,因为我们可以访问外壳程序,并且可以将下载的文件移动到可以使用它的位置。



但是应用白名单呢?毕竟,即使我们设法将第三方应用程序放入虚拟机中,启动时也会崩溃。解决此问题的方法之一是从受信任列表中找到一个应用程序,对此我们可以实施dll劫持。最明显的目标是游戏性。



因此,让我们尝试使用Counter-Strike:Source(以下简称为CS:S)示例来实现此想法。我们要做的第一件事是创建我们自己的CS:S服务器,它将以模型(d.mdl)为幌子提供一个dll文件。接下来,我们启动GeForce NOW播放CS:S并转到我们的服务器,先前准备好的“模型”文件从该服务器加载到虚拟机上。现在,我们最小化游戏并运行cmd.exe。将d.mdl文件移到“ Counter-Strike Source / bin / user32.dll”,然后使用控制台命令重新启动游戏。成功:我们在受信任的过程中运行了任意代码。



他们甚至录制了一个视频:







结论



尽管有可能攻击服务用户,但仍然不太可能。此外,服务其他用户的风险也将降至最低。事实是,对于每个新的游戏会话,GeForce NOW都会启动一个干净的虚拟环境。播放器结束会话后,虚拟机将关闭并“重置”。因此,即使漏洞被成功利用,只要受感染的虚拟机正在运行,恶意代码也将只能起作用。为了攻击其他用户,攻击者将需要使用诸如虚拟机转义之类的漏洞来脱离虚拟环境。这种漏洞很少见且难以实施。但是,如果成功的话,不仅个人用户受到威胁,每个人在最初通过GeForce NOW虚拟机对服务进行入侵之后,他启动了游戏会话。



但是,一种更简单,更现实的攻击方案是使用受损的虚拟机来挖掘加密货币,进行DDoS攻击以及执行其他需要计算能力的非法活动。



与我们联系后,NVIDIA确认了问题并发布了针对其服务的修复程序。



事件的年代:



18.04.2020 — NVIDIA

20.04.2020 — NVIDIA PSIRT

13.05.2020 — NVIDIA PSIRT ,

21.08.2020 — NVIDIA PSIRT , 30.08

02.09.2020 —

03.09.2020 — NVIDIA

04.09.2020 — NVIDIA

07.09.2020 — .



All Articles