Condividi tramite


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

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

  2. Utilizzare la proprietà LocalClientSettings per restituire un riferimento alla classe LocalClientSecuritySettings e impostare le proprietà seguenti, in base alle esigenze:

    1. DetectReplay. Valore booleano. Determina se il client deve rilevare attacchi di tipo replay dal server. Il valore predefinito è true.

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

    3. ReplayWindow. Valore 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.

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

  1. Creare un elemento SecurityBindingElement da utilizzare in una classe CustomBinding.

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

  1. Creare un <customBinding>.

  2. Creare un elemento <security>.

  3. Creare un <localClientSettings> o <localServiceSettings>.

  4. Se necessario, impostare gli attributi seguenti: detectReplays, maxClockSkew, replayWindow e replayCacheSize. 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:

Compilazione del codice

Vedi anche