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


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

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

Иногда WAF (Web Application Firewall) может блокировать запрос, который вы хотите разрешить для своего приложения. Списки исключений 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 и более поздних версий
Заголовок* Без учета регистра Без учета регистра
Печенье* Без учета регистра С учетом регистра
Строка запроса* Без учета регистра С учетом регистра
Текст в кодировке URL-адреса Без учета регистра С учетом регистра
Текст JSON Без учета регистра С учетом регистра
Текст XML Не поддерживается Не поддерживается
Многокомпонентное тело Без учета регистра С учетом регистра

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

Примечание.

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

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

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

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

My-Header: 1=1

Значение заголовка (1=1) может быть обнаружено WAF как атака. Но если вы знаете, что это допустимое значение для вашего сценария, можно настроить исключение для значения заголовка. Чтобы сделать это, используйте переменную сопоставления RequestHeaderValues, оператор contains и селектор (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 оператор совпадения селектора Пример селектора Пример запроса Что исключается
Строка запроса RequestArgKeys Равно /etc/passwd Ури: http://localhost:8080/?/etc/passwd=test /etc/passwd
Строка запроса КлючиАргументовЗапроса (RequestArgKeys) EqualsAny Н/П Ури: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd и .htaccess.
Строка запроса RequestArgNames Равно text Ури: http://localhost:8080/?text=/etc/passwd /etc/passwd
Строка запроса RequestArgNames EqualsAny Н/П Ури: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd и .cshrc.
Строка запроса RequestArgValues Равно text Ури: http://localhost:8080/?text=/etc/passwd /etc/passwd
Строка запроса RequestArgValues EqualsAny Н/П Ури: 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).
Текст запроса Запрос значений аргументов Равно test Текст запроса: {"test": ".zshrc"} .zshrc
Текст запроса RequestArgValues EqualsAny Н/П Текст запроса: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc и sleep(5).
Заголовок КлючиЗаголовковЗапроса Равно X-Scanner заголовок: {"X-Scanner": "test"}; X-scanner
Заголовок КлючиЗаголовковЗапроса ЭкуалсЭни Н/П заголовок: {"X-Scanner": "test", "x-ratproxy-loop": "value"}; X-Scanner и x-ratproxy-loop.
Верхний колонтитул ИменаЗаголовковЗапроса Равно head1 заголовок: {"head1": "X-Scanner"}; X-scanner
Верхний колонтитул RequestHeaderNames (ИменаЗаголовковЗапросов) EqualsAny Н/П заголовок: {"head1": "myvar=1234", "User-Agent": "(hydra)"}; myvar=1234 и (hydra).
Верхний колонтитул ЗначенияЗаголовковЗапроса Равно head1 заголовок: {"head1": "X-Scanner"}; X-scanner
Заголовок RequestHeaderValues EqualsAny Н/П заголовок: {"head1": "myvar=1234", "User-Agent": "(hydra)"}; myvar=1234 и (hydra).
печенье RequestCookieKeys Содержит /etc/passwd заголовок: {"Cookie": "/etc/passwdtest=hello1"}; /etc/passwdtest
куки RequestCookieKeys EqualsAny Н/П заголовок: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"}; /etc/passwdtest и .htaccess.
Куки RequestCookieNames Равно arg1 заголовок: {"Cookie": "arg1=/etc/passwd"}; /etc/passwd
куки RequestCookieNames EqualsAny Н/П заголовок: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"}; /etc/passwd и .cshrc.
Куки RequestCookieValues Равно arg1 заголовок: {"Cookie": "arg1=/etc/passwd"}; /etc/passwd
Печенье 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. Выберите Добавление исключений.

    Снимок экрана портала Azure, где показано, как добавить новое исключение для правила в политике WAF.

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

    Снимок экрана портала Azure, на котором показана конфигурация исключения для каждого правила политики WAF.

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

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

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

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

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

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

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

Пример

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

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

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

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

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

    Снимок экрана: портал Azure, в котором показано, как добавить новое глобальное исключение для политики W A F.

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

    Снимок экрана: портал Azure, на котором показана глобальная конфигурация исключения для политики W A F.

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

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

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

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