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
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.
Verwenden Sie die LocalClientSettings-Eigenschaft, um einen Verweis auf die LocalClientSecuritySettings-Klasse zurückzugeben und die folgenden Eigenschaften nach Bedarf festzulegen:
DetectReplay. Ein boolescher Wert. Dieser bestimmt, ob der Client Replays vom Server erkennen sollte. Die Standardeinstellung ist true.
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.
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.
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
Erstellen Sie ein SecurityBindingElement zur Verwendung in einer CustomBinding.
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
Erstellen Sie eine customBinding Element.
Erstellen Sie ein <security>-Element.
Erstellen Sie ein localClientSettings element oder einlocalServiceSettings element.
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:
WSHttpBinding mit der EstablishSecurityContext-Eigenschaft festgelegt auf false.
Kompilieren des Codes
Die folgenden Namespaces sind zum Kompilieren des Codes erforderlich:
Siehe auch
Verweis
LocalClientSecuritySettings
LocalServiceSecuritySettings
Konzepte
Sichere Unterhaltungen und sichere Sitzungen.
Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement