Anleitung: Erkennung von Nachrichtenwiederholungen aktivieren

Ein Replay-Angriff tritt auf, wenn ein Angreifer einen Nachrichtenstrom zwischen zwei Parteien kopiert und den Datenstrom an eine oder mehrere der Parteien weiterspielt. Sofern nicht abgemildert, verarbeiten die Computer, die dem Angriff unterliegen, den Datenstrom als legitime Nachrichten, was zu einer Reihe schlechter Folgen führt, z. B. redundante Bestellungen eines Elements.

Weitere Informationen zur Erkennung von Nachrichtenwiedergaben finden Sie unter "Erkennung der Wiedergabe von Nachrichten".

Das folgende Verfahren veranschaulicht verschiedene Eigenschaften, mit denen Sie die Erkennung der Wiedergabe mithilfe von Windows Communication Foundation (WCF) steuern können.

So kontrollieren Sie die Wiedergabeerkennung auf dem Client mithilfe von Code

  1. Erstellen Sie eine SecurityBindingElement, um sie in einer CustomBinding zu verwenden. Weitere Informationen finden Sie unter So erstellen Sie eine benutzerdefinierte Bindung mithilfe des SecurityBindingElement. Im folgenden Beispiel wird eine SymmetricSecurityBindingElement mit der CreateKerberosBindingElement der SecurityBindingElement-Klasse erstellt.

  2. Verwenden Sie die LocalClientSettings Eigenschaft, um einen Verweis auf die LocalClientSecuritySettings Klasse zurückzugeben und gegebenenfalls eine der folgenden Eigenschaften festzulegen:

    1. DetectReplay. Ein boolescher Wert. Dies steuert, ob der Client Replays vom Server erkennen soll. Der Standardwert lautet true.

    2. MaxClockSkew. Ein TimeSpan-Wert. Bestimmt, wie viel Zeitunterschied der Replay-Mechanismus zwischen Client und Server tolerieren kann. Der Sicherheitsmechanismus untersucht den gesendeten Zeitstempel und bestimmt, ob er in der Vergangenheit zu weit zurück gesendet wurde. Die Standardeinstellung ist 5 Minuten.

    3. ReplayWindow. Ein TimeSpan-Wert. Dies bestimmt, wie lange eine Nachricht im Netzwerk leben kann, nachdem der Server sie (über Vermittler) gesendet hat, bevor sie den Client erreicht. Der Client verfolgt die Signaturen der Nachrichten, die innerhalb der letzten ReplayWindow für die Erkennung von Replay-Angriffen gesendet wurden.

    4. ReplayCacheSize. Ein ganzzahliger Wert. Der Client speichert die Signaturen der Nachricht in einem Cache. Diese Einstellung gibt an, wie viele Signaturen der Cache speichern kann. Wenn die Anzahl der im letzten Wiedergabefenster gesendeten Nachrichten den Cachegrenzwert erreicht, werden neue Nachrichten abgelehnt, bis die ältesten zwischengespeicherten Signaturen das Zeitlimit erreichen. Der Standardwert ist 500000.

So steuern Sie die Wiedergabeerkennung für den Dienst mithilfe von Code

  1. Erstellen Sie ein SecurityBindingElement, das in einem CustomBinding verwendet werden soll.

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

So steuern Sie die Wiederholungserkennung in der Konfiguration für den Client oder Dienst.

  1. Erstellen Sie ein <customBinding>.

  2. Erstellen Sie ein <security> Element.

  3. Erstellen Sie ein <localClientSettings-Objekt> oder ein <localServiceSettings-Objekt>.

  4. Legen Sie die folgenden Attributwerte entsprechend fest: detectReplays, , maxClockSkew, replayWindow, und replayCacheSize. Im folgenden Beispiel werden die Attribute sowohl eines <localServiceSettings>-Elements als auch eines <localClientSettings>-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 eine SymmetricSecurityBindingElement-Instanz mit der CreateKerberosBindingElement-Methode erstellt und die Wiedergabeeigenschaften der Bindung festgelegt.

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

Umfang der Wiederholung: Nur Nachrichtensicherheit

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

Sichere Gesprächsnotizen

Für Bindungen, die sichere Gespräche ermöglichen, können Sie diese Einstellungen sowohl für den Anwendungskanal als auch für die Bootstrap-Bindung sicherer Gespräche anpassen. Sie können beispielsweise die Wiedergabe für den Anwendungskanal deaktivieren, sie aber für den Bootstrap-Kanal aktivieren, der die sichere Kommunikation aufbaut.

Wenn Sie keine sicheren Konversationssitzungen verwenden, garantiert die Erkennung von Wiederholungen nicht die Erkennung von Wiederholungen in Serverfarm-Szenarien und wenn der Prozess recycelt wird. Dies gilt für die folgenden vom System bereitgestellten Bindungen:

Code kompilieren

Siehe auch