Aracılığıyla paylaş


Nasıl yapılır: İleti Yeniden Yürütme Algılamayı Etkinleştirme

Yeniden yürütme saldırısı, saldırgan iki taraf arasında bir ileti akışı kopyaladığında ve akışı bir veya daha fazla taraf için yeniden oynattığında gerçekleşir. Hafifletilmediği sürece, saldırıya tabi olan bilgisayarlar akışı meşru iletiler olarak işler ve bu da bir öğenin yedekli siparişleri gibi bir dizi kötü sonuçla sonuçlanır.

İleti yeniden yürütme algılama hakkında daha fazla bilgi için bkz . İleti Yeniden Yürütme Algılama.

Aşağıdaki yordam, Windows Communication Foundation (WCF) kullanarak yeniden yürütme algılamasını denetlemek için kullanabileceğiniz çeşitli özellikleri gösterir.

Kod kullanarak istemcide yeniden yürütme algılamasını denetlemek için

  1. içinde kullanılacak bir SecurityBindingElementCustomBindingoluşturun. Daha fazla bilgi için bkz . Nasıl yapılır: SecurityBindingElement Kullanarak Özel Bağlama Oluşturma. Aşağıdaki örnekte sınıfıyla CreateKerberosBindingElementSecurityBindingElement oluşturulmuş bir SymmetricSecurityBindingElement kullanılır.

  2. sınıfına LocalClientSettings başvuru döndürmek ve aşağıdaki özelliklerden herhangi birini uygun şekilde ayarlamak için LocalClientSecuritySettings özelliğini kullanın:

    1. DetectReplay. Boole değeri. Bu, istemcinin sunucudan yeniden yürütmeleri algılayıp algılamayacağını yönetir. Varsayılan değer: true.

    2. MaxClockSkew. Bir TimeSpan değer. Yeniden yürütme mekanizmasının istemci ile sunucu arasında ne kadar süre dengesizliklere dayanabileceğini yönetir. Güvenlik mekanizması, gönderilen zaman damgasını inceler ve geçmişte çok geriye gönderilip gönderilmediğini belirler. Varsayılan değer 5 dakikadır.

    3. ReplayWindow. Bir TimeSpan değer. Bu, bir iletiyi istemciye ulaşmadan önce sunucu gönderdikten (aracılar aracılığıyla) sonra ağda ne kadar süreyle yaşayabileceklerini yönetir. İstemci, yeniden yürütme algılama amacıyla en son ReplayWindow iletilerde gönderilen iletilerin imzalarını izler.

    4. ReplayCacheSize. Tamsayı değeri. İstemci, iletinin imzalarını bir önbellekte depolar. Bu ayar önbelleğin kaç imza depolayabileceğinizi belirtir. Son yeniden yürütme penceresinde gönderilen ileti sayısı önbellek sınırına ulaşırsa, önbelleğe alınan en eski imzalar süre sınırına ulaşana kadar yeni iletiler reddedilir. Varsayılan değer 500000'dir.

Kodu kullanarak hizmette yeniden yürütme algılamasını denetlemek için

  1. içinde kullanılacak bir SecurityBindingElementCustomBindingoluşturun.

  2. sınıfına LocalServiceSettings bir başvuru döndürmek LocalServiceSecuritySettings için özelliğini kullanın ve özellikleri daha önce açıklandığı gibi ayarlayın.

İstemci veya hizmet yapılandırmasında yeniden yürütme algılamasını denetlemek için

  1. <customBinding> oluşturun.

  2. Bir <security> öğe oluşturun.

  3. localClient <Ayarlar> veya <localService Ayarlar> oluşturun.

  4. Aşağıdaki öznitelik değerlerini uygun şekilde ayarlayın: detectReplays, maxClockSkew, replayWindowve replayCacheSize. Aşağıdaki örnek hem hem <localServiceSettings><localClientSettings> de öğesinin özniteliklerini ayarlar:

    <customBinding>  
      <binding name="NewBinding0">  
       <textMessageEncoding />  
        <security>  
         <localClientSettings
          replayCacheSize="800000"
          maxClockSkew="00:03:00"  
          replayWindow="00:03:00" />  
         <localServiceSettings
          replayCacheSize="800000"
          maxClockSkew="00:03:00"  
          replayWindow="00:03:00" />  
        <secureConversationBootstrap />  
       </security>  
      <httpTransport />  
     </binding>  
    </customBinding>  
    

Örnek

Aşağıdaki örnek yöntemini kullanarak CreateKerberosBindingElement bir SymmetricSecurityBindingElement oluşturur ve bağlamanın yeniden yürütme özelliklerini ayarlar.

private SecurityBindingElement CreateSymmetricBindingForClient()
{
    SymmetricSecurityBindingElement b = SecurityBindingElement.CreateKerberosBindingElement();
    b.LocalClientSettings.DetectReplays = true;
    b.LocalClientSettings.MaxClockSkew = new TimeSpan(0, 3, 0);
    b.LocalClientSettings.ReplayWindow = new TimeSpan(0, 2, 0);
    b.LocalClientSettings.ReplayCacheSize = 10000;
    return b;
}
Private Function CreateSymmetricBindingForClient() As SecurityBindingElement
    Dim b = SecurityBindingElement.CreateKerberosBindingElement()
    With b.LocalClientSettings
        .DetectReplays = True
        .MaxClockSkew = New TimeSpan(0, 3, 0)
        .ReplayWindow = New TimeSpan(0, 2, 0)
        .ReplayCacheSize = 10000
    End With
    Return b
End Function

Yeniden Yürütme Kapsamı: Yalnızca İleti Güvenliği

Aşağıdaki yordamların yalnızca İleti güvenlik modu için geçerli olduğunu unutmayın. İleti Kimlik Bilgileri ile Taşıma ve Taşıma modlarında aktarım mekanizmaları yeniden yürütmeleri algılar.

Güvenli Konuşma Notları

Güvenli konuşmaları etkinleştiren bağlamalar için bu ayarları hem uygulama kanalı hem de güvenli konuşma önyükleme bağlaması için ayarlayabilirsiniz. Örneğin, uygulama kanalı için yeniden yürütmeleri kapatabilir ancak güvenli konuşmayı oluşturan bootstrap kanalı için etkinleştirebilirsiniz.

Güvenli konuşma oturumları kullanmıyorsanız, yeniden yürütme algılama, sunucu grubu senaryolarında ve işlemin geri dönüştürülmesi sırasında yeniden yürütmeleri algılamayı garanti etmez. Bu, sistem tarafından sağlanan aşağıdaki bağlamalar için geçerlidir:

Kod Derleniyor

Ayrıca bkz.