Aracılığıyla paylaş


Gizleme (COM)

Gizleme, istemcinin kimliğe bürünme sırasında sunucuya hangi kimliği projelediğini belirleyen bir COM güvenlik özelliğidir. Gizleme ayarlandığında, ara sunucu kendi kimliğini maskeler ve istemcinin kimliğini istemci adına çağıran sunucuya sunar. Temelde; sunucu tarafından görülen istemci kimliği, proxy ile ilişkili kimliktir. Proxy'nin kimliği çeşitli faktörlere göre belirlenir ve bunlardan biri ayarlanan gizleme türüdür (varsa). Gizleme, Schannel güvenlik sağlayıcısı tarafından desteklenmez.

Aşağıdaki konular gizleme hakkında daha fazla bilgi sağlar:

Gizleme Türleri

İki tür gizleme vardır: statik gizleme ve dinamik gizleme.

  • Statik gizleme (EOAC_STATIC_CLOAKING) ile sunucu, istemciden sunucuya yapılan ilk çağrıdan iş parçacığı belirtecini görür. İlk çağrı için, ara sunucu kimliği daha önce CoSetProxyBlanketçağrısı sırasında ayarlandıysa, ara sunucu kimliği kullanılır. Ancak, proxy kimliği daha önce ayarlanmadıysa, iş parçacığı belirteci kullanılır. İş parçacığı belirteci bulunmadığında, işlem belirteci kullanılır. Gelecekteki tüm çağrılar için, ilk çağrıda ayarlanan kimlik kullanılır.
  • Dinamik gizleme (EOAC_DYNAMIC_CLOAKING) ile her çağrıda istemcinin kimliğini belirlemek için geçerli iş parçacığı belirteci (iş parçacığı belirteci varsa) kullanılır. İş parçacığı belirteci yoksa, işlem belirteci kullanılır. Bu, kimliğe bürünme sırasında istemci adına çağrılan sunucuların, genellikle istenen davranış olan çağrıyı oluşturan COM istemcisinin kimliğini gördüğü anlamına gelir. (Kimliğe bürünme işleminin başarılı olması için istemcinin uygun bir kimliğe bürünme düzeyi ayarlayarak sunucuya kimliğe bürünme yetkisi vermiş olması gerekir. Daha fazla bilgi için bkz. Kimliğe Bürünme Düzeyleri.) Bu tür gizlenmeler pahalıdır.

Gizleme İstemci Kimliğini Nasıl Etkiler?

Şifrelenmiş bir çağrı yapıldığında ve sunucu istemciden kimliğini istediğinde, genellikle proxy'ye bağlı kimliği alır. (Bazen kimlik doğrulama hizmeti gerçek kimlikten bir çeviri gerçekleştirir, ancak genellikle proxy kimliği sunucunun gördüğü kimliktir.) Proxy, ayarlanan gizleme türüne ve diğer faktörlere bağlı olarak sunucuya bir kimlik sunar.

Özetlemek gerekirse, istemcinin kimliği; gizleme bayrağının ayarlanması, işlem belirteci, bir iş parçacığı belirtecinin varlığı veya yokluğu ve ara sunucu kimliğinin daha önce ayarlanmış olup olmaması gibi faktörlerin bir işlevidir. Aşağıdaki tabloda, bu faktörler farklılık gösterdiğinde ortaya çıkan proxy kimliği (istemci kimliği) gösterilmektedir.

Gizlenen Bayraklar İş Parçacığı Belirteci Mevcudiyeti Önceden Ayarlanmış Ara Sunucu Kimliği Proxy Kimliği (İstemci Kimliği)
Gizlenme etkin değil
Umrunda değil
Umrunda değil
İşlem belirteci veya kimlik doğrulama bilgisi
EOAC_STATIC_CLOAKING
Hediye
Hayır
İşlem dizisi belirteci
EOAC_STATIC_CLOAKING
Hediye
Evet
Geçerli proxy kimliği
EOAC_STATIC_CLOAKING
Yok
Hayır
İşlem belirteci
EOAC_STATIC_CLOAKING
Yok
Evet
Geçerli proxy kimliği
EOAC_DYNAMIC_CLOAKING
Hediye
Umrunda değil
İş parçacığı belirteci
EOAC_DYNAMIC_CLOAKING (Dinamik Gizleme)
Yok
Umrunda değil
İşlem belirteci

Aşağıdaki akış çizelgesinde ara sunucu kimliğinin farklı durumlarda nasıl belirlendiği gösterilmektedir.

Ara sunucu kimliğini belirleme akışını gösteren diyagram.

Gizlenme Ayarı

Gizleme, tüm işlem için gizlemeyi ayarlayan CoInitializeSecurityçağrısında yetenek bayrağı olarak ayarlanır. Ardından, istemci bunu IClientSecurity::SetBlanket (veya ara sunucu için gizlemeyi ayarlayan CoSetProxyBlanket) çağrısıyla değiştirene kadar gizlenme özelliği ayarlanır.

Varsayılan olarak, gizleme ayarlanmaz. Bunu ayarlamak için EOAC_STATIC_CLOAKING veya EOAC_DYNAMIC_CLOAKING'ı pCapabilities parametresine CoInitializeSecurity veya SetBlanketiletin.

CoInitializeSecuritykullanılarak statik gizleme etkinleştirildiğinde, ara sunucuda ilk kez çağrı yaptığınızda her ara sunucu bir belirteç (iş parçacığı veya işlem) alır. SetBlanketkullanılarak statik gizleme etkinleştirildiğinde, ara sunucu o anda iş parçacığındaki belirteci alır. SetBlanket çağrıldığında kullanılabilir bir iş parçacığı belirteci yoksa, işlem belirteci proxy'nin kimliği için kullanılır. Temel olarak, SetBlanket proxy'nin kimliğini düzeltir.

Dinamik gizleme ile proxy'nin kimliği, coInitializeSecuritykullanılarak mı yoksa SetBlanketkullanılarak mı ayarlandığından bağımsız olarak aynı şekilde belirlenir. Geçerli iş parçacığı belirteci varsa kullanılır; aksi takdirde süreç belirteci kullanılır.

CoInitializeSecurity çağrısı aracılığıyla işlemin tamamı için gizleme ayarlandıysa ve işlem belirteci ile çağrı yapmak istiyorsanız, arama yaparken kimliğine bürünmeyin.

Gizleme ve Taklit Düzeyleri

Daha önce belirtildiği gibi, gizleme özelliği kimliğe bürünme sırasında sunucuya hangi kimliğin sunulduğunu belirler. Gizleme, bir sunucunun kendi kimliği dışında bir kimliği istemci adına çağırmış olduğu başka bir sunucuya yansıtması için bir yol sağlar. Kimliğe bürünme düzeyi, istemcinin sunucuya ne kadar yetki verdiğini gösterir.

Gizleme olmadan kimliğe bürünme işe yarar, ancak bazı durumlarda son sunucunun ilk çağıranın kimliğini bilmesi gerektiğinden en iyi seçenek olmayabilir. Bu, yalnızca yetkili istemcilerin uzak bir bilgisayara erişebildiğinden emin olmak zor olduğundan gizleme kullanılmadan elde edilemez. Gizleme olmadan kimliğe bürünme kullanıldığında, aşağı akış sunucusuna sunulan kimlik, hemen çağırma işleminin kimliğidir.

Ancak, gizleme kimliğe bürünmeden bir işe yaramaz. Gizlenme yalnızca istemci, kimliğe bürünme veya temsil et düzeyi belirlediğinde anlamlıdır. (Daha düşük kimliğe bürünme düzeyleriyle, sunucu gizlenen çağrılar yapamaz.) Gizlemenin başarılı olup olmadığı, çaprazlanan bilgisayar sınırlarının sayısına ve sunucunun istemci adına ne kadar yetkiye sahip olduğunu gösteren kimliğe bürünme düzeyine bağlıdır.

Bazı durumlarda istemci kimliğe bürünme düzeyini RPC_C_IMP_LEVEL_IMPERSONATE olarak ayarladığında sunucunun gizleme ayarlaması mantıklıdır. Ancak, belirli sınırlamalar geçerlidir. Özgün istemci kimliğe bürünme düzeyini RPC_C_IMP_LEVEL_IMPERSONATE olarak ayarlarsa, ara sunucu (aynı bilgisayarda istemci olarak davranır) yalnızca bir bilgisayar sınırını geçerek kendisini gizleyebilir. Bunun nedeni, kimliğe bürünme seviyesi belirtecinin yalnızca bir bilgisayar sınırını aşabilmesidir. Bilgisayar sınırı aşıldıktan sonra yalnızca yerel kaynaklara erişilebilir. Sunucuya sunulan kimlik, ayarlanan gizleme türüne bağlıdır. Hiçbir gizleme ayarlanmadıysa, sunucuya sunulan kimlik, anında çağrıyı yapan işlemden oluşur.

Birden çok bilgisayar sınırında gizlenmek için hem uygun bir gizleme özelliği bayrağı hem de temsilci düzeyinde kimliğe bürünme belirtmeniz gerekir. Bu tür bir kimliğe bürünme ile istemcinin hem yerel hem de ağ kimlik bilgileri sunucuya verilir, böylece kimliğe bürünme belirteci herhangi bir sayıda bilgisayar sınırını geçebilir. Sunucuya sunulan kimlik, ayarlanan gizleme türüne bağlıdır. Temsilci düzeyinde kimliğe bürünme ile hiçbir gizleme ayarlanmadıysa, bir sunucuya sunulan kimlik, çağrıyı yapan işlemin kimliğidir.

Örneğin, İşlem A’nın B’yi, B’nin de C’yi çağırdığını varsayalım. B gizlemeyi ayarlamış ve A da kimliğe bürünme düzeyini 'kimliğe bürün' olarak ayarlamış olsun. A, B ve C aynı bilgisayardaysa, kimliğe bürünme belirtecini A'dan B'ye ve ardından C'ye geçirme işlemi çalışır. Ancak, A ve C aynı bilgisayardaysa ve B değilse, belirtecin iletilmesi A ile B arasında çalışır, ancak B'den C'ye çalışmaz. B'den C'ye yapılan çağrı başarısız olur çünkü B gizlendiği sürece C'yi çağıramaz. Ancak, A kimliğe bürünme düzeyini delege olarak ayarlarsa, belirteç B'den C'ye geçirilebilir ve çağrı başarıyla tamamlanabilir.

Gizleme Senaryoları

Aşağıdaki çizimde İşlem A, gizleme ayarlanmadığında B'yi, C'yi, D'yi çağırır. Sonuç olarak, her ara işlem onu çağıran işlemin kimliğini görür.

Gizlenme ayarlanmadığında işlemi gösteren Diyagramı.

Statik gizleme ile sunucu, istemciden sunucuya yapılan ilk çağrı sırasında ayarlanan proxy kimliğini görür. Aşağıdaki şekilde, B'den C'ye yapılan bir çağrı sırasında ayarlanan proxy kimliğinin bir örneği gösterilmektedir. Sonraki bir çağrıda, statik gizleme B ve C tarafından ayarlandığında İşlem D B'nin kimliğini görür.

Statik gizleme işlemini gösteren Diyagramı.

Dinamik gizleme ile kimliğe bürünme sırasında çağıranın kimliği, varsa geçerli iş parçacığı belirtecini temel alır. Aşağıdaki çizimde, B ve C'nin dinamik gizlemeyi ayarladığı ve D'nin B'den C'ye yapılan önceki bir çağrıya rağmen A'nın kimliğini gördüğü durum gösterilmektedir.

Dinamik gizleme işlemini gösteren Diyagramı.

temsilci seçme ve kimliğe bürünme