70% masalah keamanan di Chromium disebabkan oleh kesalahan memori

Pengembang proyek Chromium dianalisis 912 kerentanan berisiko tinggi dan kritis diidentifikasi dalam rilis stabil Chrome sejak tahun 2015, dan menyimpulkan bahwa 70% di antaranya disebabkan oleh ketidakamanan memori (kesalahan saat bekerja dengan pointer dalam kode C/C++). Setengah dari masalah ini (36.1%) disebabkan oleh akses ke buffer setelah mengosongkan memori yang terkait dengannya (penggunaan setelah bebas).

70% masalah keamanan di Chromium disebabkan oleh kesalahan memori

Saat mendesain Chromium, itu awalnya diletakkanbahwa ada kemungkinan kesalahan muncul dalam kode, jadi penekanan besar diberikan pada penggunaan isolasi sandbox untuk membatasi konsekuensi kerentanan. Saat ini, kemungkinan penggunaan teknologi ini telah mencapai batas kemampuannya dan fragmentasi lebih lanjut ke dalam proses tidak praktis dalam hal konsumsi sumber daya.

Untuk menjaga keamanan basis kode, Google juga menerapkan "aturan duaβ€œ, yang menurutnya setiap kode yang ditambahkan harus memenuhi tidak lebih dari dua dari tiga kondisi: bekerja dengan data masukan yang tidak divalidasi, menggunakan bahasa pemrograman yang tidak aman (C/C++) dan berjalan dengan hak istimewa yang lebih tinggi. Aturan ini menyiratkan bahwa kode untuk memproses data eksternal harus direduksi menjadi hak istimewa minimal (terisolasi) atau ditulis dalam bahasa pemrograman yang aman.

Untuk lebih meningkatkan keamanan basis kode, sebuah proyek telah diluncurkan untuk mencegah munculnya kesalahan memori di basis kode. Ada tiga pendekatan utama: membuat pustaka C++ dengan fungsi untuk pengoperasian memori yang aman dan memperluas cakupan pengumpul sampah, menggunakan mekanisme perlindungan perangkat keras Mte (Memory Tagging Extension) dan menulis komponen dalam bahasa yang menjamin keamanan kerja dengan memori (Java, Kotlin, JavaScript, Rust, Swift).

Diharapkan pekerjaan akan difokuskan pada dua bidang:

  • Perubahan signifikan pada proses pengembangan C++, yang tidak mengecualikan dampak negatif pada kinerja (pemeriksaan batas tambahan dan pengumpulan sampah). Alih-alih pointer mentah, diusulkan untuk menggunakan tipe tersebut keajaibanPtr, yang memungkinkan Anda mengurangi kesalahan penggunaan setelah bebas yang dapat dieksploitasi menjadi kerusakan yang tidak menimbulkan ancaman keamanan, tanpa dampak negatif yang nyata terhadap kinerja, konsumsi memori, dan stabilitas.
  • Penggunaan bahasa yang dirancang untuk melakukan pemeriksaan keamanan memori pada waktu kompilasi (akan menghilangkan dampak negatif pada kinerja yang melekat pada pemeriksaan tersebut selama eksekusi kode, tetapi akan menyebabkan biaya tambahan untuk mengatur interaksi kode dalam bahasa baru dengan kode di C++).

Menggunakan perpustakaan yang aman untuk memori adalah cara yang paling sederhana, namun juga kurang efisien. Menulis ulang kode di Rust dinilai sebagai cara yang paling efektif, tetapi juga sangat mahal.

70% masalah keamanan di Chromium disebabkan oleh kesalahan memori

Sumber: opennet.ru

Tambah komentar