Bagikan melalui


Masalah keamanan untuk objek dan tampilan bagian

Driver yang membuat bagian dan tampilan yang tidak akan dibagikan dengan mode pengguna harus menggunakan protokol berikut saat mereka bekerja dengan bagian dan tampilan:

  • Driver harus menggunakan handel kernel saat membuka handel ke objek bagian. Pengemudi dapat memastikan bahwa pegangan adalah pegangan kernel dengan membuatnya dalam proses sistem operasi, atau menentukan atribut OBJ_KERNEL_HANDLE untuk pegangan. Untuk informasi selengkapnya, lihat Object Handles.

  • Tampilan harus dipetakan hanya dari thread sistem. (Alternatifnya, tampilan dapat diakses dari proses yang konteksnya dibuat.) Sebuah driver dapat memastikan bahwa tampilan dipetakan dari proses sistem dengan menggunakan utas pekerja sistem untuk melakukan operasi pemetaan. Untuk informasi selengkapnya, lihat Rangkaian Pekerja Sistem dan Konteks Utas Driver.

Driver yang berbagi tampilan-tampilan dengan proses dalam mode pengguna harus menggunakan protokol berikut saat mereka bekerja dengan bagian dan tampilan-tampilan:

  • Driver, bukan proses mode pengguna, harus membuat objek bagian dan memetakan tampilan.

  • Seperti disebutkan sebelumnya, driver harus menggunakan handel kernel saat membuka handel ke objek bagian. Pengemudi dapat memastikan bahwa pegangan adalah pegangan kernel dengan membuatnya dalam proses sistem operasi, atau menentukan atribut OBJ_KERNEL_HANDLE untuk pegangan. Untuk informasi selengkapnya, lihat Object Handles.

  • Tampilan dipetakan dalam konteks utas proses yang berbagi tampilan. Driver tingkat tertinggi dapat menjamin tampilan dipetakan dalam konteks proses saat ini dengan melakukan operasi pemetaan dalam rutinitas pengiriman, seperti DispatchDeviceControl. Rutin pengiriman driver tingkat bawah berjalan dalam konteks utas arbitrer, oleh karena itu tidak dapat memetakan tampilan dengan aman dalam rutin pengiriman. Untuk informasi selengkapnya, lihat Konteks Utas Driver.

  • Semua akses memori ke tampilan dalam driver harus dilindungi dengan blok kode try-except. Aplikasi mode pengguna yang berbahaya dapat menghapus pemetaan tampilan atau mengubah status perlindungan tampilan. Salah satu akan menyebabkan sistem crash kecuali jika dilindungi oleh blok try-except. Untuk informasi selengkapnya, lihat Menangani Pengecualian.

Driver juga harus memvalidasi konten tampilan seperlunya. Penulis driver tidak dapat berasumsi bahwa hanya komponen mode pengguna tepercaya yang memiliki akses ke tampilan.

Driver yang harus berbagi objek bagian dengan aplikasi mode pengguna (yang harus dapat membuat tampilannya sendiri) harus menggunakan protokol berikut:

  • Pengemudi, bukan proses mode pengguna, yang harus membuat objek sektion. Pengemudi tidak boleh pernah menggunakan handle yang diteruskan dari mode pengguna.

  • Sebelum meneruskan handel ke mode pengguna, driver harus memanggil ObReferenceObjectByHandle untuk mendapatkan referensi ke objek bagian. Ini mencegah aplikasi berbahaya menghapus objek section dengan menutup handle. Referensi objek harus disimpan di ekstensi perangkat driver.

  • Setelah driver tidak lagi menggunakan objek bagian, driver harus memanggil ObDereferenceObject untuk merilis referensi objek.

Pada sistem yang menjalankan Microsoft Windows Server 2003 dengan Paket Layanan 1 (SP1) dan versi yang lebih baru, hanya driver mode kernel yang dapat membuka \Device\PhysicalMemory. Namun, driver dapat memutuskan untuk memberikan handle kepada aplikasi pengguna. Untuk mencegah masalah keamanan, hanya aplikasi pengguna yang dipercaya driver yang harus diberikan akses ke \Device\PhysicalMemory.