Project Zero telah membangunkan kaedah untuk mengeksploitasi kelemahan dalam Linux

Linux

Eksploitasi rujukan nol dalam kernel Linux

Baru-baru ini diumumkan bahawa para penyelidik dari pasukan Google Project Zero telah membangunkan kaedah untuk mengeksploitasi kerentanan dalam kernel Linux yang disebabkan oleh penyahrujukan penunjuk NULL.

Sehingga kini, masalah kernel yang berkaitan dengan penyahrujukan penunjuk NULL belum mendapat perhatian sewajarnya , kerana dianggap tidak realistik untuk mengubah masalah sedemikian menjadi serangan yang membawa kepada peningkatan keistimewaan atau pelaksanaan kod sendiri (pemetaan proses yang tidak mempunyai keistimewaan ke kawasan bawah ruang alamat adalah dilarang).

Sebagai peraturan umum, ralat sedemikian membawa kepada penjanaan amaran oops oleh kernel, selepas itu tugas yang bermasalah selesai dan keadaan dipulihkan tanpa perlu menghentikan sistem.

Kaedah serangan baharu ini adalah berdasarkan pengendalian keadaan "oops" , yang boleh mengakibatkan peningkatan nilai kaunter rujukan (refcount), yang seterusnya boleh menyebabkan kaunter melimpah dan melepaskan memori yang berkaitan dengan refcount.

Dalam kes ini, eksploitasi dikurangkan kepada manipulasi tipikal serangan selepas penggunaan bebas (situasi timbul di mana kiraan rujukan objek menjadi sifar, ingatan dibebaskan, tetapi sebenarnya terdapat pautan kerja yang menunjuk ke memori yang dibebaskan).

Pada masa ini, apabila kernel Linux mencetuskan penyahrujukan nol dari dalam konteks proses, ia menghasilkan oops , yang berbeza daripada panik kernel. Panik berlaku apabila kernel menentukan bahawa tiada cara yang selamat untuk meneruskan pelaksanaan dan oleh itu mesti menghentikan semua pelaksanaan. Walau bagaimanapun, kernel tidak menghentikan semua pelaksanaan semasa oops; sebaliknya, kernel cuba untuk pulih sebaik mungkin dan meneruskan pelaksanaan.

Penyahrujukan penunjuk NULL digunakan di sini sebagai cara untuk menjana keadaan "ops" dengan cara terkawal. Masalahnya ialah memerlukan kira-kira 232 panggilan status "oops" untuk mencapai limpahan kiraan semula 32-bit.

Dari sudut praktikal, ia mengambil masa kira-kira lapan hari penjanaan keadaan luar tempat (OOP) yang berterusan untuk melakukan serangan menggunakan eksploit yang dicadangkan. Jika berjaya, eksploit tersebut membolehkan anda melaksanakan kod anda pada peringkat kernel.

Penyimpangan penunjuk NULL yang digunakan dalam eksploitasi telah ditetapkan pada bulan Oktober, tetapi memandangkan isu yang sama tidak jarang berlaku dan sebelum ini dianggap sebagai pepijat, bukan kelemahan, pembangun akan menambah perlindungan umum pada kernel Linux untuk mengelakkan serangan yang memanipulasi penjanaan "ops ."

 Dalam kes tugasan, ini bermakna membuang tindanan kernel sedia ada dan pergi terus ke make_task_dead yang memanggil do_exit. Kernel juga akan menghantar ke dmesg log "crash" dan jejak kernel yang menunjukkan keadaan kernel semasa ralat berlaku. Ini mungkin kelihatan seperti pilihan yang ganjil apabila kerosakan ingatan telah berlaku dengan jelas; walau bagaimanapun, tujuannya adalah untuk menjadikan pepijat kernel lebih mudah untuk dikesan dan log di bawah falsafah bahawa sistem yang sedang berjalan adalah lebih mudah untuk nyahpepijat daripada yang menurun.

Khususnya , Kernel 6.2 merangkumi perubahan untuk mengehadkan bilangan maksimum "oops" . Selepas mencapai had, yang ditetapkan kepada 10 oops secara lalai (anda boleh mengubahnya menggunakan parameter oops_limit jika dikehendaki), kernel akan memulakan peralihan kepada keadaan "panik", diikuti dengan but semula, yang tidak akan membenarkan bilangan lelaran yang diperlukan untuk menetapkan semula kiraan semula kepada sifar.

Ia juga dirancang bahawa sekatan itu akan dipindahkan ke cawangan kernel yang dikeluarkan sebelum ini, tetapi masih menyokong, serta pakej kernel pengedaran popular.

Akhir sekali, jika anda berminat untuk mengetahui lebih lanjut tentang perkara ini , anda boleh mendapatkan butiran lanjut di pautan berikut.


Tambahkan sebagai sumber pilihan dalam Google