Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сводка
Эта статья поможет устранить неполадки Брандмауэр веб-приложений (WAF) для Шлюз приложений Azure при блокировке допустимых запросов, чтобы разрешить допустимый трафик при сохранении защиты.
Начните с просмотра обзора WAF и документации по конфигурации WAF и убедитесь, что мониторинг WAF включен. В этих статьях объясняется, как работает WAF, как работают наборы правил и как получить доступ к журналам WAF.
Набор правил OWASP по умолчанию строго настроен и может быть подстроен под конкретные потребности приложения или организации, использующих WAF. Это полностью нормально и во многих случаях ожидается создавать исключения, пользовательские правила и даже отключать правила, которые могут вызывать проблемы или ложные срабатывания. Политики каждого сайта и URI позволяют вносить эти изменения только в определенные сайты или URI. Поэтому изменения не должны влиять на другие сайты, которые могут не столкнуться с теми же проблемами.
Общие сведения о журналах WAF
Цель журналов WAF — показать каждый запрос, который WAF сопоставляет или блокирует. Это реестр всех оцененных запросов, которые совпадают или блокируются. Если вы заметили, что WAF блокирует запрос, который не должен блокироваться (ложноположительное срабатывание), то можно предпринять несколько действий. Сначала сузите и найдите конкретный запрос. Просмотрите журналы, чтобы найти конкретный URI, метку времени или идентификатор транзакции запроса. Когда вы находите связанные записи журнала, можно приступать к действиям против ложных срабатываний.
Например, предположим, что у вас есть допустимый трафик, содержащий строку 1=1 , которую вы хотите передать через WAF. При попытке запроса WAF блокирует трафик, содержащий 1=1 строку в любом параметре или поле. Это строка, которая часто ассоциируется с атакой с использованием SQL-инъекции. Вы можете просмотреть журналы и просмотреть метку времени запроса и правила, которые заблокированы или сопоставлены.
В следующем примере можно увидеть, что четыре правила активируются во время одного запроса (с помощью поля TransactionId). Первый говорит, что он соответствует, так как пользователь использовал числовой или IP-URL-адрес для запроса, что увеличивает оценку аномалий на три, так как это предупреждение. Следующее правило, которое соответствует: 942130, это то, что вы ищете. Вы можете увидеть 1=1 в поле details.data. Это еще больше увеличивает балл аномалии на три, так как это также предупреждение. Как правило, каждое правило, которое имеет действие Matched , увеличивает оценку аномалий, и на этом этапе оценка аномалии будет шесть. Дополнительные сведения см. в режиме оценки аномалий.
Последние две записи журнала показывают, что запрос был заблокирован, так как оценка аномалий была достаточно высокой. Эти записи имеют другое действие, чем другие два. Они показывают, что они фактически блокируют запрос. Эти правила являются обязательными и не могут быть отключены. Они не должны рассматриваться как правила, но больше как базовая инфраструктура внутренних компонентов WAF.
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Исправить ложные срабатывания
Имея эту информацию и зная, что правило 942130 соответствует строке 1=1, вы можете предпринять несколько шагов, чтобы предотвратить блокировку вашего трафика.
Используйте список исключений. Дополнительные сведения о списках исключений см. в списках исключений WAF.
Отключите правило.
Использование списка исключений
Чтобы принять информированное решение об обработке ложноположительных срабатываний, важно ознакомиться с технологиями, которые использует ваше приложение. Допустим, в вашем стеке технологий нет SQL-сервера, и вы получаете ложные срабатывания, вызванные этими правилами. Отключение этих правил не обязательно ослабляет вашу безопасность.
Одним из преимуществ использования списка исключений является отключение только определенной части запроса. Однако это означает, что определенное исключение применимо ко всему трафику, передаваемому через WAF, так как это глобальный параметр. Например, это может привести к проблеме, если 1=1 является допустимым запросом в тексте для определенного приложения, но не для других. Еще одним преимуществом является то, что можно выбрать между текстом, заголовками и файлами cookie, которые следует исключить при соблюдении определенного условия, в отличие от исключения всего запроса.
Иногда существуют случаи, когда определенные параметры передаются в WAF способом, который не может быть интуитивно понятным. Например, есть маркер, который передается при проверке подлинности с помощью Microsoft Entra ID.
__RequestVerificationToken обычно передается в виде файла cookie запроса. Однако в некоторых случаях, когда файлы cookie отключены, этот маркер также передается в качестве атрибута запроса или arg. В этом случае необходимо убедиться, что __RequestVerificationToken также добавляется в список исключений в качестве имени атрибута запроса .
В этом примере необходимо исключить имя атрибута Request , равное text1. Это очевидно, так как имя атрибута можно увидеть в журналах брандмауэра: данные: сопоставленные данные: 1=1, найденные в ARGS:text1: 1=1. Атрибут — text1. Вы также можете найти это имя атрибута несколькими другими способами, см. раздел "Поиск имен атрибутов запроса".
Вы можете создавать исключения для WAF в шлюзе приложений на разных уровнях области. Дополнительные сведения см. в списках исключений Брандмауэр веб-приложений.
Отключить правила
Другой способ избежать ложного срабатывания состоит в том, чтобы отключить правило, которое совпало с тем входным сигналом, который WAF счел вредоносным. Так как вы анализируете журналы WAF и сузили правило до 942130, его можно отключить на портале Azure. См. Настраивайте правила брандмауэра веб-приложения через портал Azure.
Одним из преимуществ отключения правила является то, что, если вы знаете, что весь трафик, содержащий определенное условие, которое обычно заблокировано, является допустимым трафиком, вы можете отключить это правило для всего WAF. Однако если это только допустимый трафик в определенном случае использования, вы открываете уязвимость, отключив это правило для всего WAF, так как это глобальный параметр.
Если вы хотите использовать Azure PowerShell, ознакомьтесь с разделом Настройка правил брандмауэра веб-приложения с помощью PowerShell. Если вы хотите использовать Azure CLI, прочтите статью Настройка правил брандмауэра веб-приложений через Azure CLI.
Запись HAR-файлов
Вы можете использовать браузер или внешнее средство, например Fiddler, для записи ФАЙЛОВ HTTP-архива (HAR). HAR-файлы содержат сведения о запросах и ответах, выполняемых браузером при загрузке веб-страницы. Эти сведения могут быть полезны для устранения неполадок WAF.
Подсказка
Рекомендуется подготовить HAR-файл при обращении в службу поддержки. Группа поддержки может использовать HAR-файл для диагностики проблемы.
Чтобы записать и сохранить HAR-файл в Microsoft Edge, выполните следующие действия.
Нажмите F12 или Ctrl+Shift+I, чтобы открыть Edge Developer Tools. Вы также можете запустить средства из меню панели инструментов в разделе More tools > Средства разработчика.
На вкладке "Консоль " выберите "Очистить консоль " или нажмите клавиши CTRL+L.
Выберите вкладку "Сеть ".
Выберите «Очистить сетевой журнал» или нажмите CTRL+L, а затем выберите вести журнал сети, если он не записывается.
Загрузите веб-страницу, защищенную WAF, для которой требуется устранить неполадки.
Остановите запись журнала сети, выбрав Остановить запись.
Выберите export HAR (sanitized).. И сохраните HAR-файл.
Поиск имен атрибутов запроса
Fiddler можно использовать для проверки отдельных запросов и определения определенных полей веб-страницы. Использование этих сведений помогает исключить определенные поля из проверки с помощью списков исключений.
В этом примере видно, что поле, в котором введена строка 1=1 , называется text1.
Это поле можно исключить. Дополнительные сведения о списках исключений см. в списках исключений брандмауэра веб-приложения. Вы можете исключить оценку в этом случае, настроив следующее исключение:
Вы также можете просмотреть журналы брандмауэра, чтобы узнать, что нужно добавить в список исключений. Чтобы включить ведение журнала, см. работоспособность серверной части, журналы ресурсов и метрики для шлюза приложений.
Просмотрите журнал брандмауэра и просмотрите файл PT1H.json в течение часа, который требуется проверить.
В этом примере вы можете увидеть, что у вас есть четыре правила с одинаковым идентификатором транзакций, и что все они произошли в одно и то же время:
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Зная, как работает набор правил CRS и что набор правил CRS 3.0 использует систему оценки аномалий (см. Брандмауэр веб-приложений для Шлюз приложений Azure), вы понимаете, что два нижних правила со свойством 'Заблокировано' осуществляют блокировку на основе общей оценки аномалий. Правила, на которых следует сосредоточиться, это два основных.
Первая запись регистрируется, так как пользователь использовал числовые IP-адреса для перехода к шлюзу приложений, который можно игнорировать в этом случае.
Второй (правило 942130) является интересным. Вы можете увидеть в деталях, что это соответствовало шаблону (1=1), а поле называется text1. Выполните те же предыдущие действия, чтобы исключить имя атрибута запроса , равное имени атрибута 1=1.
Найдите имена заголовков запросов
Для поиска имен заголовков запросов можно использовать Fiddler. На следующем снимке экрана вы увидите заголовки этого запроса GET, которые включают Content-Type, User-Agent и т. д.
Снимок экрана – отладчик веб-сайтов Fiddler. На вкладке "Raw" перечислены сведения о заголовке запроса, например, о подключении, типе контента и агенте пользователя.
Другим способом просмотра заголовков запросов и ответов является использование средств разработчика Microsoft Edge или Google Chrome. Дополнительные сведения см. в разделе "Запись HAR-файлов".
Найдите имена cookie запроса
Если запрос содержит файлы cookie, вкладка "Файлы cookie" можно выбрать для просмотра их в Fiddler.
Ограничение глобальных параметров для исключения ложноположительных результатов
Отключение проверки текста запроса
Установив параметр Проверить текст запроса в положение 'выкл', тела запросов не проверяются на вашем WAF. Это может быть полезно, если вы знаете, что тела запросов не являются вредоносными для вашего приложения.
При отключении этого параметра выполняется только проверка текста запроса. Заголовки и файлы cookie по-прежнему проверяются, если отдельные из них не исключаются с помощью функций списка исключений.
Отключение максимального ограничения текста запроса
Отключив максимально допустимый размер тела запроса, WAF может обрабатывать крупные тела запросов, не отклоняя их из-за превышения предела размера. Этот параметр полезен, если у вас регулярно есть большие запросы.
При отключении этого параметра тело запроса будет проверяться только в пределах максимального лимита проверки. Если в запросе есть вредоносное содержимое, превышающее максимальное ограничение проверки текста запроса, WAF не обнаружит его.
Отключение ограничений максимального размера файла
Отключив ограничения размера файла для WAF, большие файлы можно отправлять без отказа WAF от отправки этих файлов. Позволяя отправлять большие файлы, риск перегрузки серверной части увеличивается. Если вы знаете максимальный размер отправки файла, можно задать ограничение размера для отправки файлов чуть выше ожидаемого максимального размера. Ограничение размера файла обычным вариантом использования для приложения является другим способом предотвращения атак. Однако если отправка файлов регулярно превышает максимальный размер загрузки файла, может потребоваться полностью отключить ограничения размера загрузки, чтобы избежать ложных предупреждений.
Замечание
Если вы знаете, что приложению никогда не потребуется отправить файл выше заданного размера, можно ограничить это, задав ограничение.
Предупреждение
При назначении нового управляемого набора правил политике WAF все предыдущие настройки из существующих управляемых наборов правил, таких как состояние правила, действия правила и исключения на уровне правил, будут сбрасываться на новые значения по умолчанию управляемого набора правил. Однако все пользовательские правила, параметры политики и глобальные исключения останутся не затронуты во время назначения нового набора правил.
Метрики брандмауэра (только WAF версии 1)
Для брандмауэров веб-приложений версии 1 на портале теперь доступны следующие метрики:
- Количество заблокированных запросов брандмауэром веб-приложений — число этих запросов.
- Брандмауэр веб-приложений число заблокированных правил все правила, которые были сопоставлены and запрос был заблокирован.
- Общее распределение правил Брандмауэр веб-приложений: все правила, которые были сопоставлены во время оценки.
Чтобы включить метрики, перейдите на вкладку "Метрики " на портале и выберите одну из трех метрик.