Retbleed adalah serangan baru terhadap mekanisme eksekusi spekulatif CPU Intel dan AMD

Sekelompok peneliti dari ETH Zurich telah mengidentifikasi serangan baru terhadap mekanisme eksekusi spekulatif transisi tidak langsung di CPU, yang memungkinkan untuk mengekstrak informasi dari memori kernel atau mengatur serangan terhadap sistem host dari mesin virtual. Kerentanan tersebut diberi nama kode Retbleed (CVE-2022-29900, CVE-2022-29901) dan mirip dengan serangan Spectre-v2. Perbedaannya terletak pada pengorganisasian eksekusi spekulatif kode arbitrer saat memproses instruksi "ret" (return), yang mengambil alamat untuk melompat dari tumpukan, alih-alih lompatan tidak langsung menggunakan instruksi "jmp", memuat alamat dari memori atau register CPU.

Penyerang dapat menciptakan kondisi untuk prediksi transisi yang salah dan mengatur transisi spekulatif yang ditargetkan ke blok kode yang tidak disediakan oleh logika eksekusi program. Pada akhirnya, prosesor akan menentukan bahwa prediksi cabang tidak dibenarkan dan akan mengembalikan operasi ke keadaan semula, namun data yang diproses selama eksekusi spekulatif akan berakhir di cache dan buffer mikroarsitektur. Jika blok yang dieksekusi secara salah mengakses memori, maka eksekusi spekulatifnya akan menyebabkan data yang dibaca dari memori disimpan dalam cache bersama.

Untuk menentukan data yang tersisa di cache setelah operasi spekulatif, penyerang dapat menggunakan teknik saluran samping untuk menentukan data sisa, seperti menganalisis perubahan waktu akses ke data yang di-cache dan tidak di-cache. Untuk mengekstrak informasi dengan sengaja dari area dengan tingkat hak istimewa lain (misalnya, dari memori kernel), "gadget" digunakan - urutan perintah yang ada di kernel yang cocok untuk membaca data dari memori secara spekulatif tergantung pada kondisi eksternal yang dapat dipengaruhi oleh penyerang.

Untuk melindungi terhadap serangan kelas Spectre klasik yang menggunakan instruksi lompatan bersyarat dan tidak langsung, sebagian besar sistem operasi menggunakan teknik “retpoline”, yang didasarkan pada penggantian operasi lompatan tidak langsung dengan instruksi “ret”, yang mana prosesor menggunakan unit prediksi keadaan tumpukan terpisah. .tidak menggunakan blok prediksi cabang. Ketika retpoline diperkenalkan pada tahun 2018, diyakini bahwa manipulasi alamat seperti Spectre tidak praktis untuk percabangan spekulatif menggunakan instruksi “ret”.

Para peneliti yang mengembangkan metode serangan Retbleed menunjukkan kemungkinan menciptakan kondisi mikroarsitektur untuk memulai transisi spekulatif menggunakan instruksi “ret” dan menerbitkan alat siap pakai untuk mengidentifikasi urutan instruksi (gadget) yang cocok untuk mengeksploitasi kerentanan di kernel Linux, di mana kondisi seperti itu terwujud.

Selama penelitian, eksploitasi kerja telah disiapkan yang memungkinkan, pada sistem dengan CPU Intel, untuk mengekstrak data sewenang-wenang dari memori kernel dari proses tanpa hak istimewa di ruang pengguna dengan kecepatan 219 byte per detik dan akurasi 98%. Pada prosesor AMD, efisiensi eksploitasi jauh lebih tinggi—tingkat kebocorannya adalah 3.9 KB per detik. Sebagai contoh praktis, kami menunjukkan cara menggunakan eksploitasi yang diusulkan untuk menentukan konten file /etc/shadow. Pada sistem dengan CPU Intel, serangan untuk menentukan hash kata sandi pengguna root dilakukan dalam 28 menit, dan pada sistem dengan CPU AMD - dalam 6 menit.

Serangan tersebut telah dikonfirmasi untuk prosesor Intel generasi 6-8 yang dirilis sebelum Q3 2019 (termasuk Skylake), dan prosesor AMD berdasarkan mikroarsitektur Zen 1, Zen 1+, dan Zen 2 yang dirilis sebelum Q2021 3. Pada model prosesor yang lebih baru seperti AMD ZenXNUMX dan Intel Alder Lake, serta pada prosesor ARM, masalahnya diblokir oleh mekanisme perlindungan yang ada. Misalnya, penggunaan instruksi IBRS (Indirect Branch Restricted Speculation) membantu melindungi dari serangan.

Serangkaian perubahan telah disiapkan untuk kernel Linux dan hypervisor Xen, yang akan memblokir masalah perangkat lunak pada CPU lama. Patch yang diusulkan untuk kernel Linux mengubah 68 file, menambahkan 1783 baris, dan menghapus 387 baris. Sayangnya, perlindungan menyebabkan biaya overhead yang signifikan - menurut teks yang dilakukan pada prosesor AMD dan Intel, penurunan kinerja diperkirakan dari 14% menjadi 39%. Lebih baik menggunakan perlindungan berdasarkan instruksi IBRS, tersedia di CPU Intel generasi baru dan didukung mulai dari kernel Linux 4.19.

Pada prosesor Intel, substitusi alamat untuk lompatan tidak langsung spekulatif dilakukan berkat fitur yang muncul ketika terjadi luapan melalui batas bawah (underflow) di Return Stack Buffer. Ketika kondisi seperti itu terjadi, instruksi “ret” mulai menerapkan logika pemilihan alamat yang serupa dengan yang digunakan untuk lompatan tidak langsung normal. Lebih dari seribu tempat telah ditemukan di kernel Linux yang menciptakan kondisi untuk memulai arus balik dan dapat diakses melalui panggilan sistem.

Pada prosesor AMD, eksekusi spekulatif dari instruksi “ret” dilakukan tanpa mengacu pada buffer khusus tumpukan (Return Address Stack) dan unit prediksi cabang menganggap instruksi “ret” bukan sebagai pengembalian kontrol, tetapi sebagai cabang tidak langsung , dan, karenanya, menggunakan data untuk memprediksi transisi tidak langsung. Dalam kondisi ini, hampir semua operasi "ret" yang dapat dijangkau melalui panggilan sistem dapat dieksploitasi.

Selain itu, masalah lain juga telah diidentifikasi pada CPU AMD (CVE-2022-23825, Branch Type Confusion) terkait dengan implementasi cabang fiktif - kondisi untuk prediksi cabang dapat terjadi bahkan tanpa instruksi cabang yang diperlukan, yang memungkinkan mempengaruhi buffer prediksi cabang tanpa instruksi " kembali". Fitur ini secara signifikan mempersulit penerapan perlindungan dan memerlukan pembersihan buffer prediksi cabang yang lebih aktif. Menambahkan perlindungan penuh pada kernel diperkirakan akan meningkatkan overhead sebesar 209%.

Sumber: opennet.ru

Tambah komentar