Procedura: attivare il rilevamento di attacchi di tipo replay dei messaggi
Un attacco di tipo replay si verifica quando l'autore dell'attacco copia un flusso di messaggi tra due interessati e lo riproduce nei confronti di uno o più degli interessati. Se l'attacco non viene contrastato, i computer colpiti elaboreranno il flusso come se i messaggi fossero legittimi, determinando una serie di conseguenze negative, ad esempio ordini ridondanti di un elemento.
Per ulteriori informazioni su rilevamento di attacchi di tipo replay dei messaggi, vedere Rilevamento di attacchi di tipo replay dei messaggi (la pagina potrebbe essere in inglese).
Nella procedura seguente vengono illustrate le varie proprietà che è possibile utilizzare per controllare il rilevamento di attacchi di tipo replay utilizzando Windows Communication Foundation (WCF).
Per controllare il rilevamento di attacchi di tipo replay nel client mediante il codice
Creare un elemento SecurityBindingElement da utilizzare in una classe CustomBinding. Per ulteriori informazioni, vedere Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement. Nell'esempio seguente si utilizza un elemento SymmetricSecurityBindingElement creato con il metodo CreateKerberosBindingElement della classe SecurityBindingElement.
Utilizzare la proprietà LocalClientSettings per restituire un riferimento alla classe LocalClientSecuritySettings e impostare le proprietà seguenti, in base alle esigenze:
DetectReplay. Valore booleano. Determina se il client deve rilevare attacchi di tipo replay dal server. Il valore predefinito è true.
MaxClockSkew. Valore dell'elemento TimeSpan. Determina lo sfasamento temporale tollerato dal meccanismo di replay tra client e server. Il meccanismo di sicurezza esamina il timestamp inviato e stabilisce se è troppo vecchio. Il valore predefinito è 5 minuti.
ReplayWindow. Valore dell'elemento TimeSpan. Determina quanto tempo un messaggio può permanere nella rete dopo l'invio dal server (tramite intermediari) prima di raggiungere il client. Il client tiene traccia delle firme dei messaggi inviati all'interno dell'ultimo ReplayWindow a scopo di rilevamento di attacchi di tipo replay.
ReplayCacheSize. Valore integer. Il client archivia le firme del messaggio in una cache. Questa impostazione specifica quante firme che possono essere archiviate nella cache. Se il numero dei messaggi inviati all'interno dell'ultima finestra di replay raggiunge il limite della cache, i messaggi nuovi vengono respinti finché le firme più vecchie contenute nella cache non raggiungono il limite di tempo. Il valore predefinito è 500000.
Per controllare il rilevamento di attacchi di tipo replay nel servizio mediante il codice
Creare un elemento SecurityBindingElement da utilizzare in una classe CustomBinding.
Utilizzare la proprietà LocalServiceSettings per restituire un riferimento alla classe LocalServiceSecuritySettings e impostare le proprietà come descritto in precedenza.
Per controllare il rilevamento di attacchi di tipo replay nella configurazione per il client o il servizio
Creare un oggetto customBinding Element.
Creare un elemento <security>.
Creare un elemento localClientSettings element o localServiceSettings element.
Se necessario, impostare gli attributi seguenti: detectReplays, maxClockSkew, replayWindow e replayCacheSize. Nell'esempio seguente vengono impostati entrambi gli elementi <localServiceSettings><localClientSettings> e .
<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>
Esempio
Nell'esempio seguente viene creata una classe SymmetricSecurityBindingElement utilizzando il metodo CreateKerberosBindingElement e vengono impostate le proprietà di replay dell'associazione.
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;
}
Ambito di attacchi di tipo replay: solo sicurezza messaggi
Si noti che le procedure seguenti si riferiscono solo alla modalità di sicurezza messaggio. Per le modalità di trasporto e di trasporto con credenziali messaggio, i meccanismi di trasporto rilevano gli attacchi di tipo replay.
Note sulla conversazione protetta
Per le associazioni che consentono conversazioni protette, è possibile regolare queste impostazioni sia per il canale dell'applicazione che per l'associazione del bootstrap della conversazione protetta. È ad esempio possibile disattivare gli attacchi di tipo replay per il canale dell'applicazione abilitandoli tuttavia per il canale del bootstrap che stabilisce la conversazione protetta.
Se non si utilizzano sessioni di conversazione protetta, il rilevamento di attacchi di tipo replay non garantisce il rilevamento di attacchi in scenari di server farm e quando il processo viene riciclato. Ciò vale per le associazioni fornite dal sistema seguenti:
WSHttpBinding con la proprietà EstablishSecurityContext impostata su false.
Compilazione del codice
Per compilare il codice sono necessari gli spazi dei nomi seguenti:
Vedere anche
Riferimento
LocalClientSecuritySettings
LocalServiceSecuritySettings
Concetti
Conversazioni e sessioni protette
Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement