Merancang untuk Memperkukuh Mekanisme Keselamatan W^X OpenBSD

Theo De Raadt dikongsi merancang untuk mengukuhkan mekanisme perlindungan memori W^X (Write XOR Execute). Intipati mekanisme ini ialah halaman memori proses tidak boleh diakses secara serentak untuk penulisan dan pelaksanaan. Oleh itu, kod boleh dilaksanakan hanya selepas penulisan dilumpuhkan, dan penulisan ke halaman memori hanya boleh dilakukan selepas pelaksanaan dilumpuhkan. Mekanisme W^X membantu melindungi aplikasi ruang pengguna daripada serangan limpahan penimbal biasa, termasuk limpahan tindanan dan aktif dalam OpenBSD secara lalai.

Dari permulaan kerja pada W^X, adalah jelas bahawa ini adalah jalan yang panjang, kerana terdapat sejumlah besar aplikasi menggunakan JIT. Pelaksanaan JIT boleh dibahagikan kepada tiga kategori:

  • Menukar memori antara keadaan W dan X, menerima "kos" panggilan sistem mprotect.
  • Mencipta alias antara sepasang pemetaan W dan X bagi memori yang sama.
  • Pilihan yang paling "kotor" memerlukan model memori W|X yang membenarkan rakaman dan pelaksanaan serentak.

Pada masa ini, terdapat lebih sedikit program yang menggunakan pilihan ketiga dan lebih banyak menggunakan yang pertama dan kedua. Walau bagaimanapun, oleh kerana ia adalah perlu untuk menjalankan program dengan W|X JIT (terutamanya Chromium dan Iridum), pilihan pemasangan sistem fail "wxallowed" telah ditambahkan, yang membenarkan memori digunakan secara serentak untuk kedua-dua penulisan dan pelaksanaan, sekiranya ELF boleh laku fail ditandakan dengan penanda "wxneeded", dan aplikasi itu sendiri juga dilindungi menggunakan mekanisme ikrar ΠΈ memperkenalkan untuk mengehadkan senarai panggilan sistem yang digunakan dan bahagian sistem fail yang tersedia untuk aplikasi, masing-masing.

Untuk merumitkan lagi eksploitasi kelemahan dalam aplikasi sedemikian, tambahan kepada mekanisme dicadangkan MAP_STACK, yang menyemak sama ada panggilan sistem sedang dilaksanakan daripada halaman memori boleh tulis. Jika halaman boleh ditulis, proses terpaksa ditamatkan. Dengan cara ini, penyerang tidak akan dapat mengeksploitasi panggilan sistem dan akan dipaksa untuk cuba mencari alat yang diperlukan dalam pelaksanaan JIT atau bahkan melakukan kerja yang lebih sukar untuk mengesan stub panggilan sistem terus di dalam. secara tidak sengaja memaut libc.

Proses Chrome/Iridium sudah pun dilindungi dengan pasti menggunakan ikrar dan dedahkan, tetapi mengalih keluar keupayaan untuk menggunakan, sebagai contoh, panggilan sistem write(2) jelas mempunyai beberapa kelebihan, kerana ia mewujudkan kesukaran tambahan untuk penyerang. Walau bagaimanapun, kesukaran juga boleh timbul jika pelaksanaan JIT menggunakan panggilan sistem asli daripada memori W|X. Walau bagaimanapun, terdapat sebab untuk berharap bahawa ini tidak akan berlaku, kerana ABI telah diubah beberapa kali, tetapi tiada siapa yang pernah melaporkan masalah.

Perubahan sudah tersedia dalam gambar biasa cawangan OpenBSD-Current, semua orang yang berminat dijemput untuk menguji.

Berita berkaitan tentang kemunculan mod dalam Chrome/Iridium layak mendapat ulasan berasingan daripada Theo JITless. Dari sudut pandangannya, ini boleh diterima untuk beberapa model penggunaan, tetapi mungkin tidak untuk semua, kerana mod ini jelas akan meningkatkan beban pada pemproses. Pada masa ini, Chrome kebanyakannya akan berfungsi jika anda melumpuhkan "wxallowed" untuk /usr/local, walaupun mungkin terdapat masalah dengan beberapa sambungan (ghostery ialah contohnya). Satu cara atau yang lain, Theo berharap kerja sepenuhnya dalam mod JITless akan dibawa ke keadaan beroperasi sepenuhnya dalam masa terdekat.

Sumber: opennet.ru

Tambah komen