다음을 통해 공유


Windows 확장된 보호 <extendedProtection>

개요

요소는 <extendedProtection> IIS 7.5에서 Windows 인증 대한 확장된 보호를 구성하는 설정을 지정합니다.

확장된 보호는 인증 릴레이 또는 "중간에 있는 사람" 공격을 완화하기 위해 기존 Windows 인증 기능을 향상시킵니다. 이 완화는 다음 두 가지 보안 메커니즘을 통해 구현되는 보안 정보를 사용하여 수행됩니다.

  • 주로 SSL 연결에 사용되는 CBT(채널 바인딩 토큰)를 통해 지정된 채널 바인딩 정보입니다.
  • SSL을 사용하지 않는 연결에 주로 사용되는 SPN(서비스 주체 이름)을 통해 지정되거나 프록시 서버 또는 부하 분산 장치와 같은 SSL 오프로드를 제공하는 시나리오를 통해 연결이 설정된 경우 서비스 바인딩 정보입니다.

요소에는 <extendedProtection> 요소의 <spn> 컬렉션이 포함될 수 있으며, 각 요소에는 서비스 바인딩 정보에 대한 고유한 SPN이 포함되어 있습니다. 각 SPN은 연결 경로의 고유한 엔드포인트를 나타내며, 이는 대상 서버 또는 프록시 서버의 FQDN(정규화된 도메인 이름) 또는 NetBIOS 이름일 수 있습니다. 예를 들어 클라이언트가 프록시 서버를 통해 대상 서버에 연결하는 경우 대상 서버의 SPN 컬렉션에는 프록시 서버에 대한 SPN이 포함되어야 합니다. 컬렉션의 각 SPN에는 접두사 "HTTP"가 있어야 하므로 "www.contoso.com"에 대한 결과 SPN은 "HTTP/www.contoso.com"입니다.

IIS 확장 보호에 <extendedProtection> 대한 채널 바인딩 및 추가 동작을 구성하는 요소의 두 가지 특성이 있습니다.

  • tokenChecking 특성은 채널 바인딩 토큰을 확인하기 위한 동작을 구성합니다. 이 특성에 사용할 수 있는 값은 다음과 같습니다.

    속성 Description
    None 이 값은 IIS가 채널 바인딩 토큰 검사를 수행하지 않도록 지정합니다. 이 설정은 확장된 보호 전에 존재한 동작을 에뮬레이트합니다.

    숫자 값은 입니다 0.
    Allow 이 값은 채널 바인딩 토큰 검사가 사용하도록 설정되어 있지만 필수는 아님을 지정합니다. 이 설정은 확장된 보호를 지원하지만 확장된 보호를 사용할 수 없는 클라이언트를 지원하는 클라이언트와의 보안 통신을 허용합니다.

    숫자 값은 입니다 1.
    Require 이 값은 채널 바인딩 토큰 검사가 필요하도록 지정합니다. 이 설정은 확장된 보호를 지원하지 않는 클라이언트에 대한 지원을 제공하지 않습니다.

    숫자 값은 입니다 2.
  • flags 특성은 확장된 보호를 위한 추가 동작을 구성합니다. 가능한 플래그는 다음과 같습니다.

    속성 Description
    None 이 플래그는 확장된 보호를 위해 추가 동작이 사용하도록 설정되지 않도록 지정합니다. (예를 들어 프록시 서버를 사용하지 않고 SPN 검사를 사용하도록 설정하고 FQDN이 필요합니다.)

    숫자 값은 입니다 0.
    Proxy 이 플래그는 통신 경로의 일부가 프록시를 통해 수행되거나 클라이언트가 HTTP를 통해 대상 서버에 직접 연결되도록 지정합니다.

    숫자 값은 입니다 1.
    NoServiceNameCheck 이 플래그는 SPN 검사를 사용하지 않도록 지정합니다. SPN만 검사하는 시나리오에서는 이 플래그를 사용하면 안 됩니다.

    숫자 값은 입니다 2.
    AllowDotlessSpn 이 플래그는 SPN이 FQDN일 필요가 없음을 지정합니다. 이 플래그를 설정하면 NetBIOS 기반 SPN이 허용됩니다. 참고: 이 플래그를 설정하는 것은 보안 시나리오가 아닙니다. 비 FQDN 기반 이름은 이름 확인 중독 공격에 취약합니다.

    숫자 값은 입니다 4.
    ProxyCohosting 이 플래그는 전체 클라이언트-서버 통신 경로가 HTTP만 사용하도록 지정합니다. 통신 경로의 어떤 부분도 SSL을 사용하지 않으며 SPN 검사가 사용됩니다. 참고: 이 플래그를 지정할 때 플래그도 지정 Proxy 해야 합니다.

    숫자 값은 입니다 32.

확장된 보호 시나리오

다음 예제 시나리오를 고려합니다.

  • 다음 각 시나리오에서는 네트워킹 환경에서 NetBIOS 기반 SPN을 지원하는 경우 플래그를 지정할 AllowDotlessSpn 수도 있지만 NetBIOS 기반 SPN은 안전하지 않습니다.
  • SPN 검사가 사용되고 채널 바인딩 토큰 검사가 사용되지 않는 다음 시나리오 각각에 대해 플래그를 NoServiceNameCheck 지정하면 안 됩니다.
시나리오 플래그 Description
클라이언트는 HTTP를 사용하여 대상 서버에 직접 연결합니다. Proxy, ProxyCohosting SPN 검사가 사용되며 채널 바인딩 토큰 검사는 사용되지 않습니다.
클라이언트가 SSL을 사용하여 대상 서버에 직접 연결 None 채널 바인딩 토큰 검사가 사용되고 SPN 검사가 사용되지 않습니다.
클라이언트는 전체 경로에 HTTP를 사용하여 프록시 서버를 통해 대상 서버에 연결합니다. Proxy, ProxyCohosting SPN 검사가 사용되며 채널 바인딩 토큰 검사는 사용되지 않습니다.
클라이언트는 전체 경로에 대해 SSL을 사용하여 프록시 서버를 통해 대상 서버에 연결합니다. Proxy SPN 검사가 사용되며 채널 바인딩 토큰 검사는 사용되지 않습니다.
클라이언트는 SSL을 사용하여 프록시 서버에 연결하고 프록시 서버는 HTTP(SSL 오프로드)를 사용하여 대상 서버에 연결합니다. Proxy SPN 검사가 사용되며 채널 바인딩 토큰 검사는 사용되지 않습니다.

추가 정보

확장 보호에 대한 자세한 내용은 다음 항목에서 확인할 수 있습니다.

확장된 보호를 사용하는 Windows 통합 인증(Integrated Windows Authentication with Extended Protection)

서비스 사용자 이름

호환성

버전 참고
IIS 10.0 <extendedProtection> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <extendedProtection> 요소가 IIS 8.5에서 수정되지 않았습니다.
IIS 8.0 <extendedProtection> 요소가 IIS 8.0에서 수정되지 않았습니다.
IIS 7.5 요소는 <extendedProtection> IIS 7.5에서 도입되었습니다.
IIS 7.0 해당 없음
IIS 6.0 해당 없음

설치 프로그램

IIS 7 이상의 기본 설치에는 Windows 인증 역할 서비스가 포함되지 않습니다. IIS에서 Windows 인증 사용하려면 역할 서비스를 설치하고 웹 사이트 또는 애플리케이션에 대해 익명 인증을 사용하지 않도록 설정한 다음 사이트 또는 애플리케이션에 Windows 인증 사용하도록 설정해야 합니다.

참고

역할 서비스를 설치한 후 IIS 7은 다음 구성 설정을 ApplicationHost.config 파일에 커밋합니다.

<windowsAuthentication enabled="false" />

Windows Server 2012 또는 Windows Server 2012 R2

  1. 작업 표시줄에서 서버 관리자를 클릭합니다.
  2. 서버 관리자관리 메뉴를 클릭한 다음 역할 및 기능 추가를 클릭합니다.
  3. 역할 및 기능 추가 마법사에서 다음을 클릭합니다. 설치 유형을 선택하고 다음을 클릭합니다. 대상 서버를 선택하고 다음을 클릭합니다.
  4. 서버 역할 페이지에서 웹 서버(IIS)를 확장하고, 웹 서버를 확장하고, 보안을 확장한 다음, Windows 인증을 선택합니다. 다음을 클릭합니다.
    서버 역할 페이지의 스크린샷. Windows 인증 옵션이 선택되고 강조 표시됩니다. .
  5. 기능 선택 페이지에서 다음을 클릭합니다.
  6. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  7. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows 8 또는 Windows 8.1

  1. 시작 화면에서 포인터를 왼쪽 아래 모서리로 이동하고 시작 단추를 마우스 오른쪽 단추로 클릭한 다음 제어판 클릭합니다.
  2. 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스를 확장하고, World Wide Web Services를 확장하고, 보안을 확장한 다음, Windows 인증을 선택합니다.
    프로그램 및 기능 탐색 트리의 스크린샷 Windows 인증 옵션이 선택되고 강조 표시됩니다.
  4. 확인을 클릭합니다.
  5. 닫기를 클릭합니다.

Windows Server 2008 또는 Windows Server 2008 R2

  1. 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 서버 관리자 클릭합니다.
  2. 서버 관리자 계층 구조 창에서 역할을 확장한 다음 웹 서버(IIS)를 클릭합니다.
  3. 웹 서버(IIS) 창에서 Role Services 섹션으로 스크롤한 다음 역할 서비스 추가를 클릭합니다.
  4. 역할 서비스 추가 마법사역할 서비스 선택 페이지에서 Windows 인증을 선택하고 다음을 클릭합니다.
    역할 서비스 선택 페이지의 스크린샷 보안 옵션이 확장되었습니다. Windows 인증 옵션이 선택되고 강조 표시됩니다.
  5. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  6. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows Vista 또는 Windows 7

  1. 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
  2. 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스, World Wide Web Services, 보안을 차례로 확장합니다.
  4. Windows 인증을 선택한 다음 확인을 클릭합니다.
    프로그램 및 기능 탐색 트리의 스크린샷 Windows 인증이 강조 표시되고 선택됩니다. 보안 폴더가 확장되었습니다.

방법

Windows 인증 확장된 보호를 사용하도록 설정하는 방법

  1. IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1 사용하는 경우:

      • Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장하고 사이트를 확장한 다음 Windows 인증 확장 보호를 사용하도록 설정할 사이트, 애플리케이션 또는 웹 서비스를 확장합니다.

  3. 창에서 보안 섹션으로 스크롤한 다음 인증을 두 번 클릭합니다.

  4. 인증 창에서 Windows 인증을 선택합니다.

  5. 작업 창에서 사용을 클릭합니다.
    인증 페이지의 스크린샷 Windows 인증이 강조 표시됩니다. 사용 단추는 작업 창에 있습니다.

  6. 작업 창에서 고급 설정을 클릭합니다.

  7. 고급 설정 대화 상자가 나타나면 확장된 보호 드롭다운 메뉴에서 다음 옵션 중 하나를 선택합니다.

    • 확장된 보호를 지원하지 않는 클라이언트에 대해 하위 수준 지원을 제공하면서 확장된 보호를 사용하도록 설정하려면 수락 을 선택합니다.
    • 하위 수준 지원을 제공하지 않고 확장된 보호를 사용하도록 설정하려면 필수 를 선택합니다.
      고급 설정 대화 상자의 스크린샷 확장된 보호 드롭다운 메뉴에서 수락 옵션이 강조 표시됩니다.
  8. 확인 을 클릭하여 고급 설정 대화 상자를 닫습니다.

Configuration

요소는 <extendedProtection> ApplicationHost.config 파일의 사이트, 애플리케이션 또는 가상 디렉터리 수준에서 구성할 수 있습니다.

특성

attribute Description
flags 선택적 flags 특성입니다.

확장된 보호에 대한 추가 동작 설정을 지정합니다.

특성은 flags 다음 값의 조합일 수 있습니다. 기본값은 입니다 None.
속성 Description
None

이 플래그는 확장된 보호를 위해 추가 동작을 사용하도록 설정하지 않도록 지정합니다. (예를 들어 프록시 서버를 사용하지 않고 SPN 검사를 사용하도록 설정되었으며 FQDN이 필요합니다.)

숫자 값은 입니다 0.

Proxy

이 플래그는 통신 경로의 일부가 프록시를 통해 수행되거나 클라이언트가 HTTP를 통해 대상 서버에 직접 연결되도록 지정합니다.

숫자 값은 입니다 1.

NoServiceNameCheck

이 플래그는 SPN 검사를 사용하지 않도록 지정합니다. SPN만 검사하는 시나리오에서는 이 플래그를 사용하면 안 됩니다.

숫자 값은 입니다 2.

AllowDotlessSpn

이 플래그는 SPN이 FQDN일 필요가 없도록 지정합니다. 이 플래그를 설정하면 NetBIOS 기반 SPN이 허용됩니다. 참고: 이 플래그를 설정하는 것은 보안 시나리오가 아닙니다. 비 FQDN 기반 이름은 이름 확인 중독 공격에 취약합니다.

숫자 값은 입니다 4.

ProxyCohosting

이 플래그는 전체 클라이언트-서버 통신 경로가 HTTP만 사용하도록 지정합니다. 통신 경로의 어떤 부분도 SSL을 사용하지 않으며 SPN 검사가 사용됩니다. 참고: 이 플래그를 지정할 때 플래그도 지정 Proxy 해야 합니다.

숫자 값은 입니다 32.

tokenChecking 선택적 열거형 특성입니다.

채널 바인딩 정보를 확인하기 위한 동작을 지정합니다.

특성은 tokenChecking 다음 값 중 하나일 수 있습니다. 기본값은 입니다 None.
속성 Description
None

이 값은 IIS가 채널 바인딩 토큰 검사를 수행하지 않도록 지정합니다. 이 설정은 확장된 보호 전에 존재했던 동작을 에뮬레이트합니다.

숫자 값은 입니다 0.

Allow

이 값은 채널 바인딩 토큰 검사가 사용하도록 설정되어 있지만 필수는 아님을 지정합니다. 이 설정은 확장된 보호를 지원하지만 확장된 보호를 사용할 수 없는 클라이언트를 지원하는 클라이언트와의 보안 통신을 허용합니다.

숫자 값은 입니다 1.

Require

이 값은 채널 바인딩 토큰 검사가 필요하도록 지정합니다. 이 설정은 확장된 보호를 지원하지 않는 클라이언트에 대한 지원을 제공하지 않습니다.

숫자 값은 입니다 2.

자식 요소

요소 Description
spn 컬렉션에 SPN을 추가합니다.
clearSpns SPN 컬렉션을 지웁니다.
removeSpn 컬렉션에서 SPN을 제거합니다.

구성 샘플

다음 샘플에서는 기본 웹 사이트에 대한 확장된 보호를 사용하여 Windows 인증 사용하도록 설정하는 방법을 보여 주는 요소를 표시 <extendedProtection> 하고 SPN 컬렉션에 두 개의 SPN 항목을 추가합니다.

<location path="Default Web Site">
   <system.webServer>
      <security>
         <authentication>
            <windowsAuthentication enabled="true">
               <extendedProtection tokenChecking="Allow" flags="None">
                  <spn name="HTTP/www.contoso.com" />
                  <spn name="HTTP/contoso.com" />
               </extendedProtection>
            </windowsAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

샘플 코드

다음 예제에서는 기본 웹 사이트에 대한 확장된 보호를 사용하여 Windows 인증 구성하고 SPN 컬렉션에 두 개의 SPN 항목을 추가하는 방법을 보여 줍니다.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /extendedProtection.tokenChecking:"Allow" /extendedProtection.flags:"None" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/www.contoso.com']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/contoso.com']" /commit:apphost

참고

AppCmd.exe 사용하여 이러한 설정을 구성할 때 커밋 매개 변수 apphost 를 로 설정해야 합니다. 그러면 구성 설정이 ApplicationHost.config 파일의 적절한 위치 섹션에 커밋됩니다.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site");
         windowsAuthenticationSection["enabled"] = true;

         ConfigurationElement extendedProtectionElement = windowsAuthenticationSection.GetChildElement("extendedProtection");
         extendedProtectionElement["tokenChecking"] = @"Allow";
         extendedProtectionElement["flags"] = @"None";

         ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();

         ConfigurationElement spnElement = extendedProtectionCollection.CreateElement("spn");
         spnElement["name"] = @"HTTP/www.contoso.com";
         extendedProtectionCollection.Add(spnElement);

         ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement("spn");
         spnElement1["name"] = @"HTTP/contoso.com";
         extendedProtectionCollection.Add(spnElement1);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site")
      windowsAuthenticationSection("enabled") = True

      Dim extendedProtectionElement As ConfigurationElement = windowsAuthenticationSection.GetChildElement("extendedProtection")
      extendedProtectionElement("tokenChecking") = "Allow"
      extendedProtectionElement("flags") = "None"

      Dim extendedProtectionCollection As ConfigurationElementCollection = extendedProtectionElement.GetCollection

      Dim spnElement As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement("name") = "HTTP/www.contoso.com"
      extendedProtectionCollection.Add(spnElement)

      Dim spnElement1 As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement1("name") = "HTTP/contoso.com"
      extendedProtectionCollection.Add(spnElement1)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

var extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection");
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow";
extendedProtectionElement.Properties.Item("flags").Value = "None";

var extendedProtectionCollection = extendedProtectionElement.Collection;

var spnElement = extendedProtectionCollection.CreateNewElement("spn");
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com";
extendedProtectionCollection.AddElement(spnElement);

var spnElement1 = extendedProtectionCollection.CreateNewElement("spn");
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com";
extendedProtectionCollection.AddElement(spnElement1);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

Set extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection")
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow"
extendedProtectionElement.Properties.Item("flags").Value = "None"

Set extendedProtectionCollection = extendedProtectionElement.Collection

Set spnElement = extendedProtectionCollection.CreateNewElement("spn")
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com"
extendedProtectionCollection.AddElement(spnElement)

Set spnElement1 = extendedProtectionCollection.CreateNewElement("spn")
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com"
extendedProtectionCollection.AddElement(spnElement1)

adminManager.CommitChanges()