Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Брандмауэр веб-приложения (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, выполните следующие действия.
Перейдите к политике WAF и выберите Управляемые правила.
Выберите Добавление исключений.
В поле Область применения выберите набор правил CRS, к которому следует применить исключение, например OWASP_3.2.
Выберите Добавление правил и выберите правила, к которым необходимо применить исключения.
Настройте переменную сопоставления, оператор и селектор. Затем выберите Сохранить.
Можно настроить несколько исключений.
Вы также можете исключить заголовок User-Agent
из оценки только по правилу 942270:
Выполните действия, описанные в предыдущем примере, и выберите правило 942270 на шаге 4.
Глобальные исключения
Вы можете настроить исключение, которое будет применяться ко всем правилам WAF.
Пример
Например, нужно исключить значение в параметре user, передаваемом в запросе в составе URL-адреса. Например, предположим, что в вашей среде для аргумента строки запроса user
обычно содержится строка, которая в брандмауэре веб-приложения считается вредоносным содержимым, и поэтому WAF её блокирует. Можно исключить все аргументы строки запроса, в которых имя начинается со слова user
, чтобы WAF не вычислял значение поля.
В следующем примере показано, как можно исключить аргумент строки запроса user
из вычисления:
Чтобы настроить глобальное исключение с помощью портала Azure, сделайте следующее:
Перейдите к политике WAF и выберите Управляемые правила.
Выберите Добавление исключений.
В поле Область применения выберите Глобальная
Настройте переменную сопоставления, оператор и селектор. Затем выберите Сохранить.
Можно настроить несколько исключений.
Таким образом, если URL-адрес http://www.contoso.com/?user%3c%3e=joe
сканируется брандмауэром WAF, она не оценивает строку джо, но по-прежнему оценивает имя параметра user%3c%3e.
Следующие шаги
- После настройки параметров WAF вы можете узнать, как просматривать журналы WAF. Дополнительные сведения см. в разделе диагностика Application Gateway.
- Дополнительные сведения о безопасности сети Azure