확장된 보호를 사용하여 데이터베이스 엔진에 연결

적용 대상:SQL Server

확장된 보호는 클라이언트가 연결하는 서비스를 알고 있는지 확인하여 인증 릴레이 공격을 방지하는 데 도움이 됩니다.

확장된 보호는 운영 체제에서 구현하는 네트워크 구성 요소의 기능입니다. 확장된 보호는 Windows 지원됩니다.

확장된 보호를 사용하여 연결을 만들 때 SQL Server 더 안전합니다.

요구 사항 검사 목록

확장된 보호가 적용되려면 다음 조건을 모두 충족해야 합니다.

  1. 채널 바인딩을 지원하는 클라이언트 드라이버를 사용합니다.
  2. 클라이언트가 CBT(채널 바인딩 토큰)를 생성할 수 있도록 연결에서 TLS 암호화를 사용하도록 설정합니다.
  3. SQL Server 인스턴스와 일치하는 올바른 SPN(서비스 사용자 이름)으로 연결합니다.
  4. Windows 인증(NTLM 또는 Kerberos)를 사용합니다. 확장된 보호는 SQL 인증에 적용되지 않습니다.
  5. SQL Server 인스턴스에서 확장된 보호를 사용하도록 설정합니다(허용 또는 필수로 설정).

메모

확장 보호를 지원하는 C#의 연결 문자열 예제는 연결 문자열 예제를 참조하세요.

확장된 보호 설명

확장된 보호는 서비스 바인딩 및 채널 바인딩을 사용하여 인증 릴레이 공격을 방지합니다. 인증 릴레이 공격에서 NTLM 인증(예: Windows Explorer, Outlook, .NET SqlClient 애플리케이션 등)을 수행할 수 있는 클라이언트는 공격자(예: 악의적인 CIFS 파일 서버)에 연결합니다. 공격자는 클라이언트의 자격 증명을 사용하여 클라이언트로 가장하고 서비스(예: 데이터베이스 엔진 인스턴스)에 인증합니다.

이 공격의 두 가지 변형이 있습니다.

  • 유인 공격에서 클라이언트는 자발적으로 공격자에 연결합니다.

  • 스푸핑 공격에서 클라이언트는 유효한 서비스에 연결하려고 하지만 하나 또는 둘 다 DNS 및 IP 라우팅이 공격자에게 연결을 리디렉션하기 위해 포이즌된다는 것을 인식하지 못합니다.

SQL Server에서는 SQL Server 인스턴스에서 이러한 공격을 줄이는 데 도움을 주는 서비스 바인딩 및 채널 바인딩을 지원합니다.

서비스 바인딩

서비스 바인딩은 클라이언트가 연결하려는 SQL Server 서비스의 서명된 SPN(서비스 주체 이름)을 클라이언트에 보내도록 요구하여 공격을 유도합니다. 서비스는 인증 응답의 일부분으로 패킷에서 받은 SPN이 자체 SPN과 일치하는지 확인합니다. 클라이언트가 공격자에 연결하도록 유도되는 경우 클라이언트에는 공격자의 서명된 SPN이 포함됩니다. 공격자는 공격자의 SPN을 포함하기 때문에 실제 SQL Server 서비스에 클라이언트로 인증하기 위해 패킷을 릴레이할 수 없습니다. 서비스 바인딩은 1회, 무시할 수 있는 비용이 발생하지만 스푸핑 공격을 해결하지는 않습니다. 서비스 바인딩은 클라이언트 애플리케이션이 암호화를 사용하여 SQL Server 연결하지 않을 때 발생합니다.

채널 바인딩

채널 바인딩은 클라이언트와 SQL Server 서비스 인스턴스 간에 보안 채널(Schannel)을 설정합니다. 이 서비스는 해당 채널과 관련된 클라이언트의 CBT(채널 바인딩 토큰)를 자체 CBT와 비교하여 클라이언트의 신뢰성을 확인합니다. 채널 바인딩을 수행하면 유인 공격과 스푸핑 공격을 모두 해결할 수 있습니다. 그러나 모든 세션 트래픽의 TLS(전송 계층 보안) 암호화가 필요하기 때문에 더 큰 런타임 비용이 발생합니다. 채널 바인딩은 클라이언트 애플리케이션이 암호화를 사용하여 클라이언트 또는 서버에서 암호화를 적용하는지 여부에 관계없이 SQL Server 연결할 때 발생합니다.

경고

SQL Server SQL Server 및 Microsoft 데이터 공급자는 TLS 1.0 및 SSL 3.0을 비롯한 이전 프로토콜을 지원합니다. 운영 체제 SChannel 계층을 변경하여 다른 프로토콜(예: TLS 1.2 또는 TLS 1.3)을 적용하는 경우 SQL Server 대한 연결이 실패할 수 있습니다. TLS 1.2 또는 TLS 1.3을 지원하는 최신 SQL Server 빌드가 있는지 확인합니다. 자세한 내용은 TLS 1.2TLS 1.3을 참조하세요.

운영 체제 지원

다음 링크는 Windows 확장 보호를 지원하는 방법에 대한 자세한 정보를 제공합니다.

드라이버 지원

확장 보호를 지원하는 유일한 드라이버는 Windows 기반입니다.

  • Microsoft ODBC Driver for SQL Server(Windows에만 해당)
  • SQL Server용 Microsoft OLE DB 드라이버
  • System.Data.SqlClient(Windows의 .NET Framework)
  • Microsoft.Data.SqlClient(Windows)

설정

세 가지 SQL Server 연결 설정은 서비스 바인딩 및 채널 바인딩에 영향을 줍니다. SQL Server 구성 관리자 또는 WMI를 사용하여 이러한 설정을 구성할 수 있습니다. 정책 기반 관리의 서버 프로토콜 설정 패싯을 사용하여 이러한 설정을 봅니다.

암호화 강제 적용

가능한 값은 YesNo입니다. 채널 바인딩을 사용하려면 암호화 강제 적용을 로 설정하고 모든 클라이언트는 암호화해야 합니다. 아니요인 경우 서비스 바인딩만 보장됩니다. 암호화 적용은 SQL Server 구성 관리자의 MSSQLSERVER 속성에 대한 프로토콜(플래그 탭)에 있습니다. SQL Server 2022(16.x)부터 TDS 8.0을 사용하여 더 강력한 보호를 위해 강제 Strict EncryptionYes로 설정할 수도 있습니다. 자세한 내용은 연결을 암호화하기 위한 SQL Server 데이터베이스 엔진 구성을 참조하세요.

확장된 보호와 함께 사용할 경우 강제 암호화로 설정합니다.

확장된 보호

가능한 값은 해제, 허용필수입니다. 확장 보호 변수를 사용하여 각 SQL Server 인스턴스에 대한 확장된 보호 수준을 설정합니다. SQL Server 구성 관리자 MSSQLSERVER 속성(고급 탭)에 대한 프로토콜에서 확장된 보호를 찾을 수 있습니다.

  • 확장된 보호를 사용하지 않도록 설정하려면 해제 로 설정합니다. SQL Server 인스턴스는 클라이언트가 보호되는지 여부에 관계없이 모든 클라이언트의 연결을 허용합니다. Off 이전 및 패치되지 않은 운영 체제와 호환되지만 보안은 떨어집니다. 클라이언트 운영 체제에서 확장된 보호를 지원하지 않는 경우 이 설정을 사용합니다.

  • 확장된 보호를 지원하는 운영 체제의 연결에 대해 확장된 보호를 요구하도록 허용 으로 설정합니다. 확장된 보호를 지원하지 않는 운영 체제의 연결에 대해서는 확장된 보호가 무시됩니다. 보호된 클라이언트 운영 체제에서 실행되는 보호되지 않는 클라이언트 애플리케이션의 연결은 거부됩니다. 이 설정은 off보다 안전하지만 가장 안전하지는 않습니다. 혼합 환경에서 이 설정을 사용합니다. 일부 운영 체제는 확장된 보호를 지원하며 다른 운영 체제는 지원하지 않습니다.

  • 보호된 운영 체제에서 보호된 애플리케이션의 연결만 허용하려면 필수 로 설정합니다. 이 설정은 가장 안전하지만 확장된 보호를 지원하지 않는 운영 체제 또는 애플리케이션의 연결은 SQL Server 연결할 수 없습니다.

권장 설정에 대한 자세한 내용은 확장된 보호를 사용하여 암호화 사용 설정을 참조하세요.

허용되는 NTLM SPN들

둘 이상의 SPN이 서버를 알고 있는 경우 허용되는 NTLM SPN 변수를 지정합니다. 클라이언트가 서버가 모르는 유효한 SPN을 사용하여 서버에 연결하려고 하면 서비스 바인딩이 실패합니다. 이 문제를 방지하려면 수락된 NTLM SPN을 사용하여 서버를 나타내는 여러 SPN을 지정합니다. 허용되는 NTLM SPN들은 세미콜론으로 구분된 SPN들의 일련입니다. 예를 들어 MSSQLSvc/ HostName1.Contoso.comMSSQLSvc/ HostName2.Contoso.comSPN을 허용하려면 허용되는 NTLM SPN 상자에 MSSQLSvc/HostName1.Contoso.com;MSSQLSvc/HostName2.Contoso.com 을 입력합니다. 변수의 최대 길이는 2,048자입니다. SQL Server 구성 관리자 MSSQLSERVER 속성에 대한 프로토콜(고급 탭)에서 허용되는 NTLM SPN을 찾을 수 있습니다.

데이터베이스 엔진에 대해 확장된 보호 사용

확장된 보호를 사용하려면 서버와 클라이언트 모두 확장된 보호를 지원하는 운영 체제가 있어야 하며 운영 체제에서 사용하도록 설정해야 합니다. 운영 체제에 확장 보호를 사용하도록 설정하는 방법에 대한 자세한 내용은 인증에 대한 확장 보호를 참조하세요.

확장 보호NTLMv2는 지원되는 모든 Windows 버전에서 기본적으로 사용하도록 설정되어 있지만 확장 보호는 기본적으로 SQL Server 연결에 사용하도록 설정되지 않습니다. SQL Server 구성 관리자 수동으로 사용하도록 설정해야 합니다.

SQL Server 연결에 확장 보호를 사용하도록 설정하려면 관리자가 SQL Server 구성 관리자 설정을 구성해야 합니다. 이 구성에는 다양한 유형의 인증 릴레이 공격을 완화하기 위한 서비스 바인딩 및 채널 바인딩 옵션이 포함되어 있습니다. 자세한 지침은 확장 보호 구성에 대한 SQL Server 설명서를 참조하세요.

확장된 보호를 사용하여 암호화 사용

적용 대상: SQL Server

Windows 인증 사용할 때 보안을 강화하려면 확장된 보호를필수로 설정하고 SQL Server 구성 관리자 암호화를'예'로 설정합니다.

이러한 설정은 SQL Server 가장 안전한 구성을 제공합니다.

메모

SQL Server 2022(16.x) 이상 버전에서는 강제 암호화 대신 Force Strict Encryption을 사용하여 TDS 8.0을 통해 보안을 강화합니다.

이러한 변경 내용을 수용하도록 연결 문자열을 업데이트합니다.

자세한 내용은 다음을 참조하세요:

확장된 보호를 사용하도록 설정한 후

서버 컴퓨터에서 확장 보호를 사용하도록 설정한 후 다음 단계를 사용하여 확장된 보호를 사용하도록 설정합니다.

  1. Windows 시작 메뉴에서 SQL Server 구성 관리자 이동합니다.

  2. SQL Server 네트워크 구성을 확장한 다음 <InstanceName>용 프로토콜을 마우스 오른쪽 단추로 클릭합니다. 속성을 선택합니다.

  3. 고급 탭에서 확장된 보호를 채널 바인딩 및 서비스 바인딩 모두에 대한 적절한 설정으로 설정합니다.

  4. 필요에 따라 둘 이상의 SPN이 서버를 알고 있는 경우 설정 섹션에 설명된 대로 고급 탭에서 수락된 NTLM SPN 필드를 구성합니다.

  5. 채널 바인딩의 경우 플래그 탭에서 암호화 강제 적용을 로 설정합니다. 이 설정을 사용하는 것이 좋습니다.

  6. 데이터베이스 엔진 서비스를 다시 시작합니다.

다른 SQL Server 구성 요소 구성

Reporting Services를 구성하는 방법에 대한 자세한 내용은 Reporting Services 인증에 대한 확장된 보호를 참조하세요.

IIS를 사용하여 HTTP 또는 HTTPS 연결을 사용하여 Analysis Services 데이터에 액세스하는 경우 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();
}