Genişletilmiş Koruma ile Tümleşik Windows Kimlik Doğrulaması

Tümleşik Windows kimlik doğrulamasının ve ilgili ad alanları içindeki HttpWebRequest, HttpListener, SmtpClient, SslStream, , NegotiateStreamve ilgili sınıfları System.Net tarafından nasıl işleneceğini etkileyen geliştirmeler yapılmıştır. Güvenliği geliştirmek için genişletilmiş koruma desteği eklendi.

Bu değişiklikler, tümleşik Windows kimlik doğrulamasının kullanıldığı web isteklerinde bulunmak ve yanıtları almak için bu sınıfları kullanan uygulamaları etkileyebilir. Bu değişiklik, tümleşik Windows kimlik doğrulamasını kullanacak şekilde yapılandırılmış web sunucularını ve istemci uygulamalarını da etkileyebilir.

Bu değişiklikler, tümleşik Windows kimlik doğrulamasının kullanıldığı başka tür isteklerde bulunmak ve yanıt almak için bu sınıfları kullanan uygulamaları da etkileyebilir.

Genişletilmiş korumayı desteklemek için yapılan değişiklikler yalnızca Windows 7 ve Windows Server 2008 R2'de bulunan uygulamalarda kullanılabilir. Genişletilmiş koruma özellikleri Windows'un önceki sürümlerinde kullanılamaz.

Genel bakış

Tümleşik Windows kimlik doğrulaması tasarımı, bazı kimlik bilgileri sınaması yanıtlarının evrensel olmasını sağlar, yani bunlar yeniden kullanılabilir veya iletilebilir. Sınama yanıtları, hedef belirli bilgilerle ve tercihen kanala özgü bazı bilgilerle en azından oluşturulmalıdır. Hizmetler daha sonra kimlik bilgisi sınaması yanıtlarının Hizmet Asıl Adı (SPN) gibi hizmete özgü bilgiler içerdiğini güvence altına almak için genişletilmiş koruma sağlayabilir. Kimlik bilgisi değişimlerindeki bu bilgilerle, hizmetler yanlış kullanılmış olabilecek kimlik bilgisi sınaması yanıtlarının kötü amaçlı kullanımına karşı daha iyi koruma sağlayabilecektir.

Genişletilmiş koruma tasarımı, kimlik doğrulama geçişi saldırılarını azaltmak için tasarlanmış kimlik doğrulama protokollerine yönelik bir geliştirmedir. Kanal ve hizmet bağlama bilgileri kavramı etrafında döner.

Genel hedefler şunlardır:

  1. İstemci genişletilmiş korumayı destekleyecek şekilde güncelleştirilirse, uygulamaların desteklenen tüm kimlik doğrulama protokollerine bir kanal bağlama ve hizmet bağlama bilgileri sağlaması gerekir. Kanal bağlama bilgileri yalnızca bağlanılacak bir kanal (TLS) olduğunda sağlanabilir. Hizmet bağlama bilgileri her zaman sağlanmalıdır.

  2. Düzgün yapılandırılan güncelleştirilmiş sunucular, istemci kimlik doğrulama belirtecinde mevcut olduğunda kanal ve hizmet bağlama bilgilerini doğrulayabilir ve kanal bağlamaları eşleşmiyorsa kimlik doğrulama girişimini reddedebilir. Dağıtım senaryosuna bağlı olarak sunucular kanal bağlamasını, hizmet bağlamasını veya her ikisini de doğrulayabilir.

  3. Güncelleştirilmiş sunucular, ilkeye göre kanal bağlama bilgilerini içermeyen alt düzey istemci isteklerini kabul edebilir veya reddedebilirsiniz.

Genişletilmiş koruma tarafından kullanılan bilgiler aşağıdaki iki bölümden birini veya ikisini birden içerir:

  1. Kanal Bağlama Belirteci veya CBT.

  2. Hizmet Asıl Adı veya SPN biçiminde Hizmet Bağlama bilgileri.

Hizmet Bağlama bilgileri, istemcinin belirli bir hizmet uç noktasında kimlik doğrulaması yapma amacının göstergesidir. İstemciden sunucuya aşağıdaki özelliklerle iletilir:

  • SPN değeri, istemci kimlik doğrulamasını düz metin biçiminde gerçekleştiren sunucu tarafından kullanılabilir olmalıdır.

  • SPN değeri geneldir.

  • SPN aktarım sırasında şifrelemeyle korunmalıdır, böylece ortadaki adam saldırısı değerini ekleyemez, kaldıramaz veya değiştiremez.

CBT, dış güvenli kanalın (TLS gibi) iç, istemci tarafından kimliği doğrulanmış bir kanal üzerinden bir konuşmaya bağlamak (bağlamak) için kullanılan bir özelliğidir. CBT aşağıdaki özelliklere sahip olmalıdır (IETF RFC 5056 tarafından da tanımlanır):

  • Dış kanal mevcut olduğunda CBT değerinin, konuşmanın hem istemci hem de sunucu tarafı tarafından bağımsız olarak ulaşılan dış kanalı veya sunucu uç noktasını tanımlayan bir özellik olması gerekir.

  • İstemci tarafından gönderilen CBT değeri, saldırganın etkiebileceği bir şey olmamalıdır.

  • CBT değerinin gizliliği konusunda hiçbir garanti verilmemektedir. Ancak bu, hizmet bağlamasının yanı sıra kanal bağlama bilgilerinin değerinin, CBT'yi taşıyan protokol tarafından şifrelenebileceği için kimlik doğrulaması yapan sunucu dışındaki herhangi bir sunucu tarafından her zaman incelenebileceği anlamına gelmez.

  • CBT, aktarım sırasında bir saldırganın değerini ekleyemeyecek, kaldıramayacak veya değiştiremeyecek şekilde şifreli olarak korunmalıdır.

Kanal bağlama, istemcinin SPN ve CBT'yi sunucuya kurcalamaya dayanıklı bir şekilde aktarması ile gerçekleştirilir. Sunucu, kanal bağlama bilgilerini ilkesine uygun olarak doğrular ve hedef olduğunu düşünmediği kimlik doğrulama girişimlerini reddeder. Bu şekilde, iki kanal kriptografik olarak birbirine bağlanır.

Mevcut istemciler ve uygulamalarla uyumluluğu korumak için, bir sunucu henüz genişletilmiş korumayı desteklemeyen istemcilerin kimlik doğrulama girişimlerine izin verecek şekilde yapılandırılabilir. Bu, "tamamen sağlamlaştırılmış" yapılandırmanın aksine "kısmen sağlamlaştırılmış" yapılandırma olarak adlandırılır.

ve System.Net.Security ad alanları içindeki System.Net birden çok bileşen, bir çağrı uygulaması adına tümleşik Windows kimlik doğrulaması gerçekleştirir. Bu bölümde, tümleşik Windows kimlik doğrulaması kullanımlarında genişletilmiş koruma eklemek için System.Net bileşenlerinde yapılan değişiklikler açıklanmaktadır.

Genişletilmiş koruma şu anda Windows 7'de desteklenmektedir. Bir uygulamanın işletim sisteminin genişletilmiş korumayı desteklenip desteklemediğini belirleyebilmesi için bir mekanizma sağlanır.

Genişletilmiş Koruma desteğinde yapılan değişiklikler

Tümleşik Windows kimlik doğrulaması ile kullanılan kimlik doğrulama işlemi, kullanılan kimlik doğrulama protokolüne bağlı olarak, genellikle hedef bilgisayar tarafından verilen ve istemci bilgisayara geri gönderilen bir sınama içerir. Genişletilmiş koruma bu kimlik doğrulama işlemine yeni özellikler ekler

Ad System.Security.Authentication.ExtendedProtection alanı, uygulamalar için genişletilmiş koruma kullanılarak kimlik doğrulaması için destek sağlar. ChannelBinding Bu ad alanında sınıfı bir kanal bağlamasını temsil eder. ExtendedProtectionPolicy Bu ad alanında sınıfı, gelen istemci bağlantılarını doğrulamak için sunucu tarafından kullanılan genişletilmiş koruma ilkesini temsil eder. Diğer sınıf üyeleri genişletilmiş koruma ile kullanılır.

Sunucu uygulamaları için bu sınıflar aşağıdakileri içerir:

ExtendedProtectionPolicy Aşağıdaki öğelere sahip olan bir:

  • OSSupportsExtendedProtection İşletim sisteminin genişletilmiş koruma ile tümleşik Windows kimlik doğrulamasını destekleyip desteklemediğini gösteren özellik.

  • PolicyEnforcement Genişletilmiş koruma ilkesinin ne zaman zorlanması gerektiğini gösteren değer.

  • ProtectionScenario Dağıtım senaryolarını gösteren bir değer. Bu, genişletilmiş korumanın denetlenmeyi etkiler.

  • İstemci tarafından kimlik doğrulamasının hedeflenen hedefi olarak sağlanan SPN ile eşleştirmek için kullanılan özel SPN listesini içeren isteğe bağlı ServiceNameCollection .

  • Doğrulama için kullanılacak özel kanal bağlaması içeren isteğe bağlı ChannelBinding . Bu senaryo yaygın bir durum değildir

Ad System.Security.Authentication.ExtendedProtection.Configuration alanı, uygulamalar için genişletilmiş koruma kullanarak kimlik doğrulaması yapılandırması için destek sağlar.

Mevcut System.Net ad alanında genişletilmiş korumayı desteklemek için bir dizi özellik değişikliği yapıldı. Bu değişiklikler, şunları kapsıyor:

Mevcut System.Net.Mail ad alanında SMTP istemci uygulamaları için genişletilmiş korumayı desteklemek üzere bir özellik değişikliği yapıldı:

  • TargetName SıNıFıNDA, SMTP istemci uygulamaları için genişletilmiş koruma kullanılırken kimlik doğrulaması için kullanılacak SPN'yi temsil eden bir özellikSmtpClient.

Mevcut System.Net.Security ad alanında genişletilmiş korumayı desteklemek için bir dizi özellik değişikliği yapıldı. Bu değişiklikler, şunları kapsıyor:

SmtpNetworkElement Ad alanında SMTP istemcileri System.Net.Security için genişletilmiş koruma yapılandırmasını desteklemek üzere bir özellik eklendi.

İstemci Uygulamaları için Genişletilmiş Koruma

Çoğu istemci uygulaması için genişletilmiş koruma desteği otomatik olarak gerçekleşir. ve SmtpClient sınıfları, HttpWebRequest temel alınan Windows sürümü genişletilmiş korumayı desteklediğinde genişletilmiş korumayı destekler. Bir HttpWebRequest örnek, içinden Uribir SPN gönderir. Varsayılan olarak, örnek SmtpClient SMTP posta sunucusunun ana bilgisayar adından oluşan bir SPN gönderir.

Özel kimlik doğrulaması için istemci uygulamaları sınıfında yöntemini kullanarak GetChannelBinding ve CBT'sinin alınmasına TransportContext izin veren veya HttpWebRequest.GetRequestStream(TransportContext) yöntemlerini HttpWebRequest kullanabilirHttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext).

Bir örnek tarafından belirli bir HttpWebRequest hizmete gönderilen tümleşik Windows kimlik doğrulaması için kullanılacak SPN, özelliği ayarlanarak CustomTargetNameDictionary geçersiz kılınabilir.

özelliği, TargetName SMTP bağlantısı için tümleşik Windows kimlik doğrulaması için kullanılacak özel bir SPN ayarlamak için kullanılabilir.

Sunucu Uygulamaları için Genişletilmiş Koruma

HttpListener OTOMATIK olarak HTTP kimlik doğrulaması gerçekleştirirken hizmet bağlamalarını doğrulama mekanizmaları sağlar.

En güvenli senaryo, ön ekler için HTTPS:// genişletilmiş korumayı etkinleştirmektir. Bu durumda, HttpListener.ExtendedProtectionPolicyPolicyEnforcementExtendedProtectionPolicy veya ile olarak ve ile olarak ayarlayın WhenSupportedTransportSelectedAlwaysve ProtectionScenario A değeri WhenSupported kısmen sağlamlaştırılmış moda ayarlanırken HttpListenerAlways, tam sağlamlaştırılmış moda karşılık gelir.

Bu yapılandırmada, dış güvenli kanal üzerinden sunucuya istek gönderildiğinde, dış kanal bir kanal bağlaması için sorgulanır. Bu kanal bağlama, kimlik doğrulama blobundaki kanal bağlamasının eşleşdiğini doğrulayan kimlik doğrulama SSPI çağrılarına geçirilir. Üç olası sonuç vardır:

  1. Sunucunun temel işletim sistemi genişletilmiş korumayı desteklemez. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

  2. SSPI çağrısı, istemcinin dış kanaldan alınan beklenen değerle eşleşmeyen bir kanal bağlaması belirttiğini veya sunucudaki genişletilmiş koruma ilkesi için Alwaysyapılandırıldığında istemcinin kanal bağlaması sağlayamadığını gösterir. Her iki durumda da istek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

  3. İstemci doğru kanal bağlamasını belirtir veya sunucudaki genişletilmiş koruma ilkesi işleme için uygulamaya döndürülür ile WhenSupported yapılandırıldığından kanal bağlaması belirtmeden bağlanmasına izin verilir. Hizmet adı denetimi otomatik olarak yapılmaz. Bir uygulama, özelliğini kullanarak kendi hizmet adı doğrulamasını gerçekleştirmeyi ServiceName seçebilir, ancak bu koşullar altında yedeklidir.

Bir uygulama, HTTP isteğinin gövdesinde ileri geri geçirilen blobları temel alarak kimlik doğrulaması gerçekleştirmek için kendi SSPI çağrılarını yapar ve kanal bağlamayı desteklemek isterse, bunu yerel Win32 AcceptSecurityContext işlevine geçirmek için kullanarak HttpListener dış güvenli kanaldan beklenen kanal bağlamasını alması gerekir. Bunu yapmak için özelliğini kullanın TransportContext ve CBT'yi almak için yöntemini çağırın GetChannelBinding . Yalnızca uç nokta bağlamaları desteklenir. Başka Endpoint bir şey belirtilirse, bir NotSupportedException oluşturulur. Temel alınan işletim sistemi kanal bağlamayı destekliyorsa yöntemi, parametrede geçirilen secBufferSafeHandleChannelBindingyapısının GetChannelBinding pvBuffer üyesi olarak AcceptSecurityContext işlevine geçirmeye uygun bir işaretçiyi kanal bağlamasına pInput sarmalama döndürür. Size özelliği, kanal bağlamasının uzunluğunu bayt cinsinden içerir. Temel alınan işletim sistemi kanal bağlamalarını desteklemiyorsa işlevi döndürür null.

Başka bir olası senaryo, proxy'ler kullanılmadığında ön ekler için HTTP:// genişletilmiş korumayı etkinleştirmektir. Bu durumda, HttpListener.ExtendedProtectionPolicyPolicyEnforcementExtendedProtectionPolicy veya ile olarak ve ile olarak ayarlayın WhenSupportedTransportSelectedAlwaysve ProtectionScenario A değeri WhenSupported kısmen sağlamlaştırılmış moda ayarlanırken HttpListenerAlways, tam sağlamlaştırılmış moda karşılık gelir.

İzin verilen hizmet adlarının varsayılan listesi, ile HttpListenerkaydedilmiş ön ekleri temel alınarak oluşturulur. Bu varsayılan liste özelliği aracılığıyla DefaultServiceNames incelenebilir. Bu liste kapsamlı değilse, bir uygulama varsayılan hizmet adı listesi yerine kullanılacak sınıfın ExtendedProtectionPolicy oluşturucusunda özel bir hizmet adı koleksiyonu belirtebilir.

Bu yapılandırmada, dış güvenli kanal kimlik doğrulaması olmadan sunucuya bir istek yapıldığında kanal bağlama denetimi olmadan normal şekilde devam eder. Kimlik doğrulaması başarılı olursa, istemcinin sağladığı hizmet adı için bağlam sorgulanır ve kabul edilebilir hizmet adları listesinde doğrulanır. Dört olası sonuç vardır:

  1. Sunucunun temel işletim sistemi genişletilmiş korumayı desteklemez. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

  2. İstemcinin temel işletim sistemi genişletilmiş korumayı desteklemez. Yapılandırmada WhenSupported kimlik doğrulama girişimi başarılı olur ve istek uygulamaya döndürülür. Yapılandırmada Always kimlik doğrulama girişimi başarısız olur. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

  3. İstemcinin temel işletim sistemi genişletilmiş korumayı destekler, ancak uygulama bir hizmet bağlaması belirtmedi. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

  4. İstemci bir hizmet bağlaması belirtti. Hizmet bağlaması, izin verilen hizmet bağlamaları listesiyle karşılaştırılır. Eşleşirse, istek uygulamaya döndürülür. Aksi takdirde istek uygulamaya sunulmaz ve istemciye otomatik olarak yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.

Kabul edilebilir hizmet adlarının izin verilen bir listesini kullanan bu basit yaklaşım yetersizse, bir uygulama özelliğini sorgulayarak kendi hizmet adı doğrulamasını ServiceName sağlayabilir. Yukarıdaki 1 ve 2 durumlarında özelliği döndürür null. 3 olması durumunda boş bir dize döndürür. 4 olması durumunda, istemci tarafından belirtilen hizmet adı döndürülür.

Bu genişletilmiş koruma özellikleri, sunucu uygulamaları tarafından diğer istek türleriyle ve güvenilen proxy'ler kullanıldığında kimlik doğrulaması için de kullanılabilir.

Ayrıca bkz.