Список исключений Брандмауэра веб-приложений

Брандмауэр веб-приложения (WAF) шлюза приложений Azure обеспечивает защиту веб-приложений. В этой статье описана настройка списков исключений WAF. Эти параметры находятся в политике WAF, связанной с вашим Шлюзом приложений Azure. Дополнительные сведения о политиках WAF см. в статьях Подробные сведения о брандмауэре веб-приложений Azure в Шлюзе приложений Azure и Создание политик Брандмауэра веб-приложений для Шлюза приложений.

Иногда WAF может блокировать запрос, который требуется разрешить для приложения. Списки исключений WAF позволяют пропустить некоторые атрибуты запроса при проверке WAF. Остальная часть запроса оценивается как нормальная.

Например, служба Active Directory вставляет токены, которые используются для проверки подлинности. При использовании в заголовке запроса эти маркеры могут содержать специальные знаки, которые могут вызвать ложноположительное обнаружение по правилам WAF. Добавив заголовок в список исключений, вы можете настроить WAF на игнорирование заголовка, но WAF по-прежнему будет оценивать остальную часть запроса.

Вы можете настроить исключения, которые будут применяться при оценке определенных правил WAF или применяться глобально к оценке всех правил WAF. Правила исключений применяются ко всему веб-приложению.

Определение атрибутов запроса, которые будут исключены

При настройке исключения WAF необходимо указать атрибуты запроса, которые следует исключить из оценки WAF. Вы можете настроить исключение WAF для следующих атрибутов запроса:

  • Заголовки запросов
  • Запрос файлов cookie
  • Имя атрибута запроса (args) можно добавить как элемент исключения, например:
    • Имя поля формы
    • Сущность JSON
    • Аргументы строки запроса URL-адреса

Вы можете указать точное соответствие заголовка запроса, текста, файла cookie или атрибута строки запроса. Либо вы можете задать частичное соответствие. Используйте приведенные ниже операторы для настройки исключения.

  • Equals: этот оператор используется для точного совпадения. Например, для выбора заголовка с именем bearerToken используйте оператор равенства со значением селектора bearerToken.
  • Starts with: этот оператор находит все поля, которые начинаются с указанного значения селектора.
  • Ends with: этот оператор соответствует всем полям запроса, которые заканчиваются указанным значением селектора.
  • Contains: этот оператор находит все поля запроса, которые содержат указанное значение селектора.
  • Equals any: этот оператор находит все поля запроса. * — значение селектора. Например, этот оператор используется, если вы не знаете точные значения для заданной переменной соответствия, но хотите убедиться, что трафик запроса по-прежнему исключается из оценки правил.

При обработке исключений подсистема WAF выполняет сопоставление с учетом регистра и не учитывается на основе приведенной ниже таблицы. Кроме того, регулярные выражения не допускаются, так как селекторы и тела ЗАПРОСОВ XML не поддерживаются.

Часть текста запроса CRS 3.1 и более ранних версий CRS 3.2 и более поздних версий
Заголовка* Без учета регистра Без учета регистра
Cookie* Без учета регистра С учетом регистра
Строка запроса* Без учета регистра С учетом регистра
Текст в кодировке URL-адреса Без учета регистра С учетом регистра
Текст JSON Без учета регистра С учетом регистра
Текст XML Не поддерживается Не поддерживается
Многопартийное тело Без учета регистра С учетом регистра

*В зависимости от приложения, имен и значений заголовков, файлов cookie и запросов args могут быть конфиденциальными или нечувствительными к регистру.

Примечание.

Дополнительные сведения и информацию об устранении неполадок см. в статье Устранение неполадок WAF.

Запрос атрибутов по ключам и значениям

При настройке исключения необходимо определить, следует ли исключить ключ или значение из оценки WAF.

Предположим, что запросы включают этот заголовок:

My-Header: 1=1

Значение заголовка (1=1) может быть обнаружено WAF как атака. Но если вы знаете, что это допустимое значение для вашего сценария, можно настроить исключение для значения заголовка. Для этого используется переменная сопоставления RequestHeaderValues , оператор содержит и селектор (My-Header). Эта конфигурация останавливает оценку всех значений заголовка My-Header.

Примечание.

Атрибуты запроса по ключу и значениям доступны только в CRS 3.2 или более поздней версии и Bot Manager 1.0 или более поздней версии.

Атрибуты запроса по именам работают так же, как и атрибуты запроса по значениям, и включены для обратной совместимости с CRS 3.1 и более ранними версиями. Мы рекомендуем использовать атрибуты запроса по значениям вместо атрибутов по именам. Например, используйте RequestHeaderValues вместо RequestHeaderNames.

В отличие от этого, если WAF обнаруживает имя заголовка (My-Header) как атаку, можно настроить исключение для ключа заголовка с помощью атрибута запроса RequestHeaderKeys. Атрибут RequestHeaderKeys доступен только в CRS 3.2 или более поздней версии и Bot Manager 1.0 или более поздней версии.

Примеры атрибутов запроса

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

Атрибут для исключения matchVariable selectorMatchOperator Пример селектора Пример запроса Что исключается
Строка запроса RequestArgKeys Равно /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Строка запроса RequestArgKeys EqualsAny Н/П Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd и .htaccess.
Строка запроса RequestArgNames Равно text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Строка запроса RequestArgNames EqualsAny Н/П Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd и .cshrc.
Строка запроса RequestArgValues Равно text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Строка запроса RequestArgValues EqualsAny Н/П Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd и .cshrc.
Текст запроса RequestArgKeys Содержит sleep Текст запроса: {"sleep(5)": "test"} sleep(5)
Текст запроса RequestArgKeys EqualsAny Н/П Текст запроса: {".zshrc": "value", "sleep(5)":"value2"} .zshrc и sleep(5).
Текст запроса RequestArgNames Равно test Текст запроса: {"test": ".zshrc"} .zshrc
Текст запроса RequestArgNames EqualsAny Н/П Текст запроса: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc и sleep(5).
Текст запроса RequestArgValues Равно test Текст запроса: {"test": ".zshrc"} .zshrc
Текст запроса RequestArgValues EqualsAny Н/П Текст запроса: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc и sleep(5).
Заголовок RequestHeaderKeys Равно X-Scanner заголовок: {"X-Scanner": "test"}; X-scanner
Заголовок RequestHeaderKeys EqualsAny Н/П заголовок: {"X-Scanner": "test", "x-ratproxy-loop": "value"}; X-Scanner и x-ratproxy-loop.
Заголовок RequestHeaderNames Равно head1 заголовок: {"head1": "X-Scanner"}; X-scanner
Заголовок RequestHeaderNames EqualsAny Н/П заголовок: {"head1": "myvar=1234", "User-Agent": "(hydra)"}; myvar=1234 и (hydra).
Заголовок RequestHeaderValues Равно head1 заголовок: {"head1": "X-Scanner"}; X-scanner
Заголовок RequestHeaderValues EqualsAny Н/П заголовок: {"head1": "myvar=1234", "User-Agent": "(hydra)"}; myvar=1234 и (hydra).
Файл cookie RequestCookieKeys Содержит /etc/passwd заголовок: {"Cookie": "/etc/passwdtest=hello1"}; /etc/passwdtest
Файл cookie RequestCookieKeys EqualsAny Н/П заголовок: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"}; /etc/passwdtest и .htaccess.
Файл cookie RequestCookieNames Равно arg1 заголовок: {"Cookie": "arg1=/etc/passwd"}; /etc/passwd
Файл cookie RequestCookieNames EqualsAny Н/П заголовок: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"}; /etc/passwd и .cshrc.
Файл cookie RequestCookieValues Равно arg1 заголовок: {"Cookie": "arg1=/etc/passwd"}; /etc/passwd
Файл cookie RequestCookieValues EqualsAny Н/П заголовок: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"}; /etc/passwd и .cshrc.

Примечание.

При создании исключения с помощью селектораMatchOperator EqualsAnyвсе, что вы помещаете в поле селектора, преобразуется в "*" серверной частью при создании исключения.

Области исключения

Исключения можно настроить так, чтобы они применялись к определенному набору правил WAF, к наборам правил или глобально ко всем правилам.

Совет

Рекомендуется делать исключения как можно более узкими и конкретными, чтобы не оставить случайно возможности для злоумышленников использовать вашу систему. Если необходимо добавить правило исключения, при возможности используйте исключения для отдельных правил.

Исключения для отдельных правил

Вы можете настроить исключение для отдельного правила, группы правил или набора правил. Необходимо указать правило или правила, к которым применяется исключение. Кроме того, необходимо указать атрибут запроса, который следует исключить из оценки WAF. Чтобы исключить всю группу правил, укажите только параметр ruleGroupName. Параметр rules будет полезен только в том случае, если необходимо исключить лишь определенные правила группы.

Исключения для каждого правила доступны при использовании набора правил OWASP (CRS) версии 3.2 или более поздней версии или набора правил Bot Manager версии 1.0 или более поздней.

Пример

Предположим, что нужно, чтобы брандмауэр веб-приложения (WAF) не учитывал значение заголовка запроса User-Agent. Заголовок User-Agent содержит строку характеристик, которая позволяет одноранговым узлам сетевого протокола определять тип приложения, операционную систему, поставщика ПО или версию ПО агента пользователя программного обеспечения, выполняющего запрос. Дополнительные сведения см. в статье User-Agent.

Запрет на проверку этого заголовка может потребоваться по ряду причин. Может существовать строка, которую WAF распознает и считает вредоносной. Например, заголовок User-Agent может включать классическую атаку путем внедрения кода SQL x=x в строку. В некоторых случаях это может быть допустимый трафик. Поэтому может потребоваться исключить этот заголовок из проверки WAF.

Вы можете использовать следующие подходы, чтобы исключить заголовок User-Agent из оценки всеми правилами внедрения SQL:

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

  1. Перейдите к политике WAF и выберите Управляемые правила.

  2. Выберите Добавление исключений.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. В поле Область применения выберите набор правил CRS, к которому следует применить исключение, например OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Выберите Добавление правил и выберите правила, к которым необходимо применить исключения.

  5. Настройте переменную сопоставления, оператор и селектор. Затем выберите Сохранить.

Можно настроить несколько исключений.

Вы также можете исключить заголовок User-Agent из оценки только по правилу 942270:

Выполните действия, описанные в предыдущем примере, и выберите правило 942270 на шаге 4.

Глобальные исключения

Вы можете настроить исключение, которое будет применяться ко всем правилам WAF.

Пример

Например, нужно исключить значение в параметре user, передаваемом в запросе в составе URL-адреса. Например, предположим, что в вашей среде для аргумента строки запроса user часто попадается строка, которая в брандмауэре веб-приложения считается вредоносным содержимым. Поэтому WAF ее блокирует. Можно исключить все аргументы строки запроса, в которых имя начинается со слова user, чтобы WAF не вычислял значение поля.

В следующем примере показано, как можно исключить аргумент строки запроса user из вычисления:

Чтобы настроить глобальное исключение с помощью портала Azure, сделайте следующее:

  1. Перейдите к политике WAF и выберите Управляемые правила.

  2. Выберите Добавление исключений.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. В поле Область применения выберите Глобальная

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Настройте переменную сопоставления, оператор и селектор. Затем выберите Сохранить.

Можно настроить несколько исключений.

Таким образом, если URL-адрес http://www.contoso.com/?user%3c%3e=joe сканируется WAF, он не будет оценивать строковый джо, но он по-прежнему оценивает имя параметра user %3c%3e.

Следующие шаги