Penyelubungan (COM)
Cloaking adalah kemampuan keamanan COM yang menentukan identitas yang diproyyeksikan klien kepada server saat 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:
- Tipe Penyelubungan
- Bagaimana Penyembunyian Mempengaruhi Identitas Klien
- Pengaturan Penyamaran
- Tingkat Penyelubungan dan Peniruan Identitas
- Skenario Penyelubungan
- Topik terkait
Jenis Penyelubungan
Ada dua jenis penyelubungan: penyelubungan statis dan penyelubungan dinamis:
- Dengan penyelubungan statis (EOAC_STATIC_CLOAKING), server tersebut 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 belum diatur sebelumnya, token thread digunakan. Jika tidak ada token utas yang tersedia, 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 pemanggilan, token utas saat ini (jika ada) digunakan untuk mengidentifikasi identitas klien. Jika tidak ada token utas, token proses akan digunakan. Ini berarti bahwa server yang dipanggil selama peniruan identitas atas nama klien melihat identitas klien COM yang melakukan panggilan, yang umumnya merupakan perilaku yang diinginkan. (Tentu saja, agar peniruan identitas berhasil, klien harus memberikan otoritas kepada server untuk meniru dengan menetapkan tingkat peniruan yang sesuai. Untuk informasi selengkapnya, lihat Tingkat Peniruan .) Jenis penyamaran ini mahal.
Bagaimana Cloaking Memengaruhi Identitas Klien
Ketika panggilan terenkripsi dilakukan dan server meminta identitas klien, biasanya yang didapat adalah identitas yang terhubung 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 kumpulan bendera penyelubungan, token proses, keberadaan atau ketiadaan 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 |
Hadiah |
Tidak |
Token thread |
EOAC_STATIC_CLOAKING |
Hadiah |
Ya |
Identitas proksi saat ini |
EOAC_STATIC_CLOAKING |
Tidak ada |
Tidak |
Token proses |
EOAC_STATIC_CLOAKING |
Tidak ada |
Ya |
Identitas proksi saat ini |
EOAC_DYNAMIC_CLOAKING |
Hadiah |
Tidak peduli |
Token thread |
EOAC_DYNAMIC_CLOAKING |
Tidak ada |
Tidak peduli |
Token proses |
Diagram alur berikut menggambarkan bagaimana identitas proksi ditentukan dalam situasi yang berbeda.
Pengaturan Penyelubungan
Cloaking diatur sebagai penanda kemampuan dalam panggilan ke CoInitializeSecurity, yang mengatur cloaking untuk seluruh proses. Fungsi penyamaran kemudian ditetapkan sampai klien mengubahnya melalui pemanggilan ke IClientSecurity::SetBlanket (atau ke CoSetProxyBlanket), yang menetapkan penyamaran untuk proksi.
Secara bawaan, penyelubungan tidak diatur. Untuk mengaturnya, teruskan EOAC_STATIC_CLOAKING atau EOAC_DYNAMIC_CLOAKING ke parameter pCapabilities di CoInitializeSecurity atau SetBlanket.
Saat kloking statis diaktifkan menggunakan CoInitializeSecurity, setiap proksi mengambil token (utas atau proses) saat pertama kali Anda memanggil proksi. Ketika penyelubungan statis diaktifkan menggunakan SetBlanket, perantara mengambil token pada thread 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 penyamaran diatur untuk seluruh proses melalui panggilan ke CoInitializeSecurity dan Anda ingin melakukan panggilan dengan token proses, jangan menyamar 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 pemalsuan identitas. Penyamaran masuk akal hanya ketika klien telah menetapkan tingkat peniruan identitas atau delegasi. (Dengan tingkat impersonasi yang lebih rendah, server tidak dapat membuat panggilan tersembunyi.) Apakah penyamaran berhasil tergantung pada jumlah batas komputer yang dilalui dan pada tingkat impersonasi, yang menunjukkan berapa banyak otoritas yang dimiliki server untuk bertindak atas nama klien.
Dalam beberapa situasi, masuk akal jika server 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 menyamar pada satu batas komputer. Ini karena token peniruan pada tingkat impersonate hanya dapat melewati satu batas komputer. Setelah melewati batas komputer, 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 melampaui beberapa batas komputer, Anda harus menentukan penanda kemampuan penyelubungan yang sesuai dan peniruan pada 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 pengaturan penyelubungan dengan penyamaran tingkat delegasi, identitas yang ditampilkan ke server adalah proses yang mengadakan panggilan.
Misalnya, Proses A memanggil B, dan B memanggil C. B telah mengatur penyelubungan dan A telah mengatur tingkat peniruan identitas untuk menyamar. Jika A, B, dan C berada di komputer yang sama, meneruskan token peniruan dari A ke B dan kemudian ke C akan berfungsi. Namun, 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 menyamarkan identitasnya. 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, kemudian memanggil D saat penyelubungan tidak diaktifkan. Akibatnya, setiap proses perantara melihat identitas proses yang memanggilnya.
Dengan penyelubungan statis, server melihat identitas proksi yang ditetapkan saat panggilan pertama dilakukan oleh 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 pengelabuan dinamis, identitas pemanggil selama peniruan didasarkan pada token thread yang aktif saat ini, apabila ada. Ilustrasi berikut menunjukkan situasi di mana B dan C mengaktifkan penyelubungan dinamis dan D melihat identitas A, meskipun telah ada panggilan sebelumnya dari B ke C.