Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
La protezione estesa consente di evitare attacchi di inoltro dell'autenticazione assicurandosi che il client conosca il servizio a cui si connette.
La protezione estesa è una funzionalità dei componenti di rete implementati dal sistema operativo. La protezione estesa è supportata in Windows.
SQL Server è più sicuro quando vengono stabilite connessioni tramite la protezione estesa.
Elenco di controllo dei requisiti
Affinché la protezione estesa sia efficace, è necessario soddisfare tutte le condizioni seguenti:
- Usare un driver client che supporta l'associazione di canali.
- Abilitare la crittografia TLS nella connessione in modo che il client possa produrre un token di associazione del canale (CBT).
- Connettersi usando il nome dell'entità servizio (SPN) corretto corrispondente all'istanza di SQL Server.
- Usa l'autenticazione di Windows (NTLM o Kerberos). La protezione estesa non si applica all'autenticazione SQL.
- Abilitare la protezione estesa nell'istanza di SQL Server (impostata su Consentito o Obbligatorio).
Note
Per un esempio di stringa di connessione in C# che supporta la protezione estesa, vedere Esempio stringa di connessione.
Descrizione della protezione estesa
La protezione estesa usa l'associazione di servizi e l'associazione di canali per impedire un attacco di inoltro dell'autenticazione. In un attacco di inoltro dell'autenticazione, un client in grado di eseguire l'autenticazione NTLM (ad esempio, Esplora risorse di Windows, Outlook, un'applicazione .NET SqlClient e altri ancora) si connette a un attaccante (ad esempio, un file server CIFS malevolo). L'utente malintenzionato usa le credenziali del client per mascherarsi da client ed autenticarsi presso un servizio, ad esempio un'istanza del motore di database.
Esistono due varianti di questo attacco:
In un attacco di adescamento, il client si connette volontariamente all'attaccante.
In un attacco di spoofing, il client intende collegarsi a un servizio valido, ma non sa che il DNS o l'instradamento IP, o entrambi, sono stati compromessi per reindirizzare invece la connessione verso l'attaccante.
SQL Server supporta l'associazione al servizio e l'associazione di canale per ridurre tali attacchi sulle istanze di SQL Server.
Collegamento di servizi
L'associazione di servizio contrasta gli attacchi di luring richiedendo a un client di inviare un nome dell'entità servizio (SPN) firmato del servizio SQL Server a cui intende connettersi. Come parte della risposta di autenticazione, il servizio verifica che l'SPN ricevuto nel pacchetto corrisponda al proprio SPN. Se un client viene attirato a connettersi a un attaccante, il client include l'SPN firmato dell'attaccante. L'attaccante non può inoltrare il pacchetto per autenticarsi al servizio SQL Server reale fingendo di essere il client, perché includerebbe l'SPN dell'attaccante. Il binding del servizio comporta un costo una tantum, trascurabile, ma non risolve gli attacchi di spoofing. L'associazione al servizio si verifica quando un'applicazione client non usa la crittografia per connettersi al SQL Server.
Associazione di canali
L'associazione di canale stabilisce un canale sicuro (Schannel) tra un client e un'istanza del servizio SQL Server. Il servizio verifica l'autenticità del client confrontando il token di associazione del canale (CBT) specifico del client per quel canale con il proprio CBT. L'associazione di canale neutralizza sia gli attacchi luring che di spoofing. Tuttavia, comporta un costo di runtime maggiore perché richiede la crittografia TLS (Transport Layer Security) di tutto il traffico di sessione. L'associazione di canale si verifica quando un'applicazione client usa la crittografia per connettersi al SQL Server, indipendentemente dal fatto che la crittografia venga applicata dal client o dal server.
Avviso
SQL Server e provider di dati Microsoft per SQL Server supportano protocolli meno recenti, tra cui TLS 1.0 e SSL 3.0. Se si applica un protocollo diverso(ad esempio TLS 1.2 o TLS 1.3) apportando modifiche al livello SChannel del sistema operativo, le connessioni a SQL Server potrebbero non riuscire. Assicurarsi di avere la build più recente di SQL Server per supportare TLS 1.2 o TLS 1.3. Per altre informazioni, vedere TLS 1.2 e TLS 1.3.
Supporto del sistema operativo
I collegamenti seguenti forniscono altre informazioni su come Windows supporta la protezione estesa:
- Autenticazione Integrata di Windows con Protezione Estesa
- Avviso di Sicurezza Microsoft (973811), Protezione Estesa per l'Autenticazione
Supporto driver
Gli unici driver che supportano la protezione estesa sono basati su Windows:
- Microsoft ODBC Driver per SQL Server (solo su Windows)
- Microsoft OLE DB Driver per SQL Server
- System.Data.SqlClient (su .NET Framework su Windows)
- Microsoft.Data.SqlClient (in Windows)
Impostazione
Tre impostazioni di connessione di SQL Server influiscono sul binding del servizio e sul channel binding. È possibile configurare queste impostazioni usando il Gestione configurazione SQL Server o WMI. Visualizzare queste impostazioni tramite la scheda Impostazioni del protocollo del server della Gestione basata su criteri.
Crittografia obbligatoria
I valori possibili sono Sì e No. Per usare l'associazione di canali, impostare Forza crittografia su Sì e tutti i client devono crittografare. Se è impostato su No, viene garantito solo il binding del servizio. Crittografia Forzata si trova in Proprietà - Protocolli per MSSQLSERVER (scheda Flag) in Gestione configurazione SQL Server. A partire da SQL Server 2022 (16.x), è anche possibile impostare Force Strict Encryption su Sì per una protezione più avanzata usando TDS 8.0. Per altre informazioni, vedere Configurare il motore di database di SQL Server per la crittografia delle connessioni.
Impostare Crittografia forzata su Sì se usata con Protezione estesa.
Protezione estesa
I valori possibili sono Disattivata, Consentitae Obbligatoria. Usare la variabile Protezione estesa per impostare il livello di protezione estesa per ogni istanza di SQL Server. È possibile trovare la protezione estesa nei protocolli per le proprietà MSSQLSERVER (scheda Avanzate) in Gestione configurazione SQL Server.
Impostare su No per disabilitare la protezione estesa. L'istanza di SQL Server accetta connessioni da qualsiasi client indipendentemente dal fatto che il client sia protetto o meno. Off è compatibile con sistemi operativi meno recenti e senza patch, ma è meno sicuro. Usare questa impostazione quando i sistemi operativi client non supportano la protezione estesa.
Impostare su Consentito per richiedere la protezione estesa per le connessioni dai sistemi operativi che supportano la protezione estesa. La protezione estesa viene ignorata per le connessioni dai sistemi operativi che non supportano la protezione estesa. Le connessioni da applicazioni client non protette in esecuzione nei sistemi operativi client protetti vengono rifiutate. Questa impostazione è più sicura di Off, ma non è la più sicura. Usare questa impostazione in ambienti misti. Alcuni sistemi operativi supportano la protezione estesa e altri no.
Impostare su Obbligatorio per accettare solo connessioni da applicazioni protette nei sistemi operativi protetti. Questa impostazione è la più sicura, ma le connessioni da sistemi operativi o applicazioni che non supportano la protezione estesa non possono connettersi a SQL Server.
Per altre informazioni sulle impostazioni consigliate, vedere Abilitare la crittografia con la protezione estesa.
SPN NTLM accettati
Specificare la variabile SPN NTLM accettata quando più SPN conoscono un server. Quando un client tenta di connettersi al server usando un nome SPN valido non noto al server, l'associazione al servizio ha esito negativo. Per evitare questo problema, specificare diversi NOMI SPN che rappresentano il server utilizzando i nomi SPN NTLM accettati. SPN NTLM accettati è una serie di SPN separati da punti e virgola. Per consentire, ad esempio, l'uso dei nomi MSSQLSvc/ HostName1.Contoso.com e MSSQLSvc/ HostName2.Contoso.com, digitare MSSQLSvc/HostName1.Contoso.com;MSSQLSvc/HostName2.Contoso.com nella casella SPN NTLM accettati . La lunghezza massima della variabile è di 2048 caratteri. I nomi SPN NTLM accettati sono disponibili nella scheda Protocolli per MSSQLSERVER (scheda Avanzate) in Gestione configurazione SQL Server.
Abilitare la protezione estesa per il motore di database
Per usare la protezione estesa, sia il server che il client devono avere un sistema operativo che supporta la protezione estesa e deve essere abilitato nel sistema operativo. Per altre informazioni su come abilitare la protezione estesa per il sistema operativo, vedere Protezione estesa per l'autenticazione.
Anche se la protezione estesa e NTLMv2 sono abilitate per impostazione predefinita in tutte le versioni supportate di Windows, la protezione estesa non è abilitata per impostazione predefinita per le connessioni SQL Server. È necessario abilitarlo manualmente in Gestione configurazione SQL Server.
Per abilitare la protezione estesa per le connessioni SQL Server, gli amministratori devono configurare le impostazioni in Gestione configurazione SQL Server. Questa configurazione include opzioni per l'associazione al servizio e l'associazione di canali per attenuare vari tipi di attacchi di inoltro dell'autenticazione. Per istruzioni dettagliate, vedere la documentazione SQL Server sulla configurazione della protezione estesa.
Abilitare la crittografia con la protezione estesa
Si applica a: SQL Server
Per migliorare la sicurezza quando si usa autenticazione di Windows, impostare Protezione estesa su Obbligatorio e Forza crittografia su Sì in Gestione configurazione SQL Server.
Queste impostazioni forniscono la configurazione più sicura per SQL Server.
Note
In SQL Server 2022 (16.x) e versioni successive usare Force Strict Encryption anziché Forza crittografia per abilitare una maggiore sicurezza tramite TDS 8.0.
Aggiornare le stringhe di connessione per soddisfare queste modifiche.
Per ulteriori informazioni consulta:
- Connettersi al motore di database con la protezione estesa
- Configurare motore di database di SQL Server per la crittografia delle connessioni
- TDS 8.0
- Connettersi a SQL Server con crittografia rigorosa
Dopo aver abilitato la protezione estesa
Dopo aver abilitato la protezione estesa nel computer server, seguire questa procedura per abilitare la protezione estesa:
Passare a Gestione configurazione SQL Server dal menu Start Windows.
Espandere Configurazione di rete di SQL Server e quindi fare clic con il pulsante destro del mouse su Protocolli per<InstanceName>. Selezionare Proprietà.
Nella scheda Avanzate impostare Protezione estesa sull'impostazione appropriata sia per l'associazione di canale che per l'associazione al servizio.
Facoltativamente, quando più SPN conoscono un server, configurare il campo SPN NTLM accettati nella scheda Avanzate , come descritto nella sezione Impostazioni .
Per l'associazione di canali, nella scheda Flag impostare Forza crittografia su Sì. Questa impostazione è consigliata.
Riavviare il servizio motore di database.
Configurare altri componenti di SQL Server
Per altre informazioni su come configurare Reporting Services, vedere Protezione estesa per l'autenticazione con Reporting Services.
Quando si usa IIS per accedere ai dati di Analysis Services con una connessione HTTP o HTTPS, Analysis Services può sfruttare la protezione estesa fornita da IIS. Per ulteriori informazioni sulla configurazione di IIS per l'utilizzo della protezione estesa, vedere l'articolo relativo alla configurazione della protezione estesa in IIS 7.5.
Stringa di connessione di esempio
Nell'esempio C# seguente il stringa di connessione usa autenticazione di Windows (Integrated Security=true). Il token di associazione del canale è abilitato tramite la crittografia TLS (Encrypt=true). La validazione del certificato è applicata tramite TrustServerCertificate=false. Sebbene non sia obbligatorio, HostNameInCertificate è consigliato e incluso in questo esempio.
using (var conn = new SqlConnection(
"Server=sql01.contoso.com;" +
"Database=AdventureWorks2025;" +
"Integrated Security=true;" +
"Encrypt=true;" +
"TrustServerCertificate=false;" +
"HostNameInCertificate=sql01.contoso.com;"))
{
conn.Open();
}
Contenuto correlato
- Configurazione di rete del server
- Configurazione della rete client
- Panoramica sulla protezione estesa per l'autenticazione
- Autenticazione Integrata di Windows con Protezione Estesa