Driver pihak ketiga berbahaya pada sistem Anda atau LOLDrivers


Tahukah Anda bahwa driver yang sepenuhnya sah dapat memberikan penyerang kesempatan untuk mendaftar di sistem Anda untuk waktu yang lama, tetap di dalam bahkan setelah menginstal ulang? Atau mengubah komputer Anda menjadi batu bata? Sebagai contoh, beberapa driver yang tampaknya dipercaya (ditandatangani) tidak sengaja adalah alat untuk menimpa BIOS. Setelah serangan seperti itu, hanya programmer yang akan menyelamatkan.


Di Windows, ada aplikasi / skrip / pustaka tepercaya dengan tambahan menarik fungsi berbahaya seperti mengeksekusi kode arbitrer, mengunduh file, melewati UAC, dll. Jika fungsionalitas tambahan semacam itu ditemukan dalam komponen kernel, itu menjadi lebih menarik.


Dimulai dengan Windows Vista x64, kebijakan Driver Signature Enforcement (DSE) berlaku - semua driver tingkat kernel harus ditandatangani. Jika penyerang (dengan hak pengguna / administrator) setelah menembus sistem ingin mendapatkan tingkat akses maksimum (instal rootkit kernel / bootkit / SMM-rootkit / BIOS-rootkit), ia harus entah bagaimana mem-bypass persyaratan tanda tangan untuk driver. Kemampuan untuk memanggil fungsi atau instruksi tertentu dari mode kernel dalam mode kernel dapat memberikan penyerang alat untuk meningkatkan hak istimewa, mengungkapkan informasi atau menyebabkan penolakan layanan. Kami menyebut fungsi ini sebagai fungsi tujuan ganda (dalam beberapa kasus, ini dapat disebut kerentanan atau pintu belakang, namun, diskusi tentang definisi yang benar berada di luar cakupan artikel ini).


Penanganan DSE


Mari kita lihat opsi apa yang biasanya dimiliki penyerang untuk mem-bypass DSE (Anda entah bagaimana harus menembus ring0). Tabel di bawah ini merangkum cara-cara untuk memotong DSE dengan kelebihan dan kekurangan mereka (untuk penyerang, dan penjaga keamanan perhatikan). Perlu dicatat bahwa informasi ini berlaku untuk Windows x64, dimulai dengan Vista.


CaraManfaatnyaKekurangan
Mengatur Data Konfigurasi Boot (Mode Tes)Kesederhanaan
  • Ini tidak berfungsi untuk semua aplikasi.
  • Tanda air muncul di desktop
  • Diperlukan boot ulang
Menggunakan kunci pribadi yang dikompromikanKemampuan untuk menginstal driver apa pun
  • Jika kebocoran terdeteksi, sertifikat ditambahkan ke Daftar Pencabutan Sertifikat (CRL)
Menggunakan Kerentanan dalam Menerapkan Kontrol DSETidak terdeteksi oleh antivirus Windows dan sistem keamanan
  • Kesulitan menemukan kerentanan seperti itu
  • Tergantung versi OS
Modifikasi mekanisme pemeriksaan driver (bootmgr, winload.exe, winresume.exe, ci.dll)Kemampuan untuk menginstal driver apa pun tanpa pemeriksaan OC
  • Kompleksitas modifikasi
  • Membutuhkan cara untuk memotong Boot Aman (jika diaktifkan)
  • Diperlukan boot ulang
  • Tergantung versi OS
  • Kontrol file lainnya
Menggunakan driver yang ditandatangani dengan kerentananKesulitan deteksi serangan
  • Kesulitan menemukan kerentanan seperti itu
  • Kunci Keamanan Deteksi
Menggunakan driver yang ditandatangani dengan fungsi tujuan gandaTidak terdeteksi oleh antivirus Windows dan sistem keamanan
  • Kompleksitas pencarian (untuk penyerang) dari driver dengan fungsi tujuan ganda yang diperlukan

Seperti yang dapat Anda lihat dari tabel, driver yang ditandatangani dengan fungsi tujuan ganda adalah cara yang paling menarik untuk mem-bypass DSE untuk penyerang.


Fungsionalitas berbahaya atau tujuan ganda


Mari kita lihat contoh-contoh kemampuan jahat yang penyerang muncul di hadapan pengemudi dengan fungsi tujuan ganda berbahaya.


  • Peningkatan hak istimewa ke tingkat / SISTEM admin. Dibutuhkan baca / tulis memori fisik. Serangan ini dapat dilakukan, misalnya, menggunakan driver ASMMAP dari ASUS. Untuk melakukan ini, baca memori fisik dan temukan struktur EPROCESS (ini adalah elemen dari daftar tertaut), kemudian lihat daftar untuk mencari proses yang tingkat keistimewaannya ingin kita tingkatkan, serta beberapa proses terkenal dengan tingkat SISTEM (misalnya, lsass, wininit). Kemudian salin nilai bidang Token dari struktur proses sistem ke struktur proses target. Penjelasan lebih rinci tentang serangan diberikan di sini .
  • Menonaktifkan SMEP. Untuk melakukan ini, Anda perlu menulis ke register kontrol cr4 (lebih tepatnya, reset bit ke-20). Misalnya, driver bandainamcoonline.sys tidak hanya menonaktifkan SMEP, tetapi juga membantu mengeksekusi kode sesuai dengan penunjuk yang diberikan kepada pengguna. Bagi yang berminat, ada artikel dengan deskripsi rinci tentang pengemudi.
  • Eksekusi kode arbitrer dalam mode kernel. Dibutuhkan Baca / tulis memori fisik dan MSR. Maksudnya adalah untuk mengganti alamat (terletak di salah satu MSR), di mana transisi akan dilakukan ketika melakukan panggilan sistem, ke alamat lokasi kode penyerang. Di sini Anda dapat menemukan informasi lebih lanjut tentang ini. PatchGuard akan mengganggu di sepanjang jalan, tetapi Anda bisa mengetahuinya jika mau.


    Karena driver dan PatchGuard keduanya berjalan di Ring 0, tidak ada yang mencegah driver dari menonaktifkan pemeriksaan PatchGuard (sampai, tentu saja, sampai Microsoft mendengarkan Intel dan melampaui model dengan dua cincin perlindungan). Pengembang kernel di Microsoft sangat menyadari fakta ini dan melakukan berbagai tindakan untuk menyembunyikan lokasi kode ini, mengaburkan tindakannya dan struktur internal yang digunakan. Dengan kata lain, karena ketidakmampuan untuk mencegah Anda memodifikasi kode PatchGuard, mereka mencoba yang terbaik untuk menyembunyikannya.

    - Blunden B. arsenal Rootkit: Melarikan diri dan menghindari di sudut-sudut gelap sistem.

    Asli
    Mengingat bahwa kode driver dan kode PatchGuard keduanya dijalankan di Ring 0, tidak ada yang mencegah KMD menonaktifkan pemeriksaan PatchGuard (kecuali, tentu saja, Microsoft mengambil petunjuk dari Intel dan bergerak melampaui model privilege dua-cincin). Insinyur kernel di Microsoft sangat menyadari fakta ini dan melakukan segala macam pemrograman akrobatik untuk mengaburkan di mana kode berada, apa yang dilakukannya, dan struktur data internal yang dimanipulasi. Dengan kata lain, mereka tidak dapat mencegah Anda memodifikasi kode PatchGuard, jadi mereka akan berusaha keras untuk menyembunyikannya.

    - Blunden B. arsenal Rootkit: Melarikan diri dan menghindari di sudut-sudut gelap sistem.



  • Entri BIOS. Contoh di alam liar adalah Lojax . Penyerang mengambil RwDrv.sys yang terkenal dan menggunakannya untuk tujuan kotor mereka: mereka membaca BIOS, memodifikasi dan menulis kembali. Menginstal ulang Windows tidak akan membantu di sini, karena kode jahat berada di firmware pada SPI-flash. Jika BIOS overwrite tidak berhasil (atau ditimpa secara khusus), maka itu juga tidak menyenangkan. Bagaimanapun, Anda harus mengemudi setelah programmer untuk memperbaiki konsekuensi yang mengganggu.
  • Hubungi SMI handler. Pertama, tidak semua BIOS sama-sama tidak berdaya terhadap kode dalam mode ring0: ada berbagai mekanisme untuk perlindungan baca / tulis, jadi mungkin ada situasi di mana Anda harus turun lebih rendah - ke mode SMM (yang paling istimewa). Salah satu cara untuk sampai ke sana dari mode kernel adalah dengan menarik SMI handler (cukup sering ada yang rentan di antara mereka). Untuk memanggil pengendali SMI, Anda harus dapat menulis ke port I / O, dan ini hanya dapat dilakukan dengan hak akses ring0. Artinya, driver dengan kemampuan untuk menulis ke port I / O mampu mendeteksi pengendali SMI yang rentan yang memungkinkan penyerang untuk mengeksekusi kode dalam mode SMM. Dalam contoh tersebut, penulis menggunakan driver RwDrv.sys.
  • Informasi tentang sistem. Membaca memori kernel (melalui membaca memori fisik), membaca BIOS, informasi tentang pengaturan sistem, perangkat yang terhubung dan mekanisme perlindungan yang diaktifkan / dinonaktifkan (melalui membaca MSR, register kontrol, akses ke port input / output), dalam beberapa kasus, hypervisor yang dikenal dapat dideteksi ( seperti VirtualBox via MSR ). Untuk tugas ini, bahkan driver yang hanya bisa membaca, belum tentu menulis, paling sering cocok. Misalnya, RamCaptureDriver64.sys dari Belkasoft cocok untuk membaca memori fisik.

Jika kami menganalisis berbagai artikel dan catatan tentang CVE, kami dapat membedakan beberapa klasifikasi yang berpotensi berbahaya saat mengakses dari fungsi ring3 pada driver. Tabel di bawah ini mencantumkan fungsi berbahaya dan sumber informasi tentang mereka.


Fungsi Berbahaya yang DiidentifikasiSumber informasi tentang praktik keamanan
Baca / tulis register MSRCVE-2018-10711, CVE-2018-18535, CVE-2018-19323, CVE-2007-5633, CVE-2007-5761
Baca / Tulis Port I / OCVE-2018-10712, CVE-2018-18536, CVE-2018-19322
Baca / Tulis Memori FisikCVE-2018-16712, CVE-2018-10710, CVE-2017-15302, CVE-2017-15303, CVE-2018-19321
Register kontrol baca / tulisCVE-2018-10709, Eset - Eksploitasi Windows pada tahun 2016
Kinerja Akses / Penghitung JamLeif Uhsadel, Andy Georges, Ingrid Verbauwhed - Memanfaatkan Penghitung Kinerja Perangkat Keras
Baca / tulis register benderaWojtczuk R., Rutkowska J. Mengikuti Kelinci Putih: Serangan perangkat lunak terhadap Intel VT-d technolog
Instruksi akses cacheDeteksi Serangan Saluran Samping Berbasis Cache melalui Teknologi Pemantauan Intel Cache dan Penghitung Kinerja Perangkat Keras

Dan ini bukan daftar seluruh kemungkinan fungsi berbahaya. Anda juga dapat berbicara tentang membaca / menulis memori virtual kernel, membaca / menulis MMIO, akses ke perangkat PCI, dll.


Tiga fungsi pertama adalah yang paling menarik, serta bahaya terbesar (dan paling mungkin untuk menemukan driver dengan fungsi-fungsi tersebut): baca / tulis register MSR, baca / tulis port I / O, baca / tulis memori fisik. Menggunakan register kontrol, Anda dapat mem-bypass beberapa mekanisme perlindungan, menulis ke register bendera memungkinkan Anda untuk mengaktifkan port input / output baca / tulis di ring3 (omong-omong, disebutkan dalam artikel ini di Habré), keberhasilan serangan pada saluran pihak ketiga (dengan mengakses cache, memonitor counter kinerja / siklus) kemungkinan besar tidak mungkin.


Dalam proses pembuatan bahan ini pada konferensi DEFCON 27 di Las Vegas, peneliti Jesse Michael dan Mickey Shkatov mempresentasikan karya "Keluar dari kernel jika Anda tidak bisa mengemudi" , yang juga membahas masalah ini, dan kami sarankan Anda mempelajari bahan ini untuk melengkapi gambar. Skenario untuk menggunakan driver tersebut sangat sederhana dan jelas, dan contoh bagian kode yang bertanggung jawab untuk fungsi paling kritis disajikan. Dan juga menyediakan kode untuk bekerja dan menemukan driver serupa.


Secara umum, perlu dicatat bahwa topik ini telah lama menjadi perhatian para peneliti keamanan. Kembali pada tahun 2018, peneliti Alexander Matrosov dalam artikelnya "Apa yang membuat driver OS berbahaya untuk BIOS?" mengangkat pertanyaan ini dan menunjukkan betapa sederhananya mengeksploitasi BIOS.


Driver Fungsi Ganda


Di bawah ini adalah perwakilan driver yang paling terkenal dengan fungsi tujuan ganda.


  • RwDrv.sys adalah driver yang sangat populer (dilengkapi dengan utilitas RWeverything ). Membaca dan menulis memori fisik, port I / O, register MSR dan kontrol. Berulang kali digunakan di berbagai PoC, dan kemudian di rootkit Lojax yang disebutkan sebelumnya. Antarmuka ditulis untuk itu dalam C ++, dan juga digunakan dalam chipsec .


  • cpuz / gpuz



    Membaca dan menulis memori fisik, port, dan MSR. Ada beberapa utilitas PoC yang menggunakannya (di sini dan di sini ).


  • pcdsrvc_x64 - driver dari Dell, untuk informasi lebih lanjut, hubungi pos ini . Memungkinkan Anda membaca / menulis memori fisik di port I / O.


  • AsIO64.sys
    gambar
    Ini memberikan kemampuan untuk membaca / menulis memori fisik dan port I / O, dan juga dilengkapi dengan dll yang nyaman untuk melakukan permintaan ini.


  • Asmmap64.sys adalah driver lain dari ASUS yang memungkinkan Anda membaca / menulis memori fisik, port I / O, dan MSR. Akan sangat menyenangkan bagi penyerang, karena akses ke pengemudi dapat dibuat dari pengguna biasa tanpa hak administrator. Orang-orang yang ingin tahu dapat beralih ke sumbernya .


  • ntiolib_x64.sys / winio64.sys - driver dari MSI, mereka dijelaskan secara rinci dalam artikel yang disebutkan sebelumnya. Menggunakan ntiolib_x64.sys Anda dapat membaca / menulis memori fisik, port I / O dan MSR, winio64.sys menyediakan semua fungsi ini kecuali MSR.



Biasanya, fungsi berbahaya yang dijelaskan diakui sebagai kerentanan jika driver dapat diakses oleh pengguna tanpa hak administrator (ACL salah) atau ketika memungkinkan menjalankan kode arbitrer secara langsung (seperti dalam bandainamcoonline.sys). Dalam kasus lain, ini hanya fungsionalitas, dan karena pengguna memiliki hak administrator, ia dapat menggunakan semua fungsi driver dan ini adalah norma.


Jika Anda berpikir bahwa tidak ada lebih dari selusin driver seperti itu, maka Anda sangat keliru. Anda dapat melihat pilihan driver yang menarik ini. Daftar ini berisi driver dari ASUS, AVAST, Razer, LG, American Megatrends, dan perusahaan terkenal lainnya. Jadi ada banyak dari mereka, Anda hanya perlu mencari. Jadi, mereka menimbulkan ancaman nyata.


Ancaman ini juga dipahami oleh karyawan Microsoft. Dan mereka akan berterima kasih atas informasi tentang driver tersebut;)
gambar


Rekomendasi


Untuk pengguna:


  • Anda seharusnya tidak duduk di bawah akun administrator dan menonaktifkan UAC (meskipun tidak sulit untuk menghindarinya ).
  • Anda dapat menginstal detektor yang mencoba menginstal driver (misalnya, di sini ).
  • Jika perlu menggunakan utilitas dengan driver tersebut (diagnostik, untuk memperbarui BIOS, dll.), Hapus driver setelah digunakan.
  • Mengatur Device Guard (jika Anda adalah pemilik Windows 10 yang bahagia). Dengan menggunakan teknologi ini, Anda dapat membuat kebijakan integritas kode Anda sendiri dan menambahkan daftar putih program dan sertifikat. Sebagai contoh, tambahkan ke kebijakan persyaratan bahwa setiap driver mode kernel harus memiliki tanda tangan Microsoft WHQL. Dalam posting ini , Anda dapat membiasakan diri dengan mengatur Device Guard untuk tujuan ini.

Produsen lebih baik tidak menandatangani driver seperti itu. Jika pengguna perlu memperbarui BIOS, memeriksa kerentanan sistem (halo, chipsec), mengukur kinerja atau melakukan beberapa manipulasi lain yang memerlukan instalasi driver tersebut, maka ia mungkin masuk ke Mode Uji, melakukan semua ini, dan kemudian keluar. Kegunaan kemudian akan turun, tetapi keamanan akan meningkat.


Kesimpulan


Jika sesuatu ditandatangani, berarti Anda tidak dapat mempercayainya. Pertama, Anda dapat menandatangani sesuatu seperti itu, dan kedua, seorang penyerang dapat memanfaatkan yang ditandatangani ini (bahkan jika itu dari pabrikan tepercaya).


Spesialis keamanan informasi tidak boleh mengecualikan dari situasi model ancaman di mana penyerang membutuhkan driver dengan fungsi berbahaya untuk melakukan serangan. Ada cukup driver seperti itu, cukup sederhana untuk melakukan ini. Jika serangan itu tidak dilakukan dengan driver pop seperti RwEverything, tetapi dengan beberapa yang kurang dikenal, maka akan semakin sulit untuk dideteksi. Jadi, Anda harus waspada, memonitor hal-hal seperti itu dan tidak mengizinkan setiap driver untuk boot ke sistem.


Penulis: Elizaveta Khomenko

Source: https://habr.com/ru/post/id468691/


All Articles