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 altre informazioni sul rilevamento della riproduzione dei messaggi, vedere Rilevamento della riproduzione dei messaggi.
Nella procedura seguente vengono illustrate le varie proprietà che è possibile utilizzare per controllare il rilevamento riproduzione 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 maggiori informazioni, vedere Procedura: Creare un'associazione personalizzata usando 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 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
. ValoreTimeSpan
. 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'ultimoReplayWindow
a scopo di rilevamento di attacchi di tipo replay.ReplayCacheSize
. Valore intero. 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 <customBinding>.
Creare un elemento
<security>
.Creare un <localClientSettings> o <localServiceSettings>.
Se necessario, impostare gli attributi seguenti:
detectReplays
,maxClockSkew
,replayWindow
ereplayCacheSize
. Nell'esempio seguente vengono impostati entrambi gli elementi<localServiceSettings>
<localClientSettings> e<localClientSettings>
.<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 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
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: