Freigeben über


Vorgehensweise: Aktivieren der Nachrichtenreplay-Erkennung

Ein Replay-Angriff tritt auf, wenn ein Angreifer einen Nachrichtenstrom zwischen zwei Parteien kopiert und den Strom für eine oder mehrere Parteien wiedergibt. Wenn der Angriff nicht abgeschwächt wird, verarbeiten die angegriffenen Computer den Strom als zulässige Meldungen, was zu einer Reihe negativer Konsequenzen führt, wie z. B. redundanten Bestellungen eines Artikels.

Weitere Informationen über zur Nachrichtenreplay-Erkennung finden Sie unter Message Replay Detection.

Die folgende Prozedur veranschaulicht verschiedene Eigenschaften, die Sie verwenden können, um die Replay-Erkennung mit Windows Communication Foundation (WCF) zu steuern.

So steuern Sie die Replay-Erkennung für den Client mithilfe von Code

  1. Erstellen Sie ein SecurityBindingElement zur Verwendung in einem CustomBinding. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement. Im folgenden Beispiel wird eine SymmetricSecurityBindingElement verwendet, die mithilfe der CreateKerberosBindingElement der SecurityBindingElement-Klasse erstellt worden ist.

  2. Verwenden Sie die LocalClientSettings-Eigenschaft, um einen Verweis auf die LocalClientSecuritySettings-Klasse zurückzugeben und die folgenden Eigenschaften nach Bedarf festzulegen:

    1. DetectReplay. Ein boolescher Wert. Dieser bestimmt, ob der Client Replays vom Server erkennen sollte. Die Standardeinstellung ist true.

    2. MaxClockSkew. Ein TimeSpan-Wert. Bestimmt die Zeitverschiebung, die der Replay-Mechanismus zwischen dem Client und dem Server tolerieren kann. Das Sicherheitsverfahren untersucht den gesendeten Zeitstempel und bestimmt, ob er zu weit in der Vergangenheit zurückliegend gesendet wurde. Der Standardwert beträgt fünf Minuten.

    3. ReplayWindow. Ein TimeSpan-Wert. Dieser bestimmt, wie lange eine Nachricht im Netzwerk bleiben kann, nachdem sie vom Server (durch Vermittler) gesendet worden ist, bevor sie den Client erreicht. Der Client verfolgt die Signaturen der Nachrichten, die innerhalb des letzten ReplayWindow gesendet wurden, zur Replay-Erkennung.

    4. ReplayCacheSize. Ein Ganzzahlwert. Der Client speichert die Signaturen der Nachricht in einem Cache. Diese Einstellung gibt an, wie viele Signaturen der Cache speichern kann. Wenn die Zahl der Nachrichten, die innerhalb des letzten Replay-Fensters gesendet wurden, das Cachelimit erreicht, werden neue Nachrichten zurückgewiesen, bis die ältesten zwischengespeicherten Signaturen das Zeitlimit überschreiten. Die Standardeinstellung ist 500.000.

So steuern Sie die Replay-Erkennung für den Dienst mithilfe von Code

  1. Erstellen Sie ein SecurityBindingElement zur Verwendung in einer CustomBinding.

  2. Verwenden Sie die LocalServiceSettings-Eigenschaft, um einen Verweis auf die LocalServiceSecuritySettings-Klasse zurückzugeben, und legen Sie die Eigenschaften fest, wie zuvor beschrieben.

So steuern Sie die Replay-Erkennung in der Konfiguration für den Client oder den Dienst

  1. Erstellen Sie eine customBinding Element.

  2. Erstellen Sie ein <security>-Element.

  3. Erstellen Sie ein localClientSettings element oder einlocalServiceSettings element.

  4. Legen Sie die folgenden Attributwerte nach Bedarf fest: detectReplays, maxClockSkew, replayWindow und replayCacheSize. Im folgenden Beispiel werden sowohl die Attribute eines <localServiceSettings><localClientSettings>- als auch eines -Elements festgelegt:

    <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>
    

Beispiel

Im folgenden Beispiel wird ein SymmetricSecurityBindingElement mithilfe der CreateKerberosBindingElement-Methode erstellt, und die Replay-Eigenschaften der Bindung werden festgelegt.

Private Function CreateSymetricBindingForClient() 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
private SecurityBindingElement CreateSymetricBindingForClient()
{
    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;
}

Replay-Bereich: Nur Nachrichtensicherheit

Beachten Sie, dass die folgenden Prozeduren nur für den Nachrichtensicherheitsmodus gelten. Für den Transportmodus und den Transportmodus mit Nachrichtenanmeldeinformationen erkennen die Transportmechanismen Replays.

Hinweise für die sichere Konversation

Bei Bindungen, die sichere Konversationen ermöglichen, können Sie diese Einstellungen sowohl für den Anwendungskanal als auch für die sichere Konversationsbootstrap-Bindung anpassen. Sie können z. B. Replays für den Anwendungskanal deaktivieren, sie jedoch für den Bootstrapkanal aktivieren, der die sichere Konversation aufbaut.

Wenn Sie keine Sitzungen für sichere Konversation verwenden, kann die Replay-Erkennung nicht garantieren, dass Replays in Serverfarmszenarien und bei der Wiederverwendung des Prozesses erkannt werden. Dies gilt für die folgenden vom System bereitgestellten Bindungen:

Kompilieren des Codes

Siehe auch

Verweis

LocalClientSecuritySettings
LocalServiceSecuritySettings

Konzepte

Sichere Unterhaltungen und sichere Sitzungen.
Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement

Weitere Ressourcen

localClientSettings element