Checkpoint mengusulkan teknik perlindungan Safe-Linking, sehingga lebih sulit untuk mengeksploitasi kerentanan

Perusahaan Pos Pemeriksaan disajikan Mekanisme perlindungan Tautan Aman, yang mempersulit pembuatan eksploitasi yang memanipulasi definisi atau modifikasi pointer ke buffer yang dialokasikan saat menjalankan panggilan malloc. Tautan Aman tidak sepenuhnya memblokir kemungkinan mengeksploitasi kerentanan, tetapi dengan overhead yang minimal, hal ini secara signifikan mempersulit pembuatan kategori eksploitasi tertentu, karena selain buffer overflow yang dapat dieksploitasi, perlu ditemukan kerentanan lain yang menyebabkan kebocoran informasi tentang penempatan heap di memori.

Patch yang mengimplementasikan Safe-Linking telah disiapkan untuk Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) dan Google TCMalloc, dan juga diusulkan untuk meningkatkan perlindungan di Chromium (di
Sejak 2012, Chromium telah membangun teknik perlindungan MaskPtr yang bertujuan untuk memecahkan masalah yang sama, namun solusi dari Checkpoint menunjukkan kinerja yang lebih tinggi).
Tambalan yang disarankan telah disetujui untuk dikirimkan pada rilis bulan Agustus Glibc 3.32 dan Tautan Aman akan diaktifkan secara default. uClibc-NG mendukung Tautan Aman masuk disertakan dalam rilis 1.0.33 dan diaktifkan secara default. Perubahan pada gperftools (tcmalloc lama) diterima, tetapi akan ditawarkan sebagai opsi pada rilis mendatang.

Pengembang TCMalloc (tcmalloc baru) menolak untuk menerima mengubah, mengutip penurunan kinerja yang parah dan kebutuhan untuk menambahkan pengujian ekstensif untuk memeriksa secara berkala apakah semuanya berfungsi sesuai harapan. Pengujian oleh para insinyur Checkpoint menunjukkan bahwa metode Tautan Aman tidak menyebabkan konsumsi memori tambahan, dan kinerja saat melakukan operasi heap rata-rata berkurang hanya 0.02%, dan dalam skenario terburuk sebesar 1.5% (sebagai perbandingan, biaya overhead dalam metode yang digunakan dalam Chromium diperkirakan β€œkurang dari 2%”). Penyertaan
Safe-Linking menghasilkan 2-3 instruksi perakitan tambahan yang dieksekusi setiap kali free() dipanggil, dan 3-4 instruksi setiap kali malloc() dipanggil. Menjalankan tahapan inisialisasi dan pembuatan nilai acak tidak diperlukan.

Checkpoint mengusulkan teknik perlindungan Safe-Linking, sehingga lebih sulit untuk mengeksploitasi kerentanan

Tautan Aman dapat digunakan tidak hanya untuk meningkatkan keamanan berbagai implementasi heap, namun juga untuk menambahkan kontrol integritas ke struktur data apa pun yang menggunakan daftar penunjuk tertaut tunggal yang ditempatkan di sebelah buffer itu sendiri. Metode ini sangat sederhana untuk diterapkan dan hanya perlu menambahkan satu makro dan menerapkannya pada pointer ke blok berikutnya dalam kode (misalnya, untuk Glibc perubahan hanya beberapa baris kode). Metode ini bermuara pada perubahan berikut:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((ukuran_t) pos) >> 12) ^ ((ukuran_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- selanjutnyap = p->fd;
+ selanjutnyap = REVEAL_PTR (p->fd);
...

Inti dari metode ini adalah menggunakan data acak dari mekanisme pengacakan alamat ASLR (mmap_base) untuk melindungi daftar tertaut tunggal seperti Fast-Bins dan TCache. Sebelum nilai diterapkan ke penunjuk ke elemen berikutnya dalam daftar, ia melakukan konversi topeng dan memeriksa perataan halaman. Pointer diganti dengan hasil operasi "(L >> PAGE_SHIFT) XOR (P)", dimana P adalah nilai pointer dan L adalah lokasi memori tempat pointer disimpan.

Checkpoint mengusulkan teknik perlindungan Safe-Linking, sehingga lebih sulit untuk mengeksploitasi kerentanan

Saat digunakan dalam sistem ASLR (Pengacakan Tata Letak Ruang Alamat) bagian dari bit L dengan alamat dasar heap berisi nilai acak yang digunakan sebagai kunci untuk menyandikan P (diekstraksi dengan operasi pergeseran 12-bit untuk halaman 4096-byte). Manipulasi ini mengurangi risiko pembajakan pointer dalam suatu eksploitasi, karena pointer tidak disimpan dalam bentuk aslinya dan penggantiannya memerlukan pengetahuan tentang alokasi heap. Selain itu, kode patch juga berisi pemeriksaan tambahan untuk penyelarasan blok, yang tidak memungkinkan penyerang mengganti pointer dengan nilai yang tidak selaras dan memerlukan pengetahuan tentang jumlah bit yang disejajarkan, yang pada sistem 64-bit juga memungkinkan pemblokiran. 15 dari 16 upaya serangan yang tidak memperhitungkan keselarasan.

Metode ini efektif untuk melindungi terhadap serangan yang menggunakan penulisan ulang sebagian pointer (mengubah byte rendah), penulisan ulang pointer lengkap (mengarahkan ke kode penyerang) dan mengubah posisi daftar pada alamat yang tidak selaras. Sebagai contoh, terlihat bahwa penggunaan Safe-Linking di malloc akan memungkinkan pemblokiran eksploitasi baru-baru ini diidentifikasi oleh peneliti kerentanan yang sama CVE-2020-6007 di lampu pintar Philips Hue Bridge, yang disebabkan oleh buffer overflow dan memungkinkan Anda mengontrol perangkat.

Sumber: opennet.ru

Tambah komentar