Kerentanan dalam subsistem eBPF yang membenarkan memintas perlindungan terhadap serangan Spectre

Kerentanan telah dikenal pasti dalam kernel Linux (CVE-2021-33624) yang membolehkan subsistem eBPF digunakan untuk memintas perlindungan terhadap kelemahan kelas Spectre, yang memungkinkan untuk menentukan kandungan memori hasil daripada mewujudkan keadaan untuk pelaksanaan spekulatif operasi tertentu. Serangan Spectre memerlukan kehadiran urutan tertentu arahan dalam kod istimewa yang membawa kepada pelaksanaan spekulatif arahan. Dengan memanipulasi program BPF yang dihantar untuk pelaksanaan, adalah mungkin untuk menjana arahan serupa dalam eBPF dan membocorkan kandungan memori kernel dan kawasan memori fizikal yang sewenang-wenangnya melalui saluran sisi.

Kerentanan disebabkan oleh kecacatan dalam pengesah, yang digunakan untuk mengesan ralat dan aktiviti yang tidak boleh diterima dalam program BPF. Pengesah menyenaraikan kemungkinan laluan pelaksanaan kod, tetapi melangkau pilihan percabangan yang tidak boleh diterima dari sudut pandangan semantik seni bina set arahan. Apabila melaksanakan program BPF, pilihan percabangan sedemikian yang tidak diambil kira oleh pengesah boleh diramal secara salah oleh pemproses dan dilaksanakan dalam mod spekulatif. Sebagai contoh, apabila menganalisis operasi "beban", pengesah menjangkakan bahawa arahan menggunakan daftar dengan alamat yang nilainya sentiasa dalam sempadan yang ditentukan, tetapi penyerang boleh mencipta keadaan di mana pemproses akan cuba melakukan operasi secara spekulatif dengan alamat yang tidak memenuhi syarat pengesahan.

Masalahnya telah muncul sejak keluaran kernel 4.15 dan telah diperbaiki dalam bentuk patch (1, 2, 3, 4). Kerentanan kekal tidak tetap dalam pengedaran (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Selain itu, anda boleh ambil perhatian nota tentang kesan prestasi alatan untuk melindungi daripada kelemahan Spectre. Nota itu meringkaskan hasil pengoptimuman penyahpepijat rr (Rekod dan Main Semula), yang pernah dicipta dalam Mozilla untuk menyahpepijat ralat yang sukar diulang dalam Firefox. Caching panggilan sistem yang digunakan untuk menyemak kewujudan direktori mengurangkan operasi "sumber rr" untuk projek ujian daripada 3 minit 19 saat kepada 36 saat.

Pengarang pengoptimuman memutuskan untuk menyemak cara prestasi akan berubah selepas melumpuhkan perlindungan Spectre. Selepas memuatkan sistem dengan parameter "mitigasi=mati", masa pelaksanaan "sumber rr" tanpa pengoptimuman ialah 2 minit 5 saat (1.6 kali lebih pantas), dan dengan pengoptimuman ia adalah 33 saat (9% lebih pantas). Menariknya, melumpuhkan perlindungan Spectre bukan sahaja mengurangkan masa pelaksanaan kod pada peringkat kernel sebanyak 1.4 kali (daripada 2m9s kepada 1m32s), tetapi juga mengurangkan separuh masa pelaksanaan dalam ruang pengguna (daripada 1m9s kepada 0m33s), mungkin disebabkan oleh pengurangan kecekapan operasi cache CPU dan TLB ditetapkan semula apabila perlindungan Spectre didayakan.

Sumber: opennet.ru

Tambah komen