Cloaking adalah kemampuan keamanan COM yang menentukan identitas apa yang diproyeksikan klien terhadap server selama peniruan identitas. Saat penyelubungan diatur, server perantara menutupi identitasnya sendiri dan menyajikan identitas klien ke server yang dipanggilnya atas nama klien. Pada dasarnya; identitas klien yang dilihat oleh server adalah identitas yang terkait dengan proksi. Identitas proksi ditentukan oleh beberapa faktor, salah satunya adalah jenis penyelubungan yang diatur (jika ada). Penyelubungan tidak didukung oleh penyedia keamanan Schannel.
Topik berikut memberikan informasi selengkapnya tentang penyelubungan:
Ada dua jenis penyelubungan: penyelubungan statis dan penyelubungan dinamis :
Dengan penyelubungan statis (EOAC_STATIC_CLOAKING), server melihat token utas dari panggilan pertama dari klien ke server. Untuk panggilan pertama, jika identitas proksi sebelumnya diatur selama panggilan ke CoSetProxyBlanket, identitas proksi tersebut digunakan. Namun, jika identitas proksi sebelumnya tidak diatur, token utas digunakan. Jika tidak ada token utas yang ada, token proses akan digunakan. Untuk semua panggilan di masa mendatang, identitas yang ditetapkan pada panggilan pertama digunakan.
Dengan cloaking dinamis (EOAC_DYNAMIC_CLOAKING), pada setiap panggilan token utas saat ini (jika ada token utas) digunakan untuk menentukan identitas klien. Jika tidak ada token utas, token proses akan digunakan. Ini berarti bahwa server yang dipanggil atas nama klien selama peniruan identitas melihat identitas klien COM yang berasal dari panggilan, yang umumnya merupakan perilaku yang diinginkan. (Tentu saja, agar peniruan identitas berhasil, klien harus memberikan otoritas server untuk meniru dengan menetapkan tingkat peniruan yang sesuai. Untuk informasi selengkapnya, lihat Tingkat Peniruan.) Jenis penyelubungan ini mahal.
Bagaimana Cloaking Memengaruhi Identitas Klien
Ketika panggilan terenkripsi dilakukan dan server meminta identitas klien, biasanya identitas terikat dengan proksi. (Terkadang layanan autentikasi melakukan terjemahan dari identitas nyata, tetapi umumnya identitas proksi adalah identitas yang dilihat server.) Proksi menyajikan identitas ke server yang bergantung pada jenis penyelubungan yang diatur dan faktor lainnya.
Untuk meringkas, identitas klien adalah fungsi dari set bendera penyelubungan, token proses, kehadiran atau tidak adanya token utas, dan apakah identitas proksi telah ditetapkan sebelumnya. Tabel berikut menunjukkan identitas proksi yang dihasilkan (identitas klien) ketika faktor-faktor ini bervariasi.
Bendera Penyelubungan
Kehadiran Token Utas
Identitas Proksi Yang Sebelumnya Diatur
Identitas Proksi (Identitas Klien)
Penyelubungan tidak diatur
Tidak peduli
Tidak peduli
Memproses token atau identitas autentikasi
EOAC_STATIC_CLOAKING
Hadir
No
Token utas
EOAC_STATIC_CLOAKING
Hadir
Ya
Identitas proksi saat ini
EOAC_STATIC_CLOAKING
Tidak ada
No
Token proses
EOAC_STATIC_CLOAKING
Tidak ada
Ya
Identitas proksi saat ini
EOAC_DYNAMIC_CLOAKING
Hadir
Tidak peduli
Token utas
EOAC_DYNAMIC_CLOAKING
Tidak ada
Tidak peduli
Token proses
Diagram alur berikut menggambarkan bagaimana identitas proksi ditentukan dalam situasi yang berbeda.
Pengaturan Penyelubungan
Penyelubungan diatur sebagai bendera kemampuan dalam panggilan ke CoInitializeSecurity, yang mengatur penyelubungan untuk seluruh proses. Kemampuan penyelubungan kemudian diatur hingga klien mengubahnya melalui panggilan ke IClientSecurity::SetBlanket (atau ke CoSetProxyBlanket), yang mengatur penyelubungan untuk proksi.
Secara default, penyelubungan tidak diatur. Untuk mengaturnya, teruskan EOAC_STATIC_CLOAKING atau EOAC_DYNAMIC_CLOAKING ke parameter pCapabilities di CoInitializeSecurity atau SetBlanket.
Saat penyelubungan statis diaktifkan menggunakan CoInitializeSecurity, setiap proksi mengambil token (utas atau proses) saat pertama kali Anda melakukan panggilan pada proksi. Saat penyelubungan statis diaktifkan menggunakan SetBlanket, proksi mengambil token pada utas pada saat itu. Jika tidak ada token utas yang tersedia saat SetBlanket dipanggil, token proses digunakan untuk identitas proksi. Pada dasarnya, SetBlanket memperbaiki identitas proksi.
Dengan penyelubungan dinamis, identitas proksi ditentukan dengan cara yang sama terlepas dari apakah penyelubungan dinamis diatur menggunakan CoInitializeSecurity atau dengan SetBlanket. Token utas saat ini digunakan jika ada; jika tidak, token proses digunakan.
Jika penyelubungan diatur untuk seluruh proses melalui panggilan ke CoInitializeSecurity dan Anda ingin melakukan panggilan dengan token proses, jangan meniru saat melakukan panggilan.
Tingkat Penyelubungan dan Peniruan
Seperti disebutkan sebelumnya, kemampuan penyelubungan menentukan identitas apa yang disajikan ke server selama peniruan. Cloaking menyediakan cara bagi server untuk memproyeksikan identitas selain identitasnya sendiri ke server lain yang dipanggil atas nama klien. Tingkat peniruan menunjukkan berapa banyak otoritas yang diberikan klien kepada server.
Peniruan tanpa penyelubungan berfungsi, tetapi mungkin bukan pilihan terbaik karena, dalam beberapa kasus, server akhir perlu mengetahui identitas pemanggil awal. Ini tidak dapat dicapai tanpa menggunakan penyelubungan karena sulit untuk memastikan bahwa hanya klien yang berwenang yang dapat mengakses komputer jarak jauh. Ketika peniruan identitas digunakan tanpa penyelubungan, identitas yang disajikan ke server hilir adalah dari proses panggilan langsung.
Namun, penyelubungan tidak berguna tanpa peniruan identitas. Penyelubungan masuk akal hanya ketika klien telah menetapkan tingkat peniruan peniruan identitas atau delegasi. (Dengan tingkat peniruan yang lebih rendah, server tidak dapat melakukan panggilan berjubah.) Apakah penyelubungan berhasil tergantung pada jumlah batas komputer yang disilangkan dan pada tingkat peniruan, yang menunjukkan berapa banyak otoritas yang harus ditindaklanjuti server atas nama klien.
Dalam beberapa situasi, masuk akal bagi server untuk mengatur penyelubungan ketika klien mengatur tingkat peniruan ke RPC_C_IMP_LEVEL_IMPERSONATE. Namun, batasan tertentu berlaku. Jika klien asli mengatur tingkat peniruan ke RPC_C_IMP_LEVEL_IMPERSONATE, server perantara (bertindak sebagai klien di komputer yang sama) hanya dapat berjubah di satu batas komputer. Ini karena token peniruan tingkat impersonate hanya dapat diteruskan di satu batas komputer. Setelah batas komputer disilangkan, hanya sumber daya lokal yang dapat diakses. Identitas yang disajikan ke server tergantung pada jenis penyelubungan yang diatur. Jika tidak ada penyelubungan yang diatur, identitas yang disajikan ke server adalah proses yang melakukan panggilan langsung.
Untuk menyelubungi beberapa batas komputer, Anda harus menentukan bendera kemampuan penyelubungan yang sesuai dan peniruan tingkat delegasi. Dengan jenis peniruan ini, kredensial lokal dan jaringan klien diberikan ke server, sehingga token peniruan dapat melewati sejumlah batas komputer. Sekali lagi, identitas yang disajikan ke server tergantung pada jenis penyelubungan yang diatur. Jika tidak ada penyelubungan yang diatur dengan peniruan tingkat delegasi, identitas yang disajikan ke server adalah proses yang melakukan panggilan.
Misalnya, Proses A memanggil B, dan panggilan B C. B telah mengatur penyelubungan dan A telah mengatur tingkat peniruan identitas untuk meniru. Jika A, B, dan C berada di komputer yang sama, meneruskan token peniruan dari A ke B dan kemudian ke C akan berfungsi. Tetapi jika A dan C berada di komputer yang sama, dan B tidak, meneruskan token akan berfungsi antara A dan B, tetapi tidak dari B ke C. Panggilan dari B ke C akan gagal karena B tidak dapat memanggil C saat berjubah. Namun, jika A menetapkan tingkat peniruan untuk didelegasikan, token dapat diteruskan dari B ke C dan panggilan mungkin berhasil.
Skenario Penyelubungan
Dalam ilustrasi berikut, Proses A memanggil B, memanggil C, memanggil D saat penyelubungan tidak diatur. Akibatnya, setiap proses perantara melihat identitas proses yang memanggilnya.
Dengan penyelubungan statis, server melihat identitas proksi yang diatur selama panggilan pertama dari klien ke server. Gambar berikut menunjukkan contoh identitas proksi yang diatur selama panggilan dari B ke C. Pada panggilan berikutnya, Proses D melihat identitas B saat penyelubungan statis diatur oleh B dan C.
Dengan penyelubungan dinamis, identitas pemanggil selama peniruan didasarkan pada token utas saat ini, jika ada. Ilustrasi berikut menunjukkan situasi di mana B dan C mengatur penyelubungan dinamis dan D melihat identitas A, meskipun panggilan sebelumnya dari B ke C.