Расширенная защита Windows <extendedProtection>

Общие сведения

Элемент <extendedProtection> задает параметры, которые настраивают расширенную защиту для проверка подлинности Windows в IIS 7.5.

Расширенная защита расширяет существующую функциональность проверка подлинности Windows для предотвращения атак ретранслятора проверки подлинности или атак "злоумышленник в середине". Для устранения рисков используются сведения о безопасности, которые реализуются с помощью двух механизмов безопасности:

  • Сведения о привязке канала, указанные с помощью маркера привязки канала (CBT), который в основном используется для SSL-подключений.
  • Сведения о привязке службы, указанные с помощью имени субъекта-службы (SPN), которое в основном используется для подключений, не использующих SSL, или при установке подключения с помощью сценария, обеспечивающего разгрузку SSL, например прокси-сервера или подсистемы балансировки нагрузки.

Элемент <extendedProtection> может содержать коллекцию <spn> элементов, каждый из которых содержит уникальное имя субъекта-службы для сведений о привязке службы. Каждое имя субъекта-службы представляет уникальную конечную точку в пути подключения, которая может быть полным доменным именем (FQDN) или NetBIOS-именем конечного сервера или прокси-сервера. Например, если клиент подключается к целевому серверу через прокси-сервер, коллекция имени субъекта-службы на целевом сервере должна содержать имя субъекта-службы для прокси-сервера. Каждое имя субъекта-службы в коллекции должно иметь префикс "HTTP", поэтому итоговое имя субъекта-службы для "www.contoso.com" будет иметь значение "HTTP/www.contoso.com".

Существует два атрибута <extendedProtection> элемента, которые настраивают привязку канала и дополнительное поведение для расширенной защиты IIS:

  • Атрибут tokenChecking настраивает поведение для проверки маркеров привязки каналов. Возможные значения для этого атрибута:

    Имя Описание
    None Это значение указывает, что службы IIS не будут выполнять проверку маркера привязки канала. Этот параметр эмулирует поведение, существовавшее до расширенной защиты.

    Числовое значение равно 0.
    Allow Это значение указывает, что проверка маркера привязки канала включена, но не является обязательной. Этот параметр обеспечивает безопасный обмен данными с клиентами, которые поддерживают расширенную защиту, но по-прежнему поддерживают клиенты, которые не могут использовать расширенную защиту.

    Числовое значение равно 1.
    Require Это значение указывает, что требуется проверка маркера привязки канала. Этот параметр не обеспечивает поддержку клиентов, которые не поддерживают расширенную защиту.

    Числовое значение равно 2.
  • Атрибут flags настраивает дополнительное поведение для расширенной защиты. Возможные флаги:

    Имя Описание
    None Этот флаг указывает, что для расширенной защиты не включено никакое дополнительное поведение. (Например, прокси-сервер не используется, а проверка имени субъекта-службы включена и требует полных доменных имен.)

    Числовое значение равно 0.
    Proxy Этот флаг указывает, что часть пути связи будет проходить через прокси-сервер или что клиент подключается непосредственно к целевому серверу по протоколу HTTP.

    Числовое значение равно 1.
    NoServiceNameCheck Этот флаг указывает, что проверка имени субъекта-службы отключена; Этот флаг не следует использовать в сценариях, где проверяются только имена субъектов-служб.

    Числовое значение равно 2.
    AllowDotlessSpn Этот флаг указывает, что имена субъектов-служб не обязательно должны быть полными доменными именами. Установка этого флага разрешает имена субъектов-служб на основе NetBIOS. Примечание: Установка этого флага не является безопасным сценарием; Имена, не основанные на FQDN, уязвимы для атак с разрешением имен.

    Числовое значение равно 4.
    ProxyCohosting Этот флаг указывает, что весь путь обмена данными между клиентом и сервером будет использовать только HTTP; Ни в той части пути связи, которая не будет использовать SSL, будет использоваться проверка имени субъекта-службы. Примечание: При указании этого флага Proxy необходимо также указать флаг .

    Числовое значение равно 32.

Сценарии расширенной защиты

Рассмотрим следующие примеры сценариев:

  • В каждом из следующих сценариев можно также указать AllowDotlessSpn флаг, если ваша сетевая среда поддерживает имена субъектов-служб на основе NetBIOS, однако имена субъектов-служб на основе NetBIOS не являются безопасными.
  • Для каждого из следующих сценариев, где будет использоваться проверка имени субъекта-службы и проверка маркера привязки канала не будет использоваться, не следует указывать NoServiceNameCheck флаг.
Сценарий Флаги Описание
Клиент подключается непосредственно к целевому серверу по протоколу HTTP Proxy, ProxyCohosting Проверка имени субъекта-службы будет использоваться, а проверка маркера привязки канала не будет использоваться.
Клиент подключается непосредственно к целевому серверу по протоколу SSL None Используется проверка маркера привязки канала, а проверка имени субъекта-службы не используется.
Клиент подключается к целевому серверу через прокси-сервер, используя HTTP для всего пути Proxy, ProxyCohosting Проверка имени субъекта-службы будет использоваться, а проверка маркера привязки канала не будет использоваться.
Клиент подключается к целевому серверу через прокси-сервер с использованием SSL для всего пути Proxy Проверка имени субъекта-службы будет использоваться, а проверка маркера привязки канала не будет использоваться.
Клиент подключается к прокси-серверу по протоколу SSL, а прокси-сервер подключается к целевому серверу по протоколу HTTP (ssl off-loading) Proxy Проверка имени субъекта-службы будет использоваться, а проверка маркера привязки канала не будет использоваться.

Дополнительные сведения

Дополнительные сведения о расширенной защите см. в следующем разделе:

Интегрированная проверка подлинности Windows с расширенной защитой

Имена субъектов-служб

Совместимость

Версия Примечания
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 роли. Чтобы использовать проверка подлинности Windows в IIS, необходимо установить службу ролей, отключить анонимную проверку подлинности для веб-сайта или приложения, а затем включить проверка подлинности Windows для сайта или приложения.

Примечание

После установки службы ролей IIS 7 фиксирует следующие параметры конфигурации в файле ApplicationHost.config.

<windowsAuthentication enabled="false" />

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
  4. На странице Роли сервера разверните узел Веб-сервер (IIS),Веб-сервер, Безопасность, а затем выберите Проверка подлинности Windows. Щелкните Далее.
    Снимок экрана: страница .
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, Веб-службы, Безопасность, а затем выберите Проверка подлинности Windows.
    Снимок экрана: дерево навигации
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку Пуск, выберите Администрирование, а затем диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел Роли и выберите Веб-сервер (IIS).
  3. На панели Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.
  4. На странице Выбор служб ролеймастера добавления служб ролей выберите Проверка подлинности Windows и нажмите кнопку Далее.
    Снимок экрана: страница
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку Пуск, а затем панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, затем Службы Интернета и Безопасность.
  4. Выберите Проверка подлинности 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.

Атрибуты

Атрибут Описание
flags Необязательный атрибут flags.

Задает дополнительные параметры поведения для расширенной защиты.

Атрибут flags может быть сочетанием следующих значений; значение по умолчанию — None.
Имя Описание
None

Этот флаг указывает, что для расширенной защиты не включено никакое дополнительное поведение. (Например, прокси-сервер не используется, а проверка имени субъекта-службы включена и требует полных доменных имен.)

Числовое значение равно 0.

Proxy

Этот флаг указывает, что часть пути связи будет проходить через прокси-сервер или что клиент подключается непосредственно к целевому серверу по протоколу HTTP.

Числовое значение равно 1.

NoServiceNameCheck

Этот флаг указывает, что проверка имени субъекта-службы отключена; Этот флаг не следует использовать в сценариях, где проверяются только имена субъектов-служб.

Числовое значение равно 2.

AllowDotlessSpn

Этот флаг указывает, что имена субъектов-служб не обязательно должны быть полными доменными именами. Установка этого флага разрешает имена субъектов-служб на основе NetBIOS. Примечание. Установка этого флага не является безопасным сценарием. Имена, не основанные на FQDN, уязвимы для атак с разрешением имен.

Числовое значение равно 4.

ProxyCohosting

Этот флаг указывает, что весь путь обмена данными между клиентом и сервером будет использовать только HTTP; Ни в той части пути связи, которая не будет использовать SSL, будет использоваться проверка имени субъекта-службы. Примечание. При указании этого флага Proxy необходимо также указать флаг .

Числовое значение равно 32.

tokenChecking Необязательный атрибут перечисления.

Задает поведение для проверки сведений о привязке каналов.

Атрибут tokenChecking может быть одним из следующих значений; значение по умолчанию — None.
Имя Описание
None

Это значение указывает, что службы IIS не будут выполнять проверку маркера привязки канала. Этот параметр эмулирует поведение, существовавшее до расширенной защиты.

Числовое значение равно 0.

Allow

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

Числовое значение равно 1.

Require

Это значение указывает, что требуется проверка маркера привязки канала. Этот параметр не обеспечивает поддержку клиентов, которые не поддерживают расширенную защиту.

Числовое значение равно 2.

Дочерние элементы

Элемент Описание
spn Добавляет имя субъекта-службы в коллекцию.
clearSpns Очищает коллекцию имен субъектов-служб.
removeSpn Удаляет имя субъекта-службы из коллекции.

Образец конфигурации

В следующем примере показан элемент, демонстрирующий <extendedProtection> включение проверка подлинности Windows с расширенной защитой для веб-сайта по умолчанию и добавление двух записей имени субъекта-службы в коллекцию имен субъектов-служб.

<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 с расширенной защитой для веб-сайта по умолчанию и добавление двух записей имени субъекта-службы в коллекцию имен субъектов-служб.

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()