Peramal cawangan ialah komponen kritikal seni bina CPU moden yang direka untuk meningkatkan prestasi dengan membuat spekulasi arah arahan cawangan (cth, pernyataan if-else) sebelum ia diselesaikan. Spekulasi ini membolehkan CPU mengambil dan melaksanakan arahan di sepanjang laluan yang diramalkan, dengan itu mengurangkan kependaman yang dilihat dan meningkatkan daya pengeluaran keseluruhan. Walau bagaimanapun, pengoptimuman prestasi ini memperkenalkan potensi kelemahan yang boleh dieksploitasi dalam serangan pemasaan CPU, terutamanya dalam konteks membocorkan maklumat sensitif.
Ramalan cawangan berfungsi dengan mengekalkan sejarah hasil cawangan dan menggunakan sejarah ini untuk meramalkan cawangan akan datang. Apabila arahan cawangan ditemui, peramal menggunakan data sejarah ini untuk meneka sama ada cawangan akan diambil atau tidak diambil. Jika ramalan adalah betul, CPU meneruskan pelaksanaan tanpa gangguan. Jika salah, CPU mesti melancarkan semula dan melaksanakan laluan yang betul, yang dikenakan penalti prestasi. Penalti ini, walaupun kecil, boleh diukur dan dieksploitasi oleh penyerang.
Penyerang boleh memanipulasi peramal cawangan untuk mencipta perbezaan masa yang boleh diukur antara cawangan yang diramalkan dengan betul dan salah. Perbezaan ini boleh digunakan untuk membuat kesimpulan laluan pelaksanaan program, yang boleh, seterusnya, mendedahkan maklumat sensitif. Salah satu contoh serangan sedemikian yang paling terkenal ialah kelemahan Spectre, yang memanfaatkan pelaksanaan spekulatif dan ramalan cawangan untuk mengakses lokasi memori yang tidak dibenarkan.
Dalam serangan Spectre biasa, penyerang mula-mula melatih peramal cawangan untuk mengikut corak tertentu. Fasa latihan ini melibatkan pelaksanaan urutan arahan cawangan yang menetapkan peramal untuk membuat ramalan tertentu. Setelah peramal dilatih, penyerang melaksanakan segmen kod mangsa yang termasuk cawangan yang bergantung pada data rahsia. Jika peramal membuat ramalan yang salah berdasarkan latihan penyerang, CPU secara spekulatif akan melaksanakan arahan yang mengakses memori berdasarkan data rahsia. Walaupun arahan spekulatif ini akhirnya dibuang, ia meninggalkan kesan dalam cache CPU.
Penyerang kemudiannya boleh mengukur masa capaian ke lokasi memori yang berbeza untuk menentukan data yang diakses secara spekulatif. Teknik ini, yang dikenali sebagai serangan pemasaan cache, membolehkan penyerang membuat kesimpulan data rahsia berdasarkan perbezaan masa yang diperhatikan. Langkah-langkah utama dalam serangan sedemikian ialah:
1. Melatih Peramal Cawangan: Penyerang menjalankan urutan arahan terkawal yang mempengaruhi keadaan peramal cawangan. Sebagai contoh, berulang kali melaksanakan arahan cawangan dengan hasil yang konsisten (cth, sentiasa diambil) memberi syarat kepada peramal untuk mengharapkan hasil itu dalam pelaksanaan masa hadapan.
2. Mencetuskan Pelaksanaan Spekulatif: Penyerang menjalankan kod mangsa dengan arahan cawangan bergantung pada data rahsia. Disebabkan oleh latihan sebelumnya penyerang, peramal cawangan secara spekulatif melaksanakan laluan yang salah, yang melibatkan akses memori berdasarkan data rahsia.
3. Mengukur Masa Capaian Cache: Selepas pelaksanaan spekulatif, penyerang mengukur masa yang diperlukan untuk mengakses lokasi memori tertentu. Masa capaian yang lebih pantas menunjukkan bahawa data terdapat dalam cache, yang membayangkan ia telah diakses secara spekulatif. Dengan menganalisis masa ini, penyerang boleh membuat kesimpulan data rahsia.
Untuk menggambarkan ini dengan contoh konkrit, pertimbangkan senario di mana data rahsia menentukan indeks akses tatasusunan dalam cawangan. Penyerang mula-mula melatih peramal cawangan untuk mengambil arah cawangan tertentu. Apabila kod mangsa dijalankan, peramal cawangan secara spekulatif melaksanakan akses tatasusunan berdasarkan arah terlatih. Jika spekulasi melibatkan mengakses elemen tatasusunan tertentu, baris cache yang sepadan dimuatkan. Penyerang kemudiannya boleh melakukan satu siri akses memori bermasa untuk menentukan baris cache yang dimuatkan, dengan itu membuat kesimpulan indeks rahsia.
Mengurangkan serangan sedemikian melibatkan beberapa strategi. Penyelesaian berasaskan perkakasan termasuk menambah baik pengasingan antara laluan pelaksanaan spekulatif dan bukan spekulatif dan memastikan bahawa pelaksanaan spekulatif tidak menjejaskan sumber kongsi seperti cache. Penyelesaian berasaskan perisian melibatkan teknik seperti memasukkan arahan "pagar" untuk menghalang pelaksanaan spekulatif melepasi titik tertentu dalam kod, atau menggunakan amalan pengaturcaraan masa tetap untuk memastikan masa pelaksanaan tidak bergantung pada data rahsia.
Kerumitan dan kecanggihan serangan pemasaan berasaskan peramal cawangan menekankan keperluan untuk penyelidikan dan pembangunan berterusan dalam kedua-dua perkakasan dan keselamatan perisian. Memandangkan seni bina CPU terus berkembang, begitu juga strategi untuk melindungi daripada ini dan bentuk serangan saluran sampingan yang lain.
Soalan dan jawapan terbaru lain mengenai Serangan pemasaan CPU:
- Apakah beberapa cabaran dan pertukaran yang terlibat dalam melaksanakan mitigasi perkakasan dan perisian terhadap serangan pemasaan sambil mengekalkan prestasi sistem?
- Bagaimanakah pengaturcaraan masa tetap boleh membantu mengurangkan risiko serangan masa dalam algoritma kriptografi?
- Apakah itu pelaksanaan spekulatif, dan bagaimanakah ia menyumbang kepada kelemahan pemproses moden terhadap serangan masa seperti Spectre?
- Bagaimanakah serangan pemasaan mengeksploitasi variasi dalam masa pelaksanaan untuk membuat kesimpulan maklumat sensitif daripada sistem?
- Apakah serangan masa?