Как я могу предотвратить ложные срабатывания Modsecurity, вызванные SignalR?

Недавно я построил новый сервер разработки, чтобы поэкспериментировать с Modsecurity. Однако я получаю много ложных срабатываний, сгенерированных приложением .NET 4, использующим SignalR для связи клиент-сервер.

Как я могу предотвратить ложные срабатывания без ущерба для эффективности Modsecurity?

Обращения кажутся довольно общими, поэтому я не хочу полностью отключать правила, и я хотел бы избежать отключения обращений к /signalr/ uri, которые лишат защиты SignalR.

Вот как я продолжил настройку:

  1. Я установил Windows Server 2012
  2. Установленная роль IIS
  3. Установлены все обновления ОС
  4. Установил ModSecurity IIS через WebPlatformInstaller
  5. Создан сайт и развернуто приложение

Вот три распространенных ложных срабатывания, которые я получаю:

Обход аутентификации SQL:

> [client 192.168.0.104:59945] ModSecurity: Warning. Pattern match
> "(?i:(?:in\\s*?\\(+\\s*?select)|(?:(?:n?and|x?x?or|div|like|between|and|not
> |\\|\\||\\&\\&)\\s+[\\s\\w+]+(?:regexp\\s*?\\(|sounds\\s+like\\s*?[\"'`\xc2\xb4\xe2\x80\x99\xe2\x80\x98]|[=\\d]+x))|([\"'`\xc2\xb4\xe2\x80\x99\xe2\x80\x98]\\s*?\\d\\s*?(?:--|#))
> ..." at ARGS:connectionData. [file "C:\/Program Files/ModSecurity
> IIS/owasp_crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"]
> [line "239"] [id "981246"] [msg "Detects basic SQL authentication
> bypass attempts 3/3"] [data "Matched Data: \x22name\x22:\x22 found
> within ARGS:connectionData: [{\x22name\x22:\x22*****serverhub\x22}]"]
> [severity "CRITICAL"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"]
> [hostname "*********"] [uri
> "/signalr/start?transport=webSockets&clientProtocol=1.4&connectionToken=iIxfXzLxKm9twEhHdomj4DI95so0QmpmqeTXD4Qe0VsQoJO47CHuEIuv2z7M%2B1TYx44PK5ko18t2aoaLb4WztjR1c8g0VP8MUaGkSO9KDftOzsGektSIDl%2FI1RPMQdTd&connectionData=%5B%7B%22name%22%3A%22*****serverhub%22%7D%5D&_=1461637088340"]
> [unique_id "17798225729515683844"]

Ограниченные символы SQL:

> [client 192.168.0.104:59945] ModSecurity: Warning. Pattern match
> "([\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\+\\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){4,}"
> at ARGS:connectionData. [file "C:\/Program Files/ModSecurity
> IIS/owasp_crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"]
> [line "159"] [id "981173"] [rev "2"] [msg "Restricted SQL Character
> Anomaly Detection Alert - Total # of special characters exceeded"]
> [data "Matched Data: \x22 found within ARGS:connectionData:
> [{\x22name\x22:\x22*****serverhub\x22}]"] [ver "OWASP_CRS/2.2.9"]
> [maturity "9"] [accuracy "8"] [tag
> "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [hostname "*********"] [uri
> "/signalr/start?transport=webSockets&clientProtocol=1.4&connectionToken=iIxfXzLxKm9twEhHdomj4DI95so0QmpmqeTXD4Qe0VsQoJO47CHuEIuv2z7M%2B1TYx44PK5ko18t2aoaLb4WztjR1c8g0VP8MUaGkSO9KDftOzsGektSIDl%2FI1RPMQdTd&connectionData=%5B%7B%22name%22%3A%22*****serverhub%22%7D%5D&_=1461637088340"]
> [unique_id "17798225729515683844"]

Отсутствует заголовок принятия:

> [client 192.168.0.104:59949] ModSecurity: Warning. Operator EQ matched
> 0 at REQUEST_HEADERS. [file "C:\/Program Files/ModSecurity
> IIS/owasp_crs/base_rules/modsecurity_crs_21_protocol_anomalies.conf"]
> [line "47"] [id "960015"] [rev "1"] [msg "Request Missing an Accept
> Header"] [severity "NOTICE"] [ver "OWASP_CRS/2.2.9"] [maturity "9"]
> [accuracy "9"] [tag
> "OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag
> "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [hostname
> "*********"] [uri
> "/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=iIxfXzLxKm9twEhHdomj4DI95so0QmpmqeTXD4Qe0VsQoJO47CHuEIuv2z7M%2B1TYx44PK5ko18t2aoaLb4WztjR1c8g0VP8MUaGkSO9KDftOzsGektSIDl%2FI1RPMQdTd&connectionData=%5B%7B%22name%22%3A%22*****serverhub%22%7D%5D&tid=6"]
> [unique_id "17726168135477755906"]

PS: я не использую какую-либо технологию SQL в этом конкретном приложении.


person CowWarrior    schedule 26.04.2016    source источник


Ответы (1)


Для первых двух я бы посоветовал вам добавить следующие правила, чтобы игнорировать этот параметр ConnectionData для этих правил:

 SecRuleUpdateTargetById 981246 !ARGS:'ConnectionData'
 SecRuleUpdateTargetById 981173 !ARGS:'ConnectionData'

Для последнего я предлагаю полностью удалить это правило. Я не нахожу это полезным, так как есть некоторые браузеры (на Android по памяти), которые не отправляют этот заголовок:

SecRuleRemoveById 960015

Возможно, вы захотите прочитать этот ответ, чтобы понять, как настроить ModSecurity: #33750934">Дополнительно чувствительные правила безопасности модов, дающие ошибку 403 Запрещено

person Barry Pollard    schedule 26.04.2016
comment
Отличный ответ, особенно в сочетании с упомянутыми правилами безопасности сверхчувствительных модов, дающими запрещенную ошибку 403, которая дает дополнительный контекст. - person CowWarrior; 27.04.2016