Поделиться через


Использование фильтрации запросов

от группы iis

Введение

Средство обеспечения безопасности UrlScan было предоставлено в качестве надстройки для более ранних версий служб IIS, чтобы администраторы могли применять более жесткие политики безопасности на своих веб-серверах. В IIS 7 и более поздних версий все основные функции URLScan были включены в модуль фильтрация запросов, а также добавлена функция скрытых сегментов. В этой статье описаны все функции фильтрации запросов и приведены примеры применения этих функций в вашей среде.

Обратите внимание, что СЛУЖБЫ IIS также включают модуль для перезаписи URL-адресов. Между этими двумя модулями существуют различия: фильтрация запросов разработана и оптимизирована для сценариев безопасности, а перезапись URL-адресов может применяться для широкого набора сценариев (сценарии безопасности — это лишь подмножество). Дополнительные сведения о различиях см. в статье Фильтрация запросов и переопределение URL-адресов в IIS 7.0 и более поздних версий.

Фильтрация запросов Double-Encoded

Эта функция предотвращает атаки, основанные на двухкодированных запросах, и применяется, если злоумышленник отправляет тщательно созданный запрос с двойным кодированием в IIS. Если включен фильтр запросов с двойной кодировкой, СЛУЖБЫ IIS нормализуют URL-адрес дважды. Если первая нормализация отличается от второй, запрос отклоняется и регистрируется код ошибки 404.11. Фильтр запросов с двойным кодированием был параметром VerifyNormalization в UrlScan.

Если вы не хотите, чтобы службы IIS разрешали обработку запросов с двойной кодировкой, используйте следующее:

<configuration>
 <system.webServer> 
  <security>
   <requestFiltering
                  allowDoubleEscaping="false">
   </requestFiltering> 
  </security>
 </system.webServer>
</configuration>

Фильтрация высокобитовых символов

Эта функция разрешает или отклоняет все запросы к СЛУЖБАм IIS, которые содержат символы, отличные от ASCII, и регистрирует код ошибки 404.12. Эквивалент UrlScan — AllowHighBitCharacters.

Например, предположим, что вы хотите разрешить использование больших битовых символов для одного приложения, но не для всего сервера. Задайте allowHighBitCharacters="false" в файле ApplicationHost.config; но в корневом каталоге приложения создайте файл Web.config, который позволяет этому приложению принимать символы, отличные от ASCII. В файле Web.config используйте следующую команду:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering
                  allowHighBitCharacters="true"
            >
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Фильтрация на основе расширений файлов

Эта функция определяет набор разрешенных расширений файлов, обслуживаемых СЛУЖБАми IIS. Когда IIS отклоняет запрос на основе расширений файлов, регистрируется код ошибки 404.7. Параметры AllowExtensions и DenyExtensions являются эквивалентами UrlScan.

Например, предположим, что вы хотите разрешить все типы файлов, кроме файлов ASP. Задайте для параметра allowUnlisted для fileExtensions значение true, а затем определите запись расширения файла, чтобы явно запретить ASP:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".asp" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Фильтрация на основе ограничений запросов

Этот фильтр объединяет три функции (имена которых совпадают в UrlScan):

  • maxAllowedContentLength — верхний предел размера содержимого
  • maxUrl — верхняя граница длины URL-адреса
  • maxQueryString — верхняя граница длины строки запроса

Когда СЛУЖБЫ IIS отклоняют запрос на основе ограничений запросов, регистрируется код ошибки:

  • 413.1, если содержимое слишком длинное.
  • 404.14, если URL-адрес слишком велик.
  • 404.15, если строка запроса слишком длинна.

Например, компании часто покупают программное обеспечение, к которому у них нет доступа к исходному коду. Со временем они могут найти уязвимости в этом коде. Часто бывает непросто получить обновления для затронутого кода. Проблемы часто вызваны слишком длинным URL-адресом или строкой запроса или превышением содержимого, отправляемого в приложение. Определив безопасную верхнюю границу, вы можете применить ограничения, используя приведенную ниже конфигурацию, не исправляя двоичные файлы приложения:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="260"
       maxQueryString="25" 
                  />
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Фильтрация по командам

Эта функция определяет список глаголов, которые службы IIS принимают в составе запроса. Когда СЛУЖБЫ IIS отклоняют запрос на основе этой функции, регистрируется код ошибки 404.6. Это соответствует параметрам UseAllowVerbs, AllowVerbs и DenyVerbs в UrlScan.

Например, предположим, что вы хотите разрешить только команду GET. Для этого необходимо сначала заблокировать конфигурацию, чтобы не разрешать команды, установив параметр allowUnlisted="false". Затем выведите список глаголов, которые вы хотите явно разрешить, в данном случае — GET.

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <verbs
       allowUnlisted="false"
                  >
     <add verb="GET" allowed="true" />
    </verbs>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Фильтрация на основе последовательностей URL-адресов

Эта функция определяет список последовательностей, которые СЛУЖБЫ IIS отклоняют, когда они являются частью запроса. Когда службы IIS отклоняют запрос на эту функцию, регистрируется код ошибки 404.5. Это соответствует функции DenyUrlSequences в UrlScan.

Это очень мощная функция. С помощью следующего кода можно предотвратить предоставление определенной последовательности символов службами IIS:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <denyUrlSequences>
     <add sequence=".."/>
    </denyUrlSequences>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

В предыдущем примере — .. последовательность отклоняется. Предположим, вы приобрели приложение у поставщика, который ушел из бизнеса, и обнаружили, что приложение уязвимо при отправке ему заданной последовательности символов. С помощью этой функции можно защитить это приложение, просто добавив эту последовательность URL-адресов в список запрещенных без исправления кода приложения.

Фильтрация скрытых сегментов

Эта функция позволяет определить, какие сегменты являются "обслуживаемыми". Когда СЛУЖБЫ IIS отклоняют запрос на основе этой функции, регистрируется код ошибки 404.8. Эта функция является новой для IIS 7 и более поздних версий; Он не был частью UrlScan.

Рассмотрим следующий пример, в котором на сервере есть два URL-адреса:

http://site.com/bin

http://site.com/binary

Предположим, вы хотите разрешить содержимое в двоичном каталоге, но не содержимое в каталоге bin. Если вы используете последовательности URL-адресов и отклоняете последовательность "bin", вы запрещаете доступ к обоим URL-адресам. Используя приведенную ниже конфигурацию, вы можете запретить доступ к bin, но по-прежнему обслуживать содержимое в двоичном файле:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="BIN"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Коды ошибок IIS 7 и более поздних версий

В предыдущих версиях вы могли использовать UrlScan на глобальном уровне для определения политик безопасности, которые вы хотите применить в системах. С помощью IIS 7 и более поздних версий вы по-прежнему можете реализовать эти политики на глобальном уровне, но и на каждом URL-адресе. Таким образом, вы можете использовать все преимущества, предоставляемые новой моделью расширенного делегирования.

В следующей таблице приведена сводка кодов ошибок в журналах IIS.

Ошибка Коды состояний
Сайт не найден 404.1
Отклонено политикой 404.2
Отклонено mime-картой 404.3
Без обработчика 404.4
Фильтрация запросов: последовательность URL-адресов запрещена 404.5
Фильтрация запросов: отказано в команде 404.6
Фильтрация запросов: расширение файла отклонено 404.7
Фильтрация запросов: отклонено по скрытому сегменту 404.8
Запрещено, так как задан атрибут скрытого файла 404.9
Фильтрация запросов: отказано, так как URL-адрес удвоил экранирование 404.11
Фильтрация запросов: отклонено из-за высоких битовых символов 404.12
Фильтрация запросов: запрещено, так как URL-адрес слишком длинный 404.14
Фильтрация запросов: запрещено из-за слишком длинной строки запроса 404.15
Фильтрация запросов: отклонено из-за слишком большой длины содержимого 413.1
Фильтрация запросов: отклонено, так как заголовок запроса слишком длинный 431