Подключение к ядру СУБД с расширенной защитой

Область применения:SQL Server

Расширенная защита помогает предотвращать атаки ретрансляции аутентификации, гарантируя, что клиент знает, к какой службе он подключается.

Расширенная защита — это функция сетевых компонентов, реализованных операционной системой. Расширенная защита поддерживается в Windows.

SQL Server безопаснее, если подключения выполняются с помощью расширенной защиты.

Контрольный список требований

Для обеспечения эффективной расширенной защиты необходимо выполнить все следующие условия:

  1. Используйте драйвер клиента , поддерживающий привязку каналов.
  2. Включите шифрование TLS для подключения, чтобы клиент мог создать маркер привязки канала (CBT).
  3. Подключитесь, используя правильное имя участника-службы (SPN), соответствующее экземпляру SQL Server.
  4. Используйте проверка подлинности Windows (NTLM или Kerberos). Расширенная защита не применяется к проверке подлинности SQL.
  5. Включите расширенную защиту для экземпляра SQL Server (задайте значение "Разрешено" или "Обязательно").

Note

Пример строка подключения в C# с поддержкой расширенной защиты см. в примере строка подключения.

Описание расширенной защиты

Расширенная защита использует привязку к службе и привязку канала, чтобы помочь предотвратить атаку ретрансляции аутентификации. При атаке ретрансляции аутентификации клиент, который может выполнять аутентификацию NTLM (например, Windows Explorer, Outlook, приложение .NET SqlClient и другие), подключается к злоумышленнику (например, к вредоносному файловому серверу CIFS). Злоумышленник использует учетные данные клиента, чтобы выдавать себя за клиента и аутентифицироваться в сервисе (например, экземпляр ядра СУБД).

Существуют два варианта этой атаки:

  • При атаке-приманке клиент добровольно подключается к злоумышленнику.

  • В спуфинговой атаке клиент намерен подключиться к допустимой службе, но не знает, что одна или обе маршрутизация DNS и IP-адреса отравляются, чтобы перенаправить подключение к злоумышленнику.

SQL Server поддерживает привязку служб и каналов, чтобы сократить возможность проведения таких атак на экземпляр SQL Server.

Привязка службы

Привязка службы противодействует атакам приманивания, требуя, чтобы клиент отправлял подписанное имя участника-службы (SPN) службы SQL Server, к которой клиент намерен подключиться. В рамках ответа аутентификации служба проверяет, совпадает ли полученное в пакете имя основного участника службы (SPN) с ее собственным SPN. Если клиента заманивают подключиться к злоумышленнику, клиент включает подписанный SPN злоумышленника. Злоумышленник не может переслать пакет для аутентификации на настоящий сервис SQL Server, выступая в роли клиента, так как это будет включать в себя SPN злоумышленника. Привязка службы влечет за собой незначительные единовременные затраты, но не устраняет атаки подделки (спуфинга). Привязка службы возникает, когда клиентское приложение не использует шифрование для подключения к SQL Server.

Привязка канала

Привязка канала устанавливает безопасный канал (Schannel) между клиентом и экземпляром службы SQL Server. Служба проверяет подлинность клиента, сравнивая маркер привязки канала клиента (CBT), специфичный для этого канала, с собственным CBT. Привязка канала противодействует как заманивающим атакам, так и атакам с подделкой. Тем не менее, это увеличивает затраты на выполнение, так как требуется шифрование TLS для всего трафика сеанса. Привязка канала возникает, когда клиентское приложение использует шифрование для подключения к SQL Server независимо от того, применяется ли шифрование клиентом или сервером.

Предупреждение

SQL Server и поставщики данных Microsoft для SQL Server поддерживают старые протоколы, включая TLS 1.0 и SSL 3.0. Если вы принудительно задаёте использование другого протокола (например, TLS 1.2 или TLS 1.3), внося изменения на уровне SChannel в операционной системе, подключение к SQL Server может завершиться ошибкой. Убедитесь, что у вас есть последняя сборка SQL Server для поддержки TLS 1.2 или TLS 1.3. Дополнительные сведения см. в разделе TLS 1.2 и TLS 1.3.

Поддержка операционной системы

Следующие ссылки содержат дополнительные сведения о том, как Windows поддерживает расширенную защиту:

Поддержка драйверов

Единственные драйверы, поддерживающие расширенную защиту, — это драйверы для Windows:

  • Драйвер Microsoft ODBC для SQL Server (только в Windows)
  • Драйвер Microsoft OLE DB для SQL Server
  • System.Data.SqlClient (в .NET Framework в Windows)
  • Microsoft.Data.SqlClient (в Windows)

Настройки

Три параметра подключения SQL Server влияют на привязку службы и привязку канала. Эти параметры можно настроить с помощью диспетчер конфигурации SQL Server или WMI. Просмотреть эти параметры можно с помощью аспекта Параметры протокола сервера в компоненте управления на основе политик.

Принудительное шифрование

Возможные значения: Да и Нет. Чтобы использовать привязку канала, задайте для принудительного шифрованиязначение "Да", и все клиенты должны шифроваться. Если указано значение Нет, гарантируется только привязка к службе. ПараметрПринудительное шифрование — это один из флажков на вкладке Свойства протоколов для MSSQLSERVER (вкладка "Флаги") в диспетчере конфигурации SQL Server. Начиная с SQL Server 2022 (16.x), можно также установить для параметра Force Strict Encryption значение Да для более надежной защиты за счет использования TDS 8.0. Дополнительные сведения см. в разделе "Настройка ядра СУБД SQL Server для шифрования подключений".

Задайте для параметра Принудительное шифрование значение "Да" при использовании с Расширенной защитой.

Расширенная защита

Возможными значениями являются Выкл., Разрешенои Обязательно. Используйте переменную расширенной защиты, чтобы задать уровень расширенной защиты для каждого экземпляра SQL Server. Расширенную защиту можно найти в свойствах "Protocols for MSSQLSERVER" (вкладка "Дополнительно") в диспетчер конфигурации SQL Server.

  • Установите значение Off , чтобы отключить расширенную защиту. Экземпляр SQL Server принимает подключения от любого клиента независимо от того, защищен ли клиент. Off совместим со старыми и неисправленными операционными системами, но менее безопасен. Используйте этот параметр, если клиентские операционные системы не поддерживают расширенную защиту.

  • Установите значение "Разрешено", чтобы требовать расширенную защиту для подключений из операционных систем, поддерживающих расширенную защиту. Расширенная защита игнорируется для подключений из операционных систем, которые не поддерживают расширенную защиту. Подключения от незащищенных клиентских приложений, работающих в защищенных клиентских операционных системах, отклоняются. Этот параметр является более безопасным, чем Off, но это не является самым безопасным. Используйте этот параметр в смешанных средах. Некоторые операционные системы поддерживают расширенную защиту, а другие — нет.

  • Установите значение "Обязательный", чтобы принимать только подключения из защищенных приложений в защищенных операционных системах. Этот параметр является наиболее безопасным, но подключения из операционных систем или приложений, которые не поддерживают расширенную защиту, не могут подключаться к SQL Server.

Дополнительные сведения о рекомендуемых параметрах см. в разделе "Включение шифрования с расширенной защитой".

Принятые SPNs NTLM

Укажите переменную Accepted NTLM SPNs, если с сервером связано более одного SPN. Когда клиент пытается подключиться к серверу, используя действительное SPN, о котором сервер не знает, привязка сервиса завершается ошибкой. Чтобы избежать этой проблемы, укажите несколько SPN, представляющих сервер, в параметре Принятые SPN NTLM. Принятые NTLM SPN — это ряд SPN, разделенных точками с запятой. Например, чтобы разрешить SPN MSSQLSvc/ HostName1.Contoso.com и MSSQLSvc/ HostName2.Contoso.com, введите MSSQLSvc/HostName1.Contoso.com;MSSQLSvc/HostName2.Contoso.com в поле Принятые SPN NTLM. Максимальная длина этой переменной 2 048 символов. Принятые SPN NTLM можно найти в свойствах "Протоколы для MSSQLSERVER" (вкладка "Дополнительно") в диспетчер конфигурации SQL Server.

Включение расширенной защиты ядра СУБД

Чтобы использовать расширенную защиту, сервер и клиент должны иметь операционную систему, которая поддерживает расширенную защиту и должна быть включена в операционной системе. Дополнительные сведения о включении расширенной защиты для операционной системы см. в разделе "Расширенная защита для проверки подлинности".

Хотя расширенная защита и NTLMv2 включены по умолчанию во всех поддерживаемых версиях Windows, расширенная защита по умолчанию не включена для SQL Server подключений. Его необходимо включить вручную в диспетчер конфигурации SQL Server.

Чтобы включить расширенную защиту для подключений SQL Server, администраторы должны настроить параметры в диспетчер конфигурации SQL Server. Эта конфигурация включает параметры привязки к службе и привязки канала для снижения риска различных типов атак ретрансляции аутентификации. Подробные инструкции см. в SQL Server документации по настройке расширенной защиты.

Включение шифрования с помощью расширенной защиты

Применяется к: SQL Server

Чтобы повысить безопасность при использовании проверки подлинности Windows, задайте для параметра Расширенная защита значение «Обязательно», а для параметра Принудительное шифрование — значение «Да» в диспетчер конфигурации SQL Server.

Эти параметры обеспечивают наиболее безопасную конфигурацию для SQL Server.

Note

В SQL Server 2022 (16.x) и более поздних версиях используйте принудительное шифрование вместо принудительного шифрования, чтобы обеспечить более надежную безопасность с помощью TDS 8.0.

Обновите строки подключения , чтобы вместить эти изменения.

Дополнительные сведения можно найти здесь

После включения расширенной защиты

После включения расширенной защиты на серверном компьютере выполните следующие действия, чтобы включить расширенную защиту:

  1. Перейдите к диспетчер конфигурации SQL Server из меню "Пуск" Windows.

  2. Разверните Конфигурация сети SQL Server, а затем щелкните правой кнопкой мыши по Протоколы для<InstanceName>. Выберите Свойства.

  3. На вкладке "Дополнительно" задайте для расширенной защиты соответствующий параметр для привязки канала и привязки службы.

  4. При необходимости, если с сервером связано несколько SPN, настройте поле Принятые SPN NTLM на вкладке Дополнительно, как описано в разделе Параметры.

  5. Для привязки канала на вкладке Флаги установите для параметра Принудительное шифрование значение Да. Этот параметр рекомендуется.

  6. Перезапустите службу ядра СУБД.

Настройка других компонентов SQL Server

Дополнительные сведения о настройке служб Reporting Services см. в статье "Расширенная защита для проверки подлинности с помощью служб Reporting Services".

При использовании IIS для доступа к данным Analysis Services по соединению HTTP или HTTPS служба Analysis Services может воспользоваться преимуществами расширенной защиты, предоставляемой IIS. Дополнительные сведения о настройке IIS для использования расширенной защиты см. в разделе Настройка расширенной защиты в IIS 7.5.

Пример строки подключения

В следующем примере C# строка подключения использует проверку подлинности Windows (Integrated Security=true). Маркер привязки канала включен с помощью шифрования TLS (Encrypt=true). Проверка сертификата обеспечивается с помощью TrustServerCertificate=false. Хотя это не обязательно, HostNameInCertificate рекомендуется и включается в этот пример.

using (var conn = new SqlConnection(
    "Server=sql01.contoso.com;" +
    "Database=AdventureWorks2025;" +
    "Integrated Security=true;" +        
    "Encrypt=true;" +                   
    "TrustServerCertificate=false;" +    
    "HostNameInCertificate=sql01.contoso.com;")) 
{
    conn.Open();
}