Retbleed mangrupikeun serangan énggal dina mékanisme palaksanaan spekulatif Intel sareng AMD CPU

Grup peneliti ti ETH Zurich geus ngaidentifikasi serangan anyar dina mékanisme palaksanaan spekulatif transisi teu langsung dina CPU, nu ngamungkinkeun pikeun nimba informasi tina memori kernel atawa ngatur serangan dina sistem host tina mesin virtual. Kerentanan kasebut disandi Retbleed (CVE-2022-29900, CVE-2022-29901) sareng caket pisan kana serangan Specter-v2. Bedana asalna handap pikeun organisasi palaksanaan spekulatif kode sawenang nalika ngolah "Ret" (balik) instruksi, nu fetches alamat luncat tina tumpukan, tinimbang hiji luncat teu langsung ngagunakeun "jmp" instruksi, loading alamatna ti. memori atawa register CPU.

Panyerang tiasa nyiptakeun kaayaan pikeun prediksi transisi anu salah sareng ngatur transisi spekulatif anu ditargetkeun ka blok kode anu henteu disayogikeun ku logika palaksanaan program. Pamustunganana, prosésor bakal nangtukeun yén prediksi cabang teu diyakinkeun sarta bakal gulung deui operasi ka kaayaan aslina, tapi data diolah salila palaksanaan spekulatif bakal mungkas nepi di cache sarta buffers microarchitectural. Lamun hiji blok erroneously dieksekusi ngakses memori, teras palaksanaan spekulatif na bakal ngakibatkeun data dibaca tina memori disimpen dina cache dibagikeun.

Pikeun nangtukeun data anu aya dina cache saatos operasi spekulatif, panyerang tiasa nganggo téknik saluran sisi pikeun nangtukeun sésa data, sapertos nganalisa parobahan waktos aksés kana data anu di-cache sareng henteu dicache. Pikeun ngahaja nimba inpormasi ti daérah dina tingkat hak husus anu sanés (contona, tina mémori kernel), "gadget" dianggo - sekuen paréntah anu aya dina kernel anu cocog pikeun spekulatif maca data tina mémori gumantung kana kaayaan éksternal anu tiasa dipangaruhan ku. panyerang.

Pikeun ngajaga ngalawan serangan kelas Specter klasik anu ngagunakeun parentah luncat kondisional jeung teu langsung, lolobana sistem operasi ngagunakeun téhnik "retpoline", nu dumasar kana ngaganti operasi luncat teu langsung jeung instruksi "ret", nu prosesor ngagunakeun Unit prediksi kaayaan tumpukan misah. .teu ngagunakeun blok prediksi cabang. Nalika retpoline diwanohkeun dina 2018, éta dipercaya yén manipulasi alamat sapertos Specter henteu praktis pikeun cabang spekulatif ngagunakeun instruksi "ret".

Panaliti anu ngembangkeun metode serangan Retbleed nunjukkeun kamungkinan nyiptakeun kaayaan microarchitectural pikeun ngamimitian transisi spekulatif nganggo instruksi "ret" sareng nyebarkeun alat anu siap-siap pikeun ngidentipikasi sekuen paréntah (gadget) anu cocog pikeun ngamangpaatkeun kerentanan dina kernel Linux. di mana kaayaan kitu manifest sorangan.

Salila panilitian, eksploitasi anu tiasa dianggo anu ngamungkinkeun, dina sistem sareng CPU Intel, nimba data sawenang tina mémori kernel tina prosés anu teu dipikabutuh dina rohangan pangguna dina laju 219 bait per detik sareng akurasi 98%. Dina prosesor AMD, efisiensi eksploitasi langkung luhur-laju bocorna 3.9 KB per detik. Salaku conto praktis, urang nunjukkeun kumaha ngagunakeun eksploitasi anu diusulkeun pikeun nangtukeun eusi file /etc/shadow. Dina sistem sareng CPU Intel, serangan pikeun nangtukeun hash sandi pangguna akar dilaksanakeun dina 28 menit, sareng dina sistem nganggo CPU AMD - dina 6 menit.

Serangan éta parantos dikonfirmasi pikeun generasi 6-8 prosesor Intel anu dileupaskeun sateuacan Q3 2019 (kalebet Skylake), sareng prosesor AMD dumasar kana Zen 1, Zen 1+, sareng Zen 2 microarchitectures anu dileupaskeun sateuacan Q2021 3. Dina modél prosesor anu langkung énggal sapertos AMD ZenXNUMX sareng Intel Alder Lake, ogé dina prosesor ARM, masalahna diblokir ku mékanisme panyalindungan anu tos aya. Contona, ngagunakeun IBRS (Indirect Branch Restricted Speculation) parentah mantuan ngajaga ngalawan serangan.

A set parobahan geus disiapkeun pikeun kernel Linux Ubuntu jeung hypervisor Xen, nu bakal meungpeuk masalah dina software dina CPUs heubeul. Patch anu diusulkeun pikeun kernel Linux ngarobih 68 file, nambihan 1783 garis, sareng ngahapus 387 garis. Hanjakalna, panyalindungan nyababkeun biaya overhead anu signifikan - dina téks anu dilakukeun dina prosesor AMD sareng Intel, panurunan kinerja diperkirakeun tina 14% dugi ka 39%. Leuwih hade ngagunakeun panyalindungan dumasar kana parentah IBRS, sadia dina generasi anyar Intel CPUs tur dirojong dimimitian ku kernel Linux Ubuntu 4.19.

Dina prosésor Intel, substitusi alamat pikeun luncat teu langsung spekulatif dilumangsungkeun berkat fitur nu nembongan nalika ngabahekeun lumangsung ngaliwatan wates handap (underflow) dina Return Stack Buffer. Nalika kaayaan kitu lumangsung, instruksi "ret" mimiti nerapkeun logika pilihan alamat sarupa nu dipaké pikeun jumps teu langsung normal. Langkung ti sarébu tempat parantos dipendakan dina kernel Linux anu nyiptakeun kaayaan pikeun ngamimitian aliran mundur sapertos kitu sareng tiasa diaksés ku telepon sistem.

Dina prosesor AMD, palaksanaan spekulatif instruksi "ret" dilumangsungkeun tanpa rujukan ka panyangga tumpukan-spésifik (Return Address Stack) jeung unit prediksi cabang nganggap instruksi "ret" lain salaku kontrol balik, tapi salaku cabang teu langsung. , jeung, sasuai, ngagunakeun data pikeun prediksi transisi teu langsung. Dina kaayaan ieu, ampir sagala operasi "ret" ngahontal via panggero sistem bisa dieksploitasi.

Salaku tambahan, masalah anu sanés ogé parantos diidentifikasi dina CPU AMD (CVE-2022-23825, Cabang Tipe Galau) patali jeung palaksanaan cabang fiktif - kaayaan pikeun prediksi cabang bisa lumangsung sanajan tanpa parentah cabang perlu, anu ngamungkinkeun influencing panyangga prediksi cabang. tanpa parentah "Ret". fitur ieu nyata complicates palaksanaan panyalindungan jeung merlukeun beberesih leuwih aktif tina panyangga prediksi cabang. Nambahkeun panyalindungan pinuh kana kernel diperkirakeun ningkatkeun overhead ku 209%.

sumber: opennet.ru

Tambahkeun komentar