Bagikan melalui


Hal-Hal yang Perlu Dipertimbangkan dalam Pemrograman Driver Callout

Pertimbangkan topik berikut saat Anda memprogram driver callout Windows Filtering Platform.

Mode Pengguna vs. Mode Kernel

Jika pemfilteran yang diinginkan dapat dilakukan dengan menggunakan fungsionalitas pemfilteran standar yang dibangun di Platform Pemfilteran Windows, vendor perangkat lunak independen (ISV) harus menulis aplikasi manajemen mode pengguna untuk mengonfigurasi mesin filter alih-alih menulis driver callout mode kernel. Driver callout berbasis kernel hanya boleh ditulis ketika Anda harus memproses data jaringan dengan cara yang tidak dapat ditangani oleh fungsi pemfilteran bawaan standar. Untuk informasi tentang cara menulis aplikasi manajemen Windows Filtering Platform mode pengguna, lihat dokumentasi Windows Filtering Platform di Microsoft Windows SDK.

Pilihan Lapisan Pemfilteran

Driver callout harus memfilter data jaringan pada lapisan pemfilteran tertinggi yang mungkin di tumpukan jaringan. Misalnya, jika tugas pemfilteran yang diinginkan dapat ditangani di lapisan aliran, tugas tersebut tidak boleh diimplementasikan di lapisan jaringan. Untuk informasi selengkapnya tentang rekomendasi lapisan pemfilteran yang harus digunakan driver Anda untuk menjamin kompatibilitas dengan IPsec di Windows, lihat Mengembangkan Driver Callout IPsec-Compatible.

Pemblokiran pada Lapisan Mapan Alur Penerapan Lapisan Aplikasi (ALE)

Biasanya, jika callout telah ditambahkan ke mesin filter di salah satu alur ALE yang dibuat lapisan pemfilteran (FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 atau FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6), fungsi callout classifyFn tidak boleh mengembalikan FWP_ACTION_BLOCK untuk tindakan tersebut. Keputusan untuk mengotorisasi atau menolak koneksi tidak boleh dibuat di salah satu lapisan pemfilteran yang ditetapkan alur ALE. Keputusan seperti itu harus selalu dibuat di salah satu lapisan pemfilteran ALE lainnya.

Satu-satunya alasan yang valid bagi fungsi callout klasifikasi semacam itu untuk mengembalikan FWP_ACTION_BLOCK untuk tindakan adalah jika terjadi kesalahan yang dapat menimbulkan potensi risiko keamanan jika koneksi yang telah terjalin tidak dihentikan. Dalam hal ini, mengembalikan FWP_ACTION_BLOCK untuk tindakan menutup koneksi untuk mencegah potensi risiko keamanan dieksploitasi.

Waktu Eksekusi Fungsi Callout

Karena mesin filter biasanya memanggil fungsi callout pada IRQL = DISPATCH_LEVEL, pastikan bahwa fungsi-fungsi ini menyelesaikan eksekusinya secepat mungkin untuk menjaga agar sistem tetap berjalan secara efisien. Eksekusi yang diperluas di IRQL = DISPATCH_LEVEL dapat berdampak buruk pada performa keseluruhan sistem.

Menyuntikkan Ke Jalur Data Penerimaan

Callout harus menghitung ulang checksum IP sebelum memanggil fungsi injeksi paket yang dimasukkan ke jalur data penerima karena checksum dalam paket asli mungkin tidak benar ketika paket disusun ulang dari fragmen paket IP. Tidak ada mekanisme yang dapat diandalkan yang menunjukkan apakah daftar buffer bersih disusun ulang dari fragmen.

Injeksi Paket TCP Secara Inline dari Lapisan Transport

Karena perilaku penguncian tumpukan TCP, callout di lapisan transport tidak dapat menyuntikkan paket TCP baru atau hasil kloning dari fungsi callout classifyFn. Jika injeksi langsung diinginkan, callout harus menjadwalkan DPC untuk melakukan injeksi.

Perataan Header IP yang Keluar

MDL yang menjelaskan header IP dalam daftar buffer jaringan (NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(netBufferList))) harus sejajar dengan pointer ketika salah satu fungsi injeksi paket digunakan untuk memasukkan data paket ke jalur keluar. Karena MDL header IP paket masuk mungkin selaras dengan pointer, panggilan harus membangun kembali header IP (jika belum diratakan) saat memasukkan paket masuk ke jalur keluar.

Driver Callout Platform Pemfilteran Windows