Eksploitasi eskalasi hak istimewa lokal untuk pengemudi kernel CPU-Z.
Aplikasi CPU-Z akan menginstal driver yang ditandatangani rentan untuk mengakses data kernel dari USERMODE. Sebelum v1.81, driver CPU-Z mengekspos tiga IOCTL yang memungkinkan aplikasi usermode untuk membaca register kontrol, membaca DWORDS dari memori fisik, dan menulis DWORDS ke memori fisik. Kami menyalahgunakan fungsi ini untuk mendapatkan eksekusi kode mode kernel penuh dan menelurkan shell sistem sebagai bukti konsep.
Eksploitasi ini mendukung Windows XP - Windows 10 1607:
Eksploitasi ini diuji pada sistem berikut dengan CPU-Z V1.76:
* Pada Windows 1703 dan kemudian Kernel Control Flow Guard (CFG) diaktifkan secara default [1], menghasilkan cek bug Kernel_security_check_failure.
Untuk menjalankan eksploitasi ini, mulai aplikasi CPU-Z, dan jalankan Exploit.exe dari prompt perintah sebagai pengguna normal. Jika berhasil, itu harus menelurkan proses CMD.exe baru yang berjalan sebagai sistem. Perhatikan bahwa eksploitasi ini akan gagal jika dijalankan dari proses integritas rendah karena penggunaan ntquerysysteminformation.
Driver kernel CPU-Z sebelum v1.81 memungkinkan aplikasi USermode untuk membaca register kontrol, membaca DWORDS dari memori fisik, dan menulis DWORDS ke memori fisik. Kami menyalahgunakan fungsi ini untuk membaca CR3 dan melintasi tabel halaman untuk membangun primitif membaca/menulis secara sewenang -wenang di seluruh ruang memori virtual.
Dengan membaca/menulis lengkap, kami membalikkan bit pengguna/pengawas pada entri tabel halaman (PTE) yang berisi muatan kami ke kernelmode ke bypass supervisor Mode Execution Prevention (SMEP). Kami kemudian menimpa pointer fungsi di NT! Haldispatchtable [1] dan memicu muatan dengan menelepon ntqueryintervalprofile.
Sebagai bukti konsep, muatan akan menetapkan token sistem ke proses CMD.exe yang ditangguhkan, dan melanjutkan prosesnya. Ini harus menghasilkan prompt perintah baru yang berjalan sebagai otoritas/sistem NT. Payload tidak bergantung pada offset statis dan dengan demikian harus bekerja pada Windows XP+.
Sejumlah mitigasi telah diperkenalkan selama dua tahun terakhir yang membatasi keefektifan eksploitasi ini. Deskripsi singkat di bawah ini.
Pada versi 1.81, driver yang disediakan dengan CPU-Z telah ditambal untuk membatasi set penelepon yang dapat membuka objek perangkatnya dan beberapa implementasi IOCTL telah dihapus. Pada permintaan untuk membuka objek perangkat driver, ia akan memeriksa untuk melihat apakah proses saat ini memiliki seloaddriverprivilege diaktifkan. Jika privilige ini hilang atau dinonaktifkan, pengemudi akan menolak permintaan dengan status_access_denied. Perhatikan bahwa ketika berjalan sebagai administrator, sepele untuk memungkinkan hak istimewa ini dari USERMode. Selain itu, register Kontrol IOCTL untuk membaca telah dihapus (meskipun implementasi membaca/menulis memori fisik tetap ada). Tanpa kemampuan untuk membaca basis tabel halaman dari CR3, metode eksploitasi dalam proyek ini tidak lagi layak. Perhatikan bahwa driver CPU-Z menyediakan banyak ioctl lain yang dapat digunakan untuk eksploitasi, seperti membaca dan menulis ke register khusus model yang sewenang-wenang.
Pada Windows 10 1703 (Pembaruan Pembuat), penjaga aliran kontrol kernel diaktifkan secara default pada x86_64. Panggilan melalui haldispatchtable akan menghasilkan cek bug Kernel_security_check_failure karena dilindungi oleh CFG. Jika Virtualisasi Berbasis Keamanan (VBS) tidak diaktifkan, harus dimungkinkan untuk menambahkan muatan sebagai target panggilan yang valid untuk memotong CFG.
Jika Virtualisasi Berbasis Keamanan (VBS) diaktifkan, itu akan membunuh sebagian besar eksploitasi ini. Manipulasi PTE yang digunakan untuk menonaktifkan SMEP tidak akan lagi dimungkinkan, karena PTE akan dilindungi oleh hypervisor. Selain itu, bypass CFG akan diperlukan pada x86_64 untuk mendapatkan eksekusi kode melalui haldispatchtable karena bitmap CFG kernel tidak akan dapat ditulis.
Kerentanan yang digunakan dalam eksploitasi ini dirinci dalam CVE-2017-15302 dan CVE-2017-15303. Bukti konsep lain dapat dilihat di CPUZ-DSEFIX [5].
[1] https://community.osr.com/discussion/283374/control-flow-guard-question
[2] https://www.cvedetails.com/cve/cve-2017-15302/
[3] https://www.cvedetails.com/cve/cve-2017-15303/
[4] https://github.com/akayn/bugs/blob/master/cpuid/cve-2017-15302/readme.md
[5] https://github.com/samlarenn/cpuz-dsefix
Selain itu, metode overwrite haldispatchtable yang digunakan dalam eksploitasi ini adalah vektor yang umum digunakan untuk mendapatkan eksekusi kode dari kernel baca/tulis primitif. Untuk detail tambahan tentang teknik ini, lihat sumber daya di bawah ini.
[6] http://poppopret.blogspot.com/2011/07/windows-kernel-exploitation-basics-part.html
[7] https://www.abatchy.com/2018/01/kernel-exploitation-7
[8] https://osandamalith.com/2017/06/14/windows-kernel-exploitation-arbitrary-overwrite/
[9] https://rootkits.xyz/blog/2017/09/kernel-write-what-where/