脆弱性を探します。NVIDIA GeForceNOW仮想マシンで任意のコードを実行する

前書き



コロナウイルスの大流行を背景に、クラウドサービスの人気が高まり、ビデオゲームをプレイできるようになりました。これらのサービスは、ゲームを実行し、ゲームプレイをユーザーのデバイスにリアルタイムでブロードキャストするために必要なコンピューティングパワーを提供します。このようなシステムの最も明らかな利点は、プレーヤーが強力なハードウェアを持っている必要がないことです。サービスクライアントを起動して自己分離の時間を渡すには、かなりの予算のマシンで十分です。すべての計算はリモートサーバーで行われます。



そのようなクラウドプラットフォームの1つは、NVIDIAのGeForceNOWです。Google Trendsによると、このサービスの世界的な検索は2月にピークに達しました。これは、アジア、ヨーロッパ、南北アメリカ、およびその他の地域の多くの国での制限の開始と相関しています。同時に、自己隔離体制が後に始まったロシアについても、3月に同様の状況が見られますが、それに応じて遅れが生じています。



GeForce NOWへの関心が高いことから、セキュリティの観点からこのプラットフォームを検討することにしました。



プラットフォームの探索



私たちの調査の時点で、GeForceNOWは2つのバージョンで利用可能でした-無料とサブスクリプションによる。それらの違いは、サービスを無料で使用する場合、無料の仮想環境が利用可能になるまで待たなければならないことです。有料オプションの場合、仮想マシンはより高い優先度で起動し、プレーヤーは通常待つ必要はありません。セキュリティの観点から、サービスの両方のバージョンは同じです。プラットフォームの使用規則に違反した場合、クラウドランタイムはすぐにオフになり、問題のゲーマーのアカウントがブロックされる可能性があります。



メニューには、サービスでサポートされているゲームのリストが含まれています。プレイするには、このゲームまたはそのゲームがすでにリンクされているデジタルコンテンツストアの1つからのアカウントが必要です(有料の場合は、事前に購入する必要があります)。この調査では、GeForceNOWとSteamストアバンドルを検討しています。



メインアプリケーションウィンドウの[再生]ボタンをクリックすると、リモート仮想環境が起動し、サーバー側からユーザーのデバイスにリアルタイムでストリーミングされます。



選択したゲームがすでに購入されている場合、そのゲームは全画面モードで実行され、仮想環境の他の機能をユーザーが利用できないようにする必要があります。ただし、ゲーム設定でウィンドウ操作モードを選択できる場合は、Steamライブラリにアクセスする機会があります。それに入る別の方法は、まだライブラリにないゲームを選択することです。







サービスでサポートされているゲームの脆弱性を悪用すれば、任意のコードを実行できることはすでに明らかです。唯一の制限は、エクスプロイトをネットワーク経由で配信する必要があることです。ここではさまざまなシナリオが可能です。たとえば、エクスプロイトがディスク上に実行可能ファイルを作成する場合、サービスは、キオスクユーザー(これはGeForce NOWサービス仮想マシンの標準ユーザー)として実行可能ファイルの作成をトレースすることにより、理論的にはペイロードの実行を防ぐことができます。一方、脆弱性を悪用した結果としてシェルコードが実行された場合、サービスはそれ自体を防御できなくなります。



仮想マシン環境の環境を完全に調査するために、cmd.exeまたはpowershell.exeにアクセスする必要はありません。しかし、どうやってそれを手に入れますか? Steamライブラリのメニューを少し見て回った後、システムですでに利用可能な任意の実行可能なexeファイルを実行できる方法を見つけました。このために、「サードパーティのゲームを追加...」機能を使用します。







通常、サードパーティのゲームとしてcmd.exeをライブラリに追加しても問題はありません。ただし、この機能はGeForce NOWでは無効になっており、下のスクリーンショットの[参照]ボタンをクリックしても何も起こりません。それでも、既存のアプリケーションの1つを選択できます(同時に、仮想マシンの腸にインストールされているプログラムを確認できます)。たとえば、7-Zipアーカイバーを選択しましょう(他のプログラムも素晴らしいです)。







Steamライブラリに7-Zipを追加した後、プログラムパラメータを変更できます。ここで、必要なcmd.exeファイルへのパスを修正します。完了しました。サードパーティの「ゲーム」を起動し、動作するシェルを取得します。







これで、周りを見回して、自分がどこにいるかを見つけることができます。 winverの起動:結局のところ







、サービス仮想マシンはWindows Server 2019で実行されています。



その結果、GeForceNOW仮想マシンにデフォルトで提供されていないことをすでに実行できます。しかし、他に何ができるでしょうか、そしてそれはどれほど危険でしょうか?



NVIDIA Vulnerability ReportingページのFAQによると、GeForce NOW ServiceVMでcmd.exeにアクセスすることは脆弱性ではありません。これは、仮想環境ではユーザーの権限が最小限であり、起動されたアプリケーションのフィルタリングも行われるためです。したがって、たとえば、powershell.exeを開始すると、ランタイムはすぐに停止します。



したがって、私たちの研究を真剣に受け止めるには、2つの問題を解決する必要があります



。1)仮想マシンにペイロードを配信する、

2)アプリケーションのホワイトリストをバイパスして実行する。



最初の問題を解決する過程で、ダウンロード用に人気のあるLOLBIN、たとえば、ق32、bitsadminなどを試しました。すべての場合で、仮想マシンがクラッシュしました。







しかし、決定はそれ自体で行われました。 GeForce NOWは、ゲームクライアントがゲームサーバーに接続し、そこからサウンド、モデル、マップ、その他のファイルをダウンロードできるゲーム(マルチプレイヤーを含む)向けのサービスです。したがって、任意のファイルをクライアントに配信するゲームを選択する必要があります。同時に、シェルにアクセスできるため、ファイルの拡張子を気にする必要がなく、ダウンロードしたファイルを使用できる場所に移動できます。



しかし、アプリのホワイトリストはどうですか?結局のところ、サードパーティのアプリケーションを仮想マシンに配置できたとしても、起動するとクラッシュします。この問題の解決策の1つは、信頼できるリストからdllハイジャックを実装できるアプリケーションを見つけることです。最も明白な目標はゲームプレイです。



それでは、Counter-Strike:Source(以下、CS:Sと略します)の例を使用して、このアイデアを実装してみましょう。最初に行うことは、独自のCS:Sサーバーを作成することです。これは、たとえばモデル(d.mdl)を装ってdllファイルを提供します。次に、GeForce NOWを起動してCS:Sを再生し、サーバーに移動します。サーバーから、事前に準備した「モデル」ファイルが仮想マシンにロードされます。次に、ゲームを最小化し、cmd.exeを実行します。d.mdlファイルを「Counter-StrikeSource / bin / user32.dll」に移動し、consoleコマンドでゲームを再起動します。成功:信頼できるプロセスのコンテキストで任意のコードを実行しました。



そして彼らはビデオさえ記録しました:







結論



サービスユーザーへの攻撃は潜在的に可能であるという事実にもかかわらず、それらはまだありそうにありません。さらに、サービスの他のユーザーのリスクは最小限に抑えられます。事実、新しいゲームセッションごとに、クリーンな仮想環境がGeForceNOWで起動されます。プレーヤーがセッションを終了すると、仮想マシンがシャットダウンされ、「リセット」されます。したがって、脆弱性が正常に悪用された場合でも、悪意のあるコードは、侵害された仮想マシンが実行されている間のみ機能します。また、他のユーザーを攻撃するには、攻撃者は仮想マシンエスケープなどのエクスプロイトを使用して仮想環境から抜け出す必要があります。このような悪用はまれであり、実装が困難です。しかし、成功した場合、危険にさらされるのは個々のユーザーだけでなく、すべてのユーザーですGeForce NOW仮想マシンの1つを介してサービスが最初に侵害された後、ゲームセッションを開始しました。



ただし、より単純で現実的な攻撃シナリオは、侵害された仮想マシンを使用して暗号通貨をマイニングし、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