Berencana Memperkuat Mekanisme Keamanan W^X OpenBSD

Theo De Raadt bersama berencana untuk memperkuat mekanisme perlindungan memori W^X (Write XOR Execute). Inti dari mekanisme ini adalah halaman memori proses tidak dapat diakses secara bersamaan untuk penulisan dan eksekusi. Dengan demikian, kode hanya dapat dieksekusi setelah penulisan dinonaktifkan, dan penulisan ke halaman memori hanya dapat dilakukan setelah eksekusi dinonaktifkan. Mekanisme W^X membantu melindungi aplikasi ruang pengguna dari serangan buffer overflow yang umum, termasuk stack overflow, dan aktif di OpenBSD secara default.

Sejak awal pengerjaan W^X, terlihat jelas bahwa ini adalah jalan yang panjang, karena ada sejumlah besar aplikasi yang menggunakan JIT. Implementasi JIT dapat dibagi menjadi tiga kategori:

  • Mengalihkan memori antara status W dan X, menerima β€œbiaya” dari panggilan sistem melindungi.
  • Membuat alias antara sepasang pemetaan W dan X dari memori yang sama.
  • Opsi paling β€œkotor” memerlukan model memori W|X yang memungkinkan perekaman dan eksekusi secara bersamaan.

Saat ini, terdapat lebih sedikit program yang menggunakan opsi ketiga dan lebih banyak lagi yang menggunakan opsi pertama dan kedua. Namun, karena program tersebut perlu dijalankan dengan W|X JIT (terutama Chromium dan Iridum), opsi pemasangan sistem file "wxallowed" telah ditambahkan, yang memungkinkan memori digunakan secara bersamaan untuk penulisan dan eksekusi, jika ELF yang dapat dieksekusi File ditandai dengan penanda "wxneeded", dan aplikasi itu sendiri juga dilindungi menggunakan mekanisme janji ΠΈ menyingkap untuk membatasi masing-masing daftar panggilan sistem yang digunakan dan bagian sistem file yang tersedia untuk aplikasi.

Untuk lebih mempersulit eksploitasi kerentanan dalam aplikasi tersebut, diusulkan penambahan mekanisme PETA_STACK, yang memeriksa apakah panggilan sistem dijalankan dari halaman memori yang dapat ditulis. Jika halaman dapat ditulisi, proses terpaksa dihentikan. Dengan cara ini, penyerang tidak akan dapat mengeksploitasi panggilan sistem dan akan dipaksa untuk mencoba menemukan gadget yang diperlukan dalam implementasi JIT atau bahkan melakukan pekerjaan yang lebih sulit untuk mendeteksi stub panggilan sistem secara langsung di dalam. secara tidak sengaja menghubungkan libc.

Proses Chrome/Iridium sudah dilindungi dengan cukup andal menggunakan janji dan pengungkapan, namun menghilangkan kemampuan untuk menggunakan, misalnya, panggilan sistem write(2) jelas memiliki beberapa keuntungan, karena hal ini menciptakan kesulitan tambahan bagi penyerang. Namun kesulitan juga dapat muncul jika implementasi JIT menggunakan panggilan sistem asli dari memori W|X. Namun, ada alasan untuk berharap hal ini tidak terjadi, karena ABI telah diubah beberapa kali, namun tidak ada yang pernah melaporkan masalah.

Perubahan sudah tersedia di snapshot reguler cabang OpenBSD-Current, semua orang yang tertarik diundang untuk mengujinya.

Kabar terkait kemunculan mode tersebut di Chrome/Iridium patut mendapat komentar tersendiri dari Theo Tanpa JIT. Dari sudut pandangnya, ini dapat diterima untuk beberapa model penggunaan, tetapi mungkin tidak untuk semua, karena mode ini jelas akan menambah beban pada prosesor. Saat ini, Chrome sebagian besar akan berfungsi jika Anda menonaktifkan "wxallowed" untuk /usr/local, meskipun mungkin ada masalah dengan beberapa ekstensi (ghostery adalah contohnya). Dengan satu atau lain cara, Theo berharap pekerjaan penuh dalam mode JITless akan dapat beroperasi penuh dalam waktu dekat.

Sumber: opennet.ru

Tambah komentar