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
- 작업 표시줄에서 서버 관리자를 클릭합니다.
- 서버 관리자관리 메뉴를 클릭한 다음 역할 및 기능 추가를 클릭합니다.
- 역할 및 기능 추가 마법사에서 다음을 클릭합니다. 설치 유형을 선택하고 다음을 클릭합니다. 대상 서버를 선택하고 다음을 클릭합니다.
- 서버 역할 페이지에서 웹 서버(IIS)를 확장하고, 웹 서버를 확장하고, 보안을 확장한 다음, Windows 인증을 선택합니다. 다음을 클릭합니다.
. - 기능 선택 페이지에서 다음을 클릭합니다.
- 설치 선택 확인 페이지에서 설치를 클릭합니다.
- Results(결과) 페이지에서 Close(닫기)를 클릭합니다.
Windows 8 또는 Windows 8.1
- 시작 화면에서 포인터를 왼쪽 아래 모서리로 이동하고 시작 단추를 마우스 오른쪽 단추로 클릭한 다음 제어판 클릭합니다.
- 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
- 인터넷 정보 서비스를 확장하고, World Wide Web Services를 확장하고, 보안을 확장한 다음, Windows 인증을 선택합니다.
- 확인을 클릭합니다.
- 닫기를 클릭합니다.
Windows Server 2008 또는 Windows Server 2008 R2
- 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 서버 관리자 클릭합니다.
- 서버 관리자 계층 구조 창에서 역할을 확장한 다음 웹 서버(IIS)를 클릭합니다.
- 웹 서버(IIS) 창에서 Role Services 섹션으로 스크롤한 다음 역할 서비스 추가를 클릭합니다.
- 역할 서비스 추가 마법사의 역할 서비스 선택 페이지에서 Windows 인증을 선택하고 다음을 클릭합니다.
- 설치 선택 확인 페이지에서 설치를 클릭합니다.
- Results(결과) 페이지에서 Close(닫기)를 클릭합니다.
Windows Vista 또는 Windows 7
- 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
- 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
- 인터넷 정보 서비스, World Wide Web Services, 보안을 차례로 확장합니다.
- Windows 인증을 선택한 다음 확인을 클릭합니다.
방법
Windows 인증 확장된 보호를 사용하도록 설정하는 방법
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(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 서버 이름을 확장하고 사이트를 확장한 다음 Windows 인증 확장 보호를 사용하도록 설정할 사이트, 애플리케이션 또는 웹 서비스를 확장합니다.
홈 창에서 보안 섹션으로 스크롤한 다음 인증을 두 번 클릭합니다.
인증 창에서 Windows 인증을 선택합니다.
작업 창에서 고급 설정을 클릭합니다.
고급 설정 대화 상자가 나타나면 확장된 보호 드롭다운 메뉴에서 다음 옵션 중 하나를 선택합니다.
확인 을 클릭하여 고급 설정 대화 상자를 닫습니다.
Configuration
요소는 <extendedProtection>
ApplicationHost.config 파일의 사이트, 애플리케이션 또는 가상 디렉터리 수준에서 구성할 수 있습니다.
특성
attribute | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
flags |
선택적 flags 특성입니다. 확장된 보호에 대한 추가 동작 설정을 지정합니다. 특성은 flags 다음 값의 조합일 수 있습니다. 기본값은 입니다 None .
|
||||||||||||
tokenChecking |
선택적 열거형 특성입니다. 채널 바인딩 정보를 확인하기 위한 동작을 지정합니다. 특성은 tokenChecking 다음 값 중 하나일 수 있습니다. 기본값은 입니다 None .
|
자식 요소
요소 | 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()