Sto cercando di mitigare la nostra vulnerabilità all'attacco di fallback Poodle SSL 3.0 . I nostri amministratori hanno già iniziato a disabilitare SSL a favore di TLS per le connessioni in entrata ai nostri server. E abbiamo anche consigliato al nostro team di disabilitare SSL nei loro browser web. Sto ora esaminando la nostra base di codice .NET, che avvia connessioni HTTPS con vari servizi tramite System.Net.HttpWebRequest . Credo che queste connessioni potrebbero essere vulnerabili a un attacco MITM se consentissero il fallback da TLS a SSL. Ecco cosa ho determinato finora. Qualcuno potrebbe ricontrollare questo per verificare che ho ragione? Questa vulnerabilità è nuova di zecca, quindi devo ancora vedere alcuna guida da Microsoft su come mitigarla in .NET:
I protocolli consentiti per la classe System.Net.Security.SslStream, che è alla base della comunicazione sicura in .NET, vengono impostati globalmente per ogni AppDomain tramite la proprietà System.Net.ServicePointManager.SecurityProtocol .
Il valore predefinito di questa proprietà in .NET 4.5 è
Ssl3 | Tls
(anche se non riesco a trovare la documentazione per eseguire il backup). SecurityProtocolType è un'enumerazione con l'attributo Flags, quindi è un OR bit per bit di questi due valori. Puoi verificarlo nel tuo ambiente con questa riga di codice:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Questo dovrebbe essere cambiato solo
Tls
, o forseTls12
, prima di avviare qualsiasi connessione nella tua app:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Importante: poiché la proprietà supporta più flag bit per bit, presumo che SslStream non eseguirà automaticamente il fallback su altri protocolli non specificati durante l'handshake. Altrimenti, quale sarebbe il punto di supportare più flag?
Aggiornamento su TLS 1.0 vs 1.1 / 1.2:
Secondo l'esperto di sicurezza di Google Adam Langley, TLS 1.0 è stato successivamente ritenuto vulnerabile a POODLE se non implementato correttamente , quindi dovresti considerare di passare esclusivamente a TLS 1.2.
Aggiornamento per .NET Framework 4.7 e versioni successive:
Come accennato di seguito dal Prof Von Lemongargle , a partire dalla versione 4.7 di .NET Framework, non è necessario utilizzare questo hack poiché l'impostazione predefinita consentirà al sistema operativo di scegliere la versione del protocollo TLS più sicura. Per ulteriori informazioni, vedere le procedure consigliate per Transport Layer Security (TLS) con .NET Framework .