Wie schließe ich bestimmte URIs von der XSS- oder SQLi-Prüfung für HTTP-Anforderungen aus, wenn ich AWS WAF verwende?

Letzte Aktualisierung: 21.07.2022

Ich erhalte Fehlalarme für SQL-Injection (SQLi) oder Cross-Site-Scripting (XSS) bei bestimmten HTTP-Anfragen.  Wie schließe ich bestimmte URIs von der XSS- oder SQLi-Prüfung für HTTP-Anforderungen aus, wenn ich AWS WAF verwende?

Kurzbeschreibung

Bei der Prüfung von XSS- und SQLi-Regeln für von AWS verwaltete Regeln und benutzerdefinierte Regeln treten manchmal Fehlalarme auf. Sie können bestimmte URI-Pfade von der XSS- und SQLi-Prüfung ausschließen, um Fehlalarme zu vermeiden. Verwenden Sie dazu verschachtelte Anweisungen, um die Zulassungsregel zu schreiben, sodass die Anforderung anhand aller anderen Regeln ausgewertet wird.

Lösung

Beispiel einer HTTP- oder HTTPS-Anforderung

http://www.amazon.com/path/string1?abc=123&xyz=567

In der vorherigen Anforderung lautet der URI-Pfad „/path/string1“. Jede Zeichenfolge, die auf „?“ folgt, wird als Abfragezeichenfolge bezeichnet, z. B. „abc=123&xyz=567“ im vorherigen Beispiel. In der Abfragezeichenfolge sind „abc“ und „xyz“ die Abfrageparameter mit den Werten „123“ bzw. „567“.

Beispielregeln für das Zulassen bestimmter URIs aus der XSS- oder SQLi-Prüfung

Hinweis: Die folgenden Beispielregelkonfigurationen dienen nur als Referenz. Sie müssen diese Regeln für PositionalConstraint, SearchString, TextTransformations usw. anpassen. Mit entsprechender Logik können Sie bestimmte Header, Abfrageparameter usw. zulassen.

Fall 1: Verwenden der von AWS verwalteten Regeln

Die von AWS verwaltete Regelgruppe AWSManagedRulesCommonRuleSet enthält die folgenden Regeln:

  • CrossSiteScripting_COOKIE
  • CrossSiteScripting_QUERYARGUMENTS
  • CrossSiteScripting_BODY
  • CrossSiteScripting_URIPATH

Die Regelgruppe AWSManagedRulesCommonRuleSet verfügt über die Aktion BLOCK, die im entsprechenden Teil der Anforderung nach einer XSS-Angriffszeichenfolge sucht. Weitere Informationen finden Sie unter Verwaltete Regelgruppe „Core Rule Set“ (CRS).

In ähnlicher Weise verfügt die Regelgruppe AWSManagedRulesSQLiRuleSet über Regeln, um Abfrageparameter, den Textkörper und ein Cookie auf ein SQLi-Injection-Angriffsmuster zu überprüfen. Weitere Informationen finden Sie unter Anwendungsfallspezifische Regelgruppen.

Wenn eine Anforderung mit den vorherigen Regeln übereinstimmt, generiert AWS WAF die entsprechenden Labels. Die Labels werden in der später in der Web-ACL definierten Regel verwendet, um bestimmte Anforderungen selektiv auszuschließen (in diesem Beispiel basierend auf dem URI).

Gehen Sie wie folgt vor, um bestimmte URIs zuzulassen:

1.    Lassen Sie die folgenden Regeln aus der Regelgruppe AWSManagedRulesCommonRuleSet im Count-Modus:

  • CrossSiteScripting_COOKIE
  • CrossSiteScripting_QUERYARGUMENTS
  • CrossSiteScripting_BODY
  • CrossSiteScripting_URIPATH

2.    Erstellen Sie eine Zulassungsregel, die mit einer niedrigeren Priorität konfiguriert ist als AWSManagedRulesCommonRuleSet.

Die Logik der Regel lautet wie folgt:

(XSS_URIPATH or XSS_Cookie or XSS_Body or XSS_QueryArguments) AND (NOT whitelisted URIString) = BLOCK

Verwenden Sie die folgende Konfiguration:

{
  "Name": "whitelist-xss",
  "Priority": 10,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "OrStatement": {
            "Statements": [
              {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:aws:core-rule-set:CrossSiteScripting_URIPath"
                }
              },
              {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:aws:core-rule-set:CrossSiteScripting_Cookie"
                }
              },
              {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body"
                }
              },
              {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:aws:core-rule-set:CrossSiteScripting_QueryArguments"
                }
              }
            ]
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "ByteMatchStatement": {
                "SearchString": "URI_SearchString",
                "FieldToMatch": {
                  "UriPath": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "CONTAINS"
              }
            }
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "whitelist-xss"
  }
}

Führen Sie die vorherigen Schritte für AWSManagedRulesSQLiRuleSet aus, indem Sie die Labels durch von AWSManagedRulesSQLiRuleSet generierte Labels ersetzen.

Fall 2: Verwenden von benutzerdefinierten XSS- und SQLi-Regeln

Die Logik der Regel lautet wie folgt:

(XSS_URIPATH or XSS_Cookie or XSS_Body or XSS_QueryArguments) AND (NOT whitelisted URIString) = BLOCK

Verwenden Sie die folgende Konfiguration für die Regel, um XSS-Angriffszeichenfolgen für die Anforderung zu überprüfen und dabei selektiv einen bestimmten URI_PATH auszuschließen:

{
  "Name": "xss-URI",
  "Priority": 10,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "xss-URI"
  },
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "OrStatement": {
            "Statements": [
              {
                "XssMatchStatement": {
                  "FieldToMatch": {
                    "UriPath": {}
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ]
                }
              },
              {
                "XssMatchStatement": {
                  "FieldToMatch": {
                    "Cookies": {
                      "MatchPattern": {
                        "All": {}
                      },
                      "MatchScope": "ALL",
                      "OversizeHandling": "CONTINUE"
                    }
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ]
                }
              },
              {
                "XssMatchStatement": {
                  "FieldToMatch": {
                    "Body": {
                      "OversizeHandling": "CONTINUE"
                    }
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ]
                }
              },
              {
                "XssMatchStatement": {
                  "FieldToMatch": {
                    "AllQueryArguments": {}
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "ByteMatchStatement": {
                "FieldToMatch": {
                  "UriPath": {}
                },
                "PositionalConstraint": "CONTAINS",
                "SearchString": "URI_SearchString",
                "TextTransformations": [
                  {
                    "Type": "NONE",
                    "Priority": 0
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Gehen Sie bei der Verwendung von SQLi-Anweisungen wie oben beschrieben vor.

Hinweis: Eine Regel mit höherer Priorität, die nur den URI zulässt, ist nicht zu empfehlen. Die Anforderung mit dem erlaubten URI_PATH kann dann nicht nach allen anderen in der Web-ACL definierten Regeln ausgewertet werden.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?