Kerentanan kelas Meltdown telah ditemui dalam pemproses AMD berdasarkan seni bina mikro Zen+ dan Zen 2

Sekumpulan penyelidik dari Universiti Teknikal Dresden telah mengenal pasti kelemahan (CVE-2020-12965) dalam pemproses AMD berdasarkan Zen+ dan Zen 2 microarchitectures, yang membenarkan serangan kelas Meltdown. Pada mulanya diandaikan bahawa pemproses AMD Zen+ dan Zen 2 tidak terdedah kepada kelemahan Meltdown, tetapi penyelidik mengenal pasti ciri yang membawa kepada akses spekulatif ke kawasan memori yang dilindungi apabila menggunakan alamat maya bukan kanonik.

Seni bina AMD64 hanya menggunakan 48 bit pertama alamat maya dan mengabaikan baki 16 bit. Ia dinyatakan bahawa bit 48 hingga 63 mesti sentiasa menyalin nilai bit 47 (sambungan bit tanda). Jika syarat ini dilanggar dan percubaan dibuat untuk mengakses alamat dengan nilai arbitrari bit atas, pemproses menjana pengecualian. Pengisian bit atas secara berulang menyebabkan ruang alamat yang tersedia dibahagikan kepada dua blok - yang lebih rendah (dari 0 hingga 00007FFFFFFFFFFFFFF), di mana bit atas ditetapkan kepada 800000000000, dan yang atas (dari FFFF1 hingga FFFFFFFFFFFFFFF), di mana semua bit atas ditetapkan kepada XNUMX.

Alamat yang termasuk dalam blok yang ditentukan dipanggil kanonik, dan alamat yang salah dengan kandungan sewenang-wenangnya bit atas dipanggil bukan kanonik. Julat alamat kanonik yang lebih rendah biasanya diperuntukkan untuk data proses, dan julat atas digunakan untuk data kernel (akses kepada alamat ini dari ruang pengguna disekat pada tahap pemisahan keistimewaan).

Kerentanan Meltdown klasik adalah berdasarkan fakta bahawa semasa pelaksanaan spekulatif arahan, pemproses boleh mengakses kawasan data peribadi dan kemudian membuang hasilnya kerana keistimewaan yang ditetapkan melarang akses sedemikian daripada proses pengguna. Dalam program ini, blok yang dilaksanakan secara spekulatif dipisahkan daripada kod utama oleh cawangan bersyarat, yang dalam keadaan sebenar sentiasa menyala, tetapi disebabkan fakta bahawa pernyataan bersyarat menggunakan nilai terkira yang pemproses tidak tahu semasa pelaksanaan preemptive kod, semua pilihan cawangan dijalankan secara spekulatif.

Oleh kerana operasi yang dilaksanakan secara spekulatif menggunakan cache yang sama seperti arahan yang biasa dilaksanakan, adalah mungkin semasa pelaksanaan spekulatif untuk menetapkan penanda dalam cache yang mencerminkan kandungan bit individu dalam kawasan memori peribadi, dan kemudian dalam kod yang biasa dilaksanakan untuk menentukan nilainya melalui pemasaan. akses analisis kepada data cache dan bukan cache.

Satu ciri kerentanan baharu yang menjejaskan pemproses AMD Zen+ dan Zen 2 ialah CPU membenarkan operasi baca dan tulis spekulatif yang mengakses memori menggunakan alamat bukan kanonik yang tidak sah, hanya mengabaikan 16 bit atas. Oleh itu, semasa pelaksanaan kod spekulatif, pemproses sentiasa menggunakan hanya 48 bit yang lebih rendah, dan kesahihan alamat diperiksa secara berasingan. Jika, apabila menterjemah alamat maya bukan kanonik ke alamat fizikal dalam penimbal terjemahan bersekutu (TLB), padanan dikesan dalam bahagian kanonik alamat, maka operasi beban spekulatif akan mengembalikan nilai tanpa mengambil kira kandungan daripada 16 bit atas, yang membolehkan memintas perkongsian memori antara benang. Selepas itu, operasi akan dianggap tidak sah dan dibuang, tetapi akses memori akan selesai dan data akan berakhir dalam cache.

Semasa percubaan, menggunakan teknik menentukan kandungan cache FLUSH+RELOAD, para penyelidik dapat mengatur saluran untuk pemindahan data tersembunyi pada kelajuan 125 bait sesaat. Selain cip AMD, masalah ini juga mempengaruhi semua pemproses Intel, yang terdedah kepada kelemahan Meltdown klasik. Teknik yang sama yang membantu menyekat serangan Meltdown, seperti menggunakan arahan LFENCE, boleh digunakan untuk melindungi daripada jenis serangan baharu ini. Contohnya, jika pemproses Intel menyertakan perlindungan perkakasan terhadap Meltdown atau sistem mendayakan perlindungan perisian, maka konfigurasi tersebut tidak terdedah kepada varian serangan baharu.

Pada masa yang sama, para penyelidik mencatatkan bahawa, berbanding dengan pemproses Intel, seni bina pemproses AMD mengehadkan kemungkinan melakukan serangan sebenar, tetapi tidak mengecualikan penggunaan kaedah baru dalam kombinasi dengan serangan mikroarkitektur lain untuk meningkatkan keberkesanannya. Khususnya, serangan yang dicadangkan tidak membenarkan penentuan kandungan kawasan memori kernel dan proses lain, tetapi terhad kepada keupayaan untuk mendapatkan akses kepada utas lain program yang sama berjalan dalam ruang memori maya yang sama.

Memandangkan program tanpa kelemahan mempunyai keupayaan untuk mendapatkan akses kepada utasnya, dari sudut praktikal kaedah ini menarik untuk memintas pengasingan kotak pasir dan mengatur gangguan terhadap kerja utas lain dalam program yang membenarkan pelaksanaan pihak ketiga kod, seperti pelayar web dan enjin JIT . Penyelidik meneliti kelemahan enjin JavaScript SpiderMonkey dan kernel Linux untuk menyerang, tetapi tidak menemui urutan kod terdedah yang boleh digunakan untuk melakukan serangan. Selain menyerang aplikasi, kaedah ini juga boleh digunakan untuk memaksa aliran data yang tidak boleh diterima antara unsur-unsur seni bina mikro pemproses semasa mengeksploitasi kelemahan seni bina mikro yang lain.

Sumber: opennet.ru

Tambah komen