Tingkat Peniruan (Otorisasi)
Enumerasi SECURITY_IMPERSONATION_LEVEL mendefinisikan empat tingkat peniruan yang menentukan operasi yang dapat dilakukan server dalam konteks klien.
Tingkat peniruan | Deskripsi |
---|---|
SecurityAnonymous | Server tidak dapat meniru atau mengidentifikasi klien. |
SecurityIdentification | Server bisa mendapatkan identitas dan hak istimewa klien, tetapi tidak dapat meniru klien. |
SecurityImpersonation | Server dapat meniru konteks keamanan klien pada sistem lokal. |
SecurityDelegation | Server dapat meniru konteks keamanan klien pada sistem jarak jauh. |
Klien koneksi pipa, RPC, atau DDE bernama dapat mengontrol tingkat peniruan identitas. Misalnya, klien pipa bernama dapat memanggil fungsiCreateFile untuk membuka handel ke pipa bernama dan menentukan tingkat peniruan server.
Ketika koneksi pipa, RPC, atau DDE bernama jarak jauh, bendera yang diteruskan ke CreateFile untuk mengatur tingkat peniruan akan diabaikan. Dalam hal ini, tingkat peniruan klien ditentukan oleh tingkat peniruan yang diaktifkan oleh server, yang diatur oleh bendera pada akun server di layanan direktori. Misalnya, jika server diaktifkan untuk delegasi, tingkat peniruan klien juga akan diatur ke delegasi bahkan jika bendera yang diteruskan ke CreateFile menentukan tingkat peniruan identifikasi.
Klien DDE menggunakan fungsiDdeSetQualityOfService dengan struktur SECURITY_QUALITY_OF_SERVICE untuk menentukan tingkat peniruan. Tingkat SecurityImpersonation adalah default untuk server pipe, RPC, dan DDE bernama. Fungsi ImpersonateSelf, DuplicateToken, dan DuplicateTokenEx memungkinkan pemanggil menentukan tingkat peniruan. Gunakan fungsiGetTokenInformationuntuk mengambil tingkat peniruan token akses .
Pada tingkat SecurityImpersonation, sebagian besar tindakan utas terjadi dalam konteks keamanan token peniruan utas daripada dalam token utama proses yang memiliki utas. Misalnya, jika utas yang meniru membuka objek yang dapat diamankan, sistem menggunakan token peniruan untuk memeriksa akses utas. Demikian pula, jika utas peniru membuat objek baru, misalnya dengan memanggil fungsiCreateFile, pemilik objek baru adalah pemilik default dari token akses klien.
Namun, sistem menggunakan token utama proses daripada token peniruan utas panggilan dalam situasi berikut:
- Jika utas yang meniru panggilan fungsiCreateProcess, proses baru selalu mewarisi token utama proses.
- Untuk fungsi yang memerlukan hak istimewa SE_TCB_NAME, seperti fungsiLogonUser, sistem selalu memeriksa hak istimewa dalam token utama proses.
- Untuk fungsi yang memerlukan hak istimewa SE_AUDIT_NAME, seperti fungsi ObjectOpenAuditAlarm, sistem selalu memeriksa hak istimewa dalam token utama proses.
- Dalam panggilan ke fungsiOpenThreadToken, utas dapat menentukan apakah fungsi menggunakan token peniruan identitas atau token utama untuk menentukan apakah akan memberikan akses yang diminta.