Project Zero telah mengembangkan metode untuk mengeksploitasi kerentanan di Linux

Linux

Eksploitasi referensi nol di kernel Linux

Baru-baru ini diumumkan bahwa para peneliti dari tim Google Project Zero telah mengembangkan metode untuk mengeksploitasi kerentanan pada kernel Linux yang disebabkan oleh dereferensi pointer NULL.

Sampai sekarang, masalah kernel yang terkait dengan dereferensi pointer NULL belum mendapat perhatian yang semestinya , karena dianggap tidak realistis untuk mengubah masalah tersebut menjadi serangan yang mengarah pada peningkatan hak akses atau eksekusi kode sendiri (pemetaan proses yang tidak memiliki hak akses ke wilayah alamat yang lebih rendah dilarang).

Secara umum, kesalahan semacam itu menyebabkan kernel menghasilkan peringatan "oops" , setelah itu tugas-tugas yang bermasalah diselesaikan dan status dipulihkan tanpa perlu menghentikan sistem.

Metode serangan baru ini didasarkan pada penanganan status "oops" , yang dapat mengakibatkan peningkatan nilai penghitung referensi (refcount), yang pada gilirannya dapat menyebabkan penghitung tersebut meluap dan melepaskan memori yang terkait dengan refcount.

Dalam hal ini, eksploitasi direduksi menjadi manipulasi tipikal serangan penggunaan-setelah-bebas (situasi muncul di mana jumlah referensi objek menjadi nol, memori dibebaskan, tetapi sebenarnya ada tautan kerja yang menunjuk ke memori yang dibebaskan).

Saat ini, ketika kernel Linux memicu dereferensi null dari dalam konteks proses, hal itu menghasilkan oops , yang berbeda dari kernel panic. Panic terjadi ketika kernel menentukan bahwa tidak ada cara aman untuk melanjutkan eksekusi dan oleh karena itu harus menghentikan semua eksekusi. Namun, kernel tidak menghentikan semua eksekusi selama oops; sebaliknya, kernel mencoba untuk pulih sebaik mungkin dan melanjutkan eksekusi.

Dereferensi pointer NULL digunakan di sini sebagai cara untuk menghasilkan status "oops" dengan cara yang terkontrol. Masalahnya adalah dibutuhkan sekitar 232 panggilan status "oops" untuk mencapai 32-bit refcount overflow.

Dari sudut pandang praktis, dibutuhkan sekitar delapan hari pembangkitan terus-menerus status out-of-place (OOP) untuk melakukan serangan menggunakan eksploitasi yang diusulkan. Jika berhasil, eksploitasi tersebut memungkinkan Anda untuk mengeksekusi kode Anda pada tingkat kernel.

Dereferensi penunjuk NULL yang digunakan dalam eksploit telah diperbaiki pada bulan Oktober, tetapi karena masalah serupa tidak jarang terjadi dan sebelumnya diperlakukan sebagai bug, bukan kerentanan, pengembang akan menambahkan perlindungan umum ke kernel Linux untuk mencegah serangan yang memanipulasi pembuatan "oops ."

 Dalam kasus tugas, itu berarti membuang tumpukan kernel yang ada dan langsung menuju ke make_task_dead yang memanggil do_exit. Kernel juga akan mengirim log "crash" ke dmesg dan jejak kernel yang menunjukkan status kernel saat kesalahan terjadi. Ini mungkin tampak seperti pilihan yang aneh ketika kerusakan memori jelas terjadi; namun, tujuannya adalah untuk membuat bug kernel lebih mudah dideteksi dan dicatat dengan filosofi bahwa sistem yang sedang berjalan jauh lebih mudah untuk di-debug daripada sistem yang down.

Secara khusus , Kernel 6.2 menyertakan perubahan untuk membatasi jumlah maksimum "oops" . Setelah mencapai batas, yang secara default ditetapkan menjadi 10 oops (Anda dapat mengubahnya menggunakan parameter oops_limit jika diinginkan), kernel akan memulai transisi ke keadaan "panic", diikuti oleh reboot, yang tidak akan memungkinkan jumlah iterasi yang diperlukan untuk mengatur ulang refcount ke nol.

Pembatasan juga direncanakan akan ditransfer ke cabang kernel yang dirilis sebelumnya, tetapi masih didukung, serta paket kernel dari distribusi populer.

Terakhir, jika Anda tertarik untuk mempelajari lebih lanjut tentang hal ini , Anda dapat menemukan detailnya di tautan berikut.


Tambahkan sebagai sumber pilihan di Google