Kerentanan dalam subsistem eBPF yang memungkinkan melewati perlindungan terhadap serangan Spectre

Kerentanan telah diidentifikasi di kernel Linux (CVE-2021-33624) yang memungkinkan subsistem eBPF digunakan untuk melewati perlindungan terhadap kerentanan kelas Spectre, yang memungkinkan untuk menentukan isi memori sebagai akibat dari penciptaan kondisi untuk eksekusi spekulatif dari operasi tertentu. Serangan Spectre memerlukan adanya urutan perintah tertentu dalam kode istimewa yang mengarah pada eksekusi instruksi spekulatif. Dengan memanipulasi program BPF yang dikirimkan untuk dieksekusi, dimungkinkan untuk menghasilkan instruksi serupa di eBPF dan membocorkan konten memori kernel dan area memori fisik yang berubah-ubah melalui saluran samping.

Kerentanan ini disebabkan oleh kelemahan pada verifier yang digunakan untuk mendeteksi kesalahan dan aktivitas yang tidak dapat diterima dalam program BPF. Verifikator menghitung kemungkinan jalur eksekusi kode, tetapi melewatkan opsi percabangan yang tidak dapat diterima dari sudut pandang semantik arsitektur set instruksi. Saat menjalankan program BPF, opsi percabangan yang tidak diperhitungkan oleh verifikator dapat diprediksi secara salah oleh prosesor dan dieksekusi dalam mode spekulatif. Misalnya, ketika menganalisis operasi "beban", pemverifikasi mengharapkan bahwa instruksi menggunakan register dengan alamat yang nilainya selalu dalam batas yang ditentukan, namun penyerang dapat menciptakan kondisi di mana prosesor akan mencoba melakukan operasi secara spekulatif dengan alamat yang tidak memenuhi ketentuan verifikasi.

Masalah tersebut telah muncul sejak rilis kernel 4.15 dan telah diperbaiki dalam bentuk patch (1, 2, 3, 4). Kerentanan masih belum diperbaiki di distribusi (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Selain itu, Anda dapat mencatat catatan tentang dampak kinerja alat untuk melindungi terhadap kerentanan Spectre. Catatan tersebut merangkum hasil optimasi debugger rr (Record and Replay), yang pernah dibuat di Mozilla untuk men-debug kesalahan yang sulit diulang di Firefox. Caching panggilan sistem yang digunakan untuk memeriksa keberadaan direktori mengurangi operasi "sumber rr" untuk proyek pengujian dari 3 menit 19 detik menjadi 36 detik.

Penulis pengoptimalan memutuskan untuk memeriksa bagaimana kinerja akan berubah setelah menonaktifkan perlindungan Spectre. Setelah mem-boot sistem dengan parameter β€œmitigations=off”, waktu eksekusi β€œrr source” tanpa optimasi adalah 2 menit 5 detik (1.6 kali lebih cepat), dan dengan optimasi adalah 33 detik (9% lebih cepat). Menariknya, menonaktifkan perlindungan Spectre tidak hanya mengurangi waktu eksekusi kode di tingkat kernel sebesar 1.4 kali (dari 2m9s menjadi 1m32s), namun juga mengurangi separuh waktu eksekusi di ruang pengguna (dari 1m9s menjadi 0m33s), mungkin karena berkurangnya efisiensi operasi cache CPU dan TLB direset ketika perlindungan Spectre diaktifkan.

Sumber: opennet.ru

Tambah komentar