Reptar
(lock.cmpxchg8b.com)Menemukan misteri CPU
- Jika Anda tertarik pada kesalahan yang dapat terjadi di dalam CPU modern, disarankan untuk terus membaca.
- Jika Anda pernah menulis assembly x86, Anda kemungkinan akrab dengan instruksi
rep movsbyang digunakan untuk memindahkan memori. - Setelah mengatur sumber, tujuan, arah, dan hitungan, prosesor akan menangani semua detailnya.
Interpretasi prefiks instruksi
- Salah satu karakteristik x86 adalah decoding instruksinya secara umum sangat fleksibel.
- Bahkan jika menggunakan prefiks yang tidak bermakna atau bertabrakan dengan prefiks lain, sebagian besar akan diabaikan.
- Kompiler dapat menggunakan prefiks yang tidak perlu untuk menyesuaikan dengan batas alignment yang diinginkan.
Prefiks REX
- i386 memiliki 8 register serbaguna, sehingga register dapat ditentukan dengan 3 bit.
- x86-64 memperkenalkan 8 register serbaguna tambahan sehingga memerlukan lebih banyak bit.
- Prefiks rex memungkinkan instruksi berikutnya meminjam bit tambahan, sehingga encoding 16 register serbaguna menjadi mungkin.
Aturan encoding
- Prefiks rex menambah ruang yang tersedia untuk meng-encode operand.
- Prefiks yang tidak perlu atau duplikat sebagian besar diabaikan di x86.
- Instruksi
rex.rxb rep movsbtidak memiliki operand, sehingga bit rex tidak bermakna dan prosesor mengabaikan prefiks rex.
Fast Short Repeat Move (FSRM)
- FSRM adalah fitur baru yang diperkenalkan di Ice Lake untuk mengatasi kekurangan ERMS.
- Pada ERMS, bagian tersulit dari pemindahan string yang efisien adalah menyelaraskan buffer dan menggunakan penyimpanan selebar mungkin.
- FSRM bertujuan memindahkan string pendek berukuran 128 byte atau kurang dengan lebih cepat.
Penemuan
- Dengan menggunakan Oracle Serialization, sebuah teknik verifikasi prosesor, diperiksa apakah dua bentuk program yang dibuat secara acak memiliki status akhir yang sama.
- Pada bulan Agustus, pipeline verifikasi menemukan kasus ketika penambahan prefiks rex.r yang redundan pada operasi
rep movsyang dioptimalkan FSRM menghasilkan hasil yang tidak dapat diprediksi. - Dikonfirmasi bahwa ketika banyak inti memicu bug yang sama, prosesor melaporkan machine check exception lalu berhenti.
Reproduksi
- Hasil penelitian dipublikasikan ke repositori riset keamanan.
- Untuk mereproduksi kerentanan, Anda dapat menggunakan alat
icebreak. - Pada sistem yang tidak terdampak, seharusnya tidak ada keluaran apa pun, tetapi pada sistem yang terdampak,
.akan dicetak setiap kali reproduksi berhasil.
Analisis
- Karena cara kerja microcode pada sistem modern dirahasiakan, hanya teori berbasis observasi yang dimungkinkan.
- Diperkirakan bug ini membuat frontend salah menghitung ukuran instruksi
movsb, sehingga entri berikutnya di ROB (reorder buffer) terhubung ke alamat yang salah.
Pertanyaan
- Mungkin muncul pertanyaan tentang apa yang mungkin dilakukan dalam keadaan "glitch" tak terduga ini.
- Diketahui bahwa status sistem dapat dirusak cukup parah hingga memicu machine check error, dan thread dapat memengaruhi eksekusi prosesor saudara SMT.
- Karena tidak ada cara untuk men-debug eksekusi μop, tidak diketahui apakah eskalasi hak akses dapat dicapai.
Solusi
- Intel telah merilis microcode yang diperbarui untuk semua prosesor yang terdampak.
- Vendor sistem operasi atau BIOS mungkin sudah menyediakan pembaruan tersebut.
Alternatif
- Jika pembaruan tidak memungkinkan, fast strings dapat dinonaktifkan melalui register model-spesifik IA32_MISC_ENABLE.
- Ini akan menyebabkan penurunan performa yang signifikan, jadi hanya boleh digunakan bila benar-benar diperlukan.
Pendapat GN⁺
Poin terpenting dari artikel ini adalah bahwa artikel ini menunjukkan ditemukannya keadaan "glitch" tak terduga yang dapat terjadi pada CPU modern dan bahwa hal ini dapat menimbulkan kerentanan keamanan. Tulisan ini bisa menarik bagi para software engineer dan membantu meningkatkan kesadaran akan kompleksitas CPU serta kerentanan sistem. Selain itu, artikel ini membantu memahami bagaimana penemuan semacam ini dapat berkembang menjadi ancaman keamanan nyata, dan menekankan pentingnya microcode yang telah diperbarui.
1 komentar
Opini Hacker News
Tim Konrad Magnusson menemukan masalah yang terkait dengan mimalloc.
Beberapa tim riset di Google menemukan bug tersebut secara independen.
Prosesor melaporkan machine check exception lalu berhenti.
Menyadari kurangnya pemahaman tentang hardware.
Mengingat diagnosis qemu saat menghadapi masalah repz ret.
Karyawan Intel sendiri dan karyawan Google melaporkan masalah tersebut.
Jauh lebih menarik daripada artikel Google.
Pertanyaan apakah mungkin merancang CPU yang tidak mengeksekusi secara berurutan melainkan secara spekulatif tanpa masalah keamanan.
Penjelasan tentang buletin keamanan Intel.