Berburu kerentanan. Menjalankan kode arbitrer di mesin virtual NVIDIA GeForce NOW

pengantar



Dengan latar belakang pandemi virus corona, popularitas layanan cloud telah meningkat, memungkinkan Anda untuk bermain video game. Layanan ini menyediakan daya komputasi yang diperlukan untuk menjalankan game dan menyiarkan alur game ke perangkat pengguna secara real time. Keuntungan paling jelas dari sistem semacam itu adalah pemain tidak perlu memiliki perangkat keras yang kuat. Untuk memulai klien layanan dan melewatkan waktu untuk isolasi diri, mesin yang cukup murah akan cukup: semua perhitungan dilakukan di server jarak jauh.



Salah satu platform cloud tersebut adalah GeForce NOW dari NVIDIA. Menurut Google Trends, penelusuran di seluruh dunia untuk layanan ini mencapai puncaknya pada bulan Februari. Ini berkorelasi dengan permulaan pembatasan di banyak negara di Asia, Eropa, Amerika Utara dan Selatan, dan kawasan lain. Pada saat yang sama, untuk Rusia, di mana rezim isolasi diri dimulai kemudian, pada bulan Maret, kami melihat gambaran serupa, tetapi dengan penundaan yang sesuai.



Mengingat minat yang tinggi pada GeForce NOW, kami memutuskan untuk mempertimbangkan platform ini dari perspektif keamanan.



Menjelajahi platform



Pada saat penelitian kami, GeForce NOW tersedia dalam dua versi - gratis dan dengan berlangganan. Perbedaannya adalah ketika menggunakan layanan gratis, Anda harus menunggu hingga lingkungan virtual gratis tersedia. Dalam kasus opsi berbayar, mesin virtual dimulai dengan prioritas yang lebih tinggi, dan pemain biasanya tidak perlu menunggu. Dari segi keamanan, kedua versi layanan ini sama. Untuk setiap pelanggaran aturan penggunaan platform, runtime cloud segera dimatikan, dan akun pemain yang melanggar dapat diblokir.



Menu berisi daftar permainan yang didukung oleh layanan. Untuk bermain, kamu memerlukan akun dari salah satu toko konten digital yang game ini atau itu sudah ditautkan (jika berbayar, maka kamu harus membelinya terlebih dahulu). Dalam studi ini, kami melihat kombinasi GeForce NOW dan Steam store.



Saat Anda mengklik tombol "Putar" di jendela aplikasi utama, lingkungan virtual jarak jauh diluncurkan dan streaming secara real time dari sisi server ke perangkat pengguna.



Jika game yang dipilih telah dibeli, game tersebut akan berjalan dalam mode layar penuh dan fitur lain dari lingkungan virtual seharusnya tidak tersedia untuk pengguna. Namun, jika pengaturan gim memungkinkan Anda untuk memilih mode operasi berjendela di dalamnya, maka kami memiliki kesempatan untuk mengakses pustaka Steam. Cara lain untuk masuk ke dalamnya adalah dengan memilih game yang belum ada di perpustakaan.







Sudah jelas bahwa kami dapat mengeksekusi kode arbitrer jika kami mengeksploitasi kerentanan dalam game yang didukung oleh layanan tersebut. Satu-satunya batasan adalah bahwa exploit harus dikirimkan melalui jaringan. Berbagai skenario dimungkinkan di sini. Misalnya, jika exploit membuat executable pada disk, layanan secara teoritis dapat mencegah payload dijalankan dengan melacak pembuatan executable sebagai pengguna kios (ini adalah pengguna standar di mesin virtual layanan GeForce NOW). Di sisi lain, jika kode shell dijalankan sebagai akibat dari eksploitasi kerentanan, layanan tidak akan dapat mempertahankan dirinya sendiri.



Untuk melakukan eksplorasi penuh terhadap lingkungan lingkungan mesin virtual, kita tidak perlu memiliki akses ke cmd.exe atau powershell.exe. Tapi bagaimana Anda mendapatkannya? Setelah berkeliaran sedikit melalui menu pustaka Steam, kami menemukan cara yang memungkinkan Anda menjalankan file exe yang dapat dieksekusi sewenang-wenang yang sudah tersedia di sistem. Untuk ini kita akan menggunakan fungsi "Tambahkan game pihak ketiga ...".







Biasanya, menambahkan cmd.exe ke pustaka sebagai game pihak ketiga tidak akan menjadi masalah. Namun, fitur ini dinonaktifkan di GeForce NOW, dan mengklik tombol Browse pada gambar di bawah tidak melakukan apa-apa. Meskipun demikian, Anda dapat memilih salah satu aplikasi yang ada (dan pada saat yang sama melihat program apa yang diinstal di dalam mesin virtual). Misalnya, pilih pengarsip 7-Zip (program lain juga bagus).







Setelah menambahkan 7-Zip ke pustaka Steam, parameter program dapat diubah. Di sini kami memperbaiki jalur ke file cmd.exe yang kami butuhkan. Selesai! Kami meluncurkan "permainan" pihak ketiga kami dan mendapatkan shell yang berfungsi:







Sekarang kami dapat melihat-lihat dan mencari tahu di mana kami berada. Launch winver:







Ternyata, mesin virtual layanan berjalan di Windows Server 2019.



Sebagai hasilnya, kita sudah dapat melakukan apa yang tidak disediakan secara default untuk mesin virtual GeForce NOW. Tapi apa lagi yang bisa kita lakukan, dan seberapa berbahayanya?



Menurut FAQ di halaman Pelaporan Kerentanan NVIDIA, mendapatkan akses ke cmd.exe di GeForce NOW Service VM bukanlah kerentanan. Ini karena fakta bahwa dalam lingkungan virtual pengguna memiliki hak minimal, dan ada juga pemfilteran aplikasi yang diluncurkan. Jadi, misalnya, setelah menjalankan powershell.exe, runtime akan segera berhenti.



Jadi, agar penelitian kita dianggap serius, kita perlu menyelesaikan dua masalah:



1) mengirimkan payload ke mesin virtual,

2) menjalankannya dengan melewati daftar putih aplikasi.



Dalam proses memecahkan masalah pertama, kami mencoba LOLBIN populer untuk diunduh, seperti regsvr32, bitsadmin, dll. Dalam semua kasus, mesin virtual mengalami gangguan:







Tapi keputusan itu datang dengan sendirinya. GeForce NOW adalah layanan untuk game (termasuk multipemain) di mana klien game dapat terhubung ke server game dan mengunduh suara, model, peta, dan file lain dari sana. Oleh karena itu, kita perlu memilih game yang akan mengirimkan file arbitrer ke klien. Pada saat yang sama, kami tidak perlu khawatir tentang ekstensi file, karena kami memiliki akses ke shell, dan kami dapat memindahkan file yang diunduh ke tempat kami dapat menggunakannya.



Tapi bagaimana dengan daftar putih aplikasi? Lagipula, bahkan jika kita berhasil memasukkan aplikasi pihak ketiga ke dalam mesin virtual, saat dijalankan akan macet. Salah satu solusi untuk masalah ini adalah menemukan aplikasi dari daftar tepercaya, di mana kami dapat menerapkan pembajakan dll. Tujuan paling jelas adalah gameplaynya.



Jadi, mari kita coba mengimplementasikan ide ini menggunakan contoh Counter-Strike: Source (selanjutnya kita akan menyingkatnya menjadi CS: S). Hal pertama yang kita lakukan adalah membuat server CS: S kita sendiri, yang akan menyajikan file dll dengan kedok, katakanlah, model (d.mdl). Selanjutnya, kami meluncurkan GeForce NOW untuk memainkan CS: S dan pergi ke server kami, dari mana file "model" yang telah disiapkan sebelumnya dimuat ke mesin virtual. Sekarang kami meminimalkan permainan dan menjalankan cmd.exe. Pindahkan file d.mdl ke "Counter-Strike Source / bin / user32.dll" dan mulai ulang game dengan perintah konsol. Berhasil: Kami mengeksekusi kode arbitrer dalam konteks proses tepercaya.



Dan mereka bahkan merekam video:







Kesimpulan



Terlepas dari kenyataan bahwa serangan terhadap pengguna layanan berpotensi terjadi, hal itu masih kecil kemungkinannya. Selain itu, risiko bagi pengguna layanan lainnya akan minimal. Faktanya adalah bahwa untuk setiap sesi permainan baru, lingkungan virtual yang bersih diluncurkan di GeForce NOW. Setelah pemain menyelesaikan sesi, mesin virtual akan dimatikan dan "disetel ulang". Oleh karena itu, meskipun kerentanan berhasil dieksploitasi, kode berbahaya hanya dapat berfungsi selama mesin virtual yang disusupi sedang berjalan. Dan untuk menyerang pengguna lain, penyerang harus keluar dari lingkungan virtual menggunakan exploit seperti Virtual machine escape. Eksploitasi semacam itu jarang dan sulit diterapkan. Tetapi jika berhasil, bukan hanya pengguna individu yang berisiko, tetapi semua orangyang meluncurkan sesi permainan setelah gangguan awal pada layanan melalui salah satu mesin virtual GeForce NOW.



Namun, skenario serangan yang lebih sederhana dan lebih realistis adalah dengan menggunakan mesin virtual yang dikompromikan untuk menambang cryptocurrency, melakukan serangan DDoS, dan melakukan aktivitas ilegal lainnya yang memerlukan daya komputasi.



Setelah kontak kami, NVIDIA mengonfirmasi masalah dan merilis perbaikan untuk layanan mereka.



Kronologi peristiwa:



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