2 votes

Comment puis-je empêcher les faux positifs de Modsecurity causés par SignalR ?

J'ai récemment construit un tout nouveau serveur de développement afin d'expérimenter avec Modsecurity. Cependant, je reçois beaucoup de faux positifs générés par une application .NET 4 utilisant SignalR pour les communications client-serveur.

Comment puis-je prévenir les faux positifs sans compromettre l'efficacité de Modsecurity ?

Les hits semblent assez généraux donc je ne veux pas désactiver complètement les règles et j'aimerais éviter de désactiver les hits sur l'uri /signalr/ ce qui compromettrait la protection sur SignalR.

Voici comment j'ai procédé pour ma configuration :

  1. J'ai installé Windows Server 2012
  2. Installé le rôle IIS
  3. Installé toutes les mises à jour du système d'exploitation
  4. Installé ModSecurity IIS via WebPlatformInstaller
  5. Créé le site web et déployé l'application

Voici les trois faux positifs courants que je reçois :

Bypass d'authentification SQL :

> [client 192.168.0.104:59945] ModSecurity: Attention. Motif correspondant
> "(?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*?(?:--|#))
> ..." à ARGS:connectionData. [file "C:\/Program Files/ModSecurity
> IIS/owasp_crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"]
> [line "239"] [id "981246"] [msg "Détection de tentatives de contournement d'authentification SQL de base 3/3"] [data "Données correspondantes: \x22name\x22:\x22 trouvées dans ARGS:connectionData: [{\x22name\x22:\x22*****serverhub\x22}]"]
> [gravité "CRITIQUE"] [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"]
> [identifiant unique "17798225729515683844"]

Caractères SQL restreints :

> [client 192.168.0.104:59945] ModSecurity: Attention. Motif correspondant
> "([\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\+\\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){4,}"
> à 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 "Alerte de détection d'anomalie de caractère SQL restreint - Total # de caractères spéciaux dépassé"]
> [data "Données correspondant: \x22 trouvées dans ARGS:connectionData: [{\x22name\x22:\x22*****serverhub\x22}]"] [ver "OWASP_CRS/2.2.9"]
> [maturité "9"] [précision "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"]
> [identifiant unique "17798225729515683844"]

En-tête Accept manquant :

> [client 192.168.0.104:59949] ModSecurity: Attention. L'opérateur EQ correspond
> 0 à REQUEST_HEADERS. [fichier "C:\/Program Files/ModSecurity
> IIS/owasp_crs/base_rules/modsecurity_crs_21_protocol_anomalies.conf"]
> [ligne "47"] [id "960015"] [rev "1"] [msg "Requête manquante d'un en-tête Accept"]
> [gravité "NOTICE"] [ver "OWASP_CRS/2.2.9"] [maturité "9"]
> [précision "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"]
> [identifiant unique "17726168135477755906"]

PS : Je n'utilise pas de technologie SQL dans cette application particulière.

4voto

BazzaDP Points 2585

Pour les deux premiers, je vous suggère d'ajouter les règles suivantes pour ignorer ce paramètre ConnectionData pour ces règles :

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

Pour le dernier, je suggère de supprimer complètement cette règle. Je ne la trouve pas très utile car il y a certains navigateurs (sur Android de mémoire) qui n'envoient pas cet en-tête :

SecRuleRemoveById 960015

Vous voudrez peut-être lire cette réponse pour comprendre comment ajuster ModSecurity : Extra sensitive Mod Security rules giving 403 forbidden error

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X