Kerentanan kelas Meltdown telah ditemukan pada prosesor AMD berdasarkan mikroarsitektur Zen+ dan Zen 2

Sekelompok peneliti dari Universitas Teknik Dresden telah mengidentifikasi kerentanan (CVE-2020-12965) pada prosesor AMD berdasarkan mikroarsitektur Zen+ dan Zen 2, yang memungkinkan serangan kelas Meltdown. Awalnya diasumsikan bahwa prosesor AMD Zen+ dan Zen 2 tidak rentan terhadap kerentanan Meltdown, namun peneliti mengidentifikasi fitur yang mengarah pada akses spekulatif ke area memori yang dilindungi ketika menggunakan alamat virtual non-kanonik.

Arsitektur AMD64 hanya menggunakan 48 bit pertama dari alamat virtual dan mengabaikan 16 bit sisanya. Ditentukan bahwa bit 48 hingga 63 harus selalu menyalin nilai bit 47 (ekstensi tanda bit). Jika kondisi ini dilanggar dan upaya dilakukan untuk mengakses alamat dengan nilai bit atas yang berubah-ubah, prosesor akan menghasilkan pengecualian. Mengisi bit atas berulang kali menyebabkan ruang alamat yang tersedia dibagi menjadi dua blok - blok bawah (dari 0 hingga 00007FFFFFFFFFFFFFFF), di mana bit atas disetel ke 800000000000, dan blok atas (dari FFFF1 hingga FFFFFFFFFFFFFFFF), di mana semua bit atas diatur ke XNUMX.

Alamat yang termasuk dalam blok tertentu disebut kanonik, dan alamat yang salah dengan isi bit atas yang berubah-ubah disebut non-kanonik. Kisaran alamat kanonik yang lebih rendah biasanya dialokasikan untuk data proses, dan kisaran atas digunakan untuk data kernel (akses ke alamat ini dari ruang pengguna diblokir pada tingkat pemisahan hak istimewa).

Kerentanan Meltdown klasik didasarkan pada fakta bahwa selama eksekusi instruksi spekulatif, prosesor dapat mengakses area data pribadi dan kemudian membuang hasilnya karena hak istimewa yang ditetapkan melarang akses tersebut dari proses pengguna. Dalam program, blok yang dieksekusi secara spekulatif dipisahkan dari kode utama oleh cabang bersyarat, yang selalu aktif dalam kondisi nyata, tetapi karena pernyataan bersyarat menggunakan nilai terhitung yang tidak diketahui oleh prosesor selama eksekusi preemptive. kodenya, semua opsi cabang dilakukan secara spekulatif.

Karena operasi yang dieksekusi secara spekulatif menggunakan cache yang sama dengan instruksi yang biasanya dieksekusi, selama eksekusi spekulatif dimungkinkan untuk menyetel penanda di cache yang mencerminkan konten bit individual di area memori pribadi, dan kemudian dalam kode yang dieksekusi secara normal untuk menentukan nilainya melalui pewaktuan. analisis mengakses data yang di-cache dan non-cache.

Salah satu fitur kerentanan baru yang memengaruhi prosesor AMD Zen+ dan Zen 2 adalah CPU mengizinkan operasi baca dan tulis spekulatif yang mengakses memori menggunakan alamat non-kanonik yang tidak valid, dan mengabaikan 16 bit teratas. Jadi, selama eksekusi kode spekulatif, prosesor selalu hanya menggunakan 48 bit yang lebih rendah, dan validitas alamat diperiksa secara terpisah. Jika, ketika menerjemahkan alamat virtual non-kanonik ke alamat fisik di buffer terjemahan asosiatif (TLB), kecocokan terdeteksi di bagian kanonik alamat, maka operasi pemuatan spekulatif akan mengembalikan nilai tanpa memperhitungkan konten. dari 16 bit atas, yang memungkinkan melewati pembagian memori antar thread. Selanjutnya, operasi akan dianggap tidak valid dan dibuang, tetapi akses memori akan selesai dan data akan disimpan di cache.

Selama percobaan, dengan menggunakan teknik menentukan isi cache FLUSH+RELOAD, para peneliti mampu mengatur saluran untuk transfer data tersembunyi dengan kecepatan 125 byte per detik. Selain chip AMD, masalah ini juga mempengaruhi semua prosesor Intel, yang rentan terhadap kerentanan Meltdown klasik. Teknik yang sama yang membantu memblokir serangan Meltdown, seperti menggunakan instruksi LFENCE, dapat digunakan untuk melindungi terhadap serangan jenis baru ini. Misalnya, jika prosesor Intel menyertakan perlindungan perangkat keras terhadap Meltdown atau sistem mengaktifkan perlindungan perangkat lunak, maka konfigurasi tersebut tidak rentan terhadap varian serangan baru.

Pada saat yang sama, para peneliti mencatat bahwa, dibandingkan dengan prosesor Intel, arsitektur prosesor AMD membatasi kemungkinan melakukan serangan nyata, namun tidak mengecualikan penggunaan metode baru yang dikombinasikan dengan serangan mikroarsitektur lainnya untuk meningkatkan efektivitasnya. Secara khusus, serangan yang diusulkan tidak memungkinkan seseorang untuk menentukan isi area memori kernel dan proses lainnya, namun terbatas pada kemampuan untuk mendapatkan akses ke thread lain dari program yang sama yang berjalan di ruang memori virtual yang sama.

Karena program tanpa kerentanan memiliki kemampuan untuk mendapatkan akses ke thread-nya, dari sudut pandang praktis, metode ini menarik untuk melewati isolasi kotak pasir dan mengatur gangguan pada pekerjaan thread lain dalam program yang memungkinkan eksekusi pihak ketiga. kode, seperti browser web dan mesin JIT. Peneliti memeriksa kerentanan mesin JavaScript SpiderMonkey dan kernel Linux terhadap serangan, namun tidak menemukan rangkaian kode rentan yang dapat digunakan untuk melakukan serangan. Selain menyerang aplikasi, metode ini juga dapat digunakan untuk memaksa aliran data yang tidak dapat diterima antara elemen mikroarsitektur prosesor sambil mengeksploitasi kerentanan mikroarsitektur lainnya.

Sumber: opennet.ru

Tambah komentar