Direkt zum Inhalt

Wie analysiere ich meine CloudWatch-Metriken und -Protokolle für AWS WAF-Regeln im Modus „Count“ (Zählen)?

Lesedauer: 8 Minute
0

Einige der Regeln in meiner AWS WAF Web Access Control List (Web-ACL) verwenden die Aktion „Count“ (Zählen). Ich möchte meine Amazon CloudWatch-Metriken und -Protokolle für diese Regeln analysieren.

Kurzbeschreibung

Bevor du deine AWS WAF-Regeln mit ihren endgültigen Aktionseinstellungen implementierst, verwende die Regelaktion „Count“ (Zählen), um sie zu testen. AWS WAF wertet die Anforderungen anhand von Regeln aus, die auf Count (Zählen) festgelegt sind. Anschließend meldet AWS WAF Übereinstimmungen in Metriken, Anforderungsbeispielen und Protokollen.

Du kannst Count (Zählen) auch verwenden, um Probleme mit Regeln zu beheben, die falsch-positive Ergebnisse generieren. Falsch-positive Ergebnisse treten auf, wenn eine Regel oder eine Regelgruppe Datenverkehr blockiert, bei dem du das nicht erwartest. Weitere Informationen findest du unter Wie erkenne ich falsch-positive Ergebnisse, die durch AWS-verwaltete Regeln verursacht wurden?

Lösung

Informationen dazu, wie CloudWatch Metriken und Protokolle für die Regelaktion Count (Zählen) formatiert, findest du in den folgenden Beispielszenarien:

Protokolle für eine benutzerdefinierte Regel analysieren, die auf „Count“ (Zählen) festgelegt ist

Im folgenden Beispiel verfügt die Web-ACL über eine einzelne benutzerdefinierte Regel, die auf Count (Zählen) festgelegt ist: Geo-Count. Geo-Count zählt Anforderungen, wenn sie aus den USA stammen. Die Standardaktion der Web-ACL ist Allow (Zulassen).

Beispiel für eine Geo-Count-Regel:

{
  "Name": "Geo-Count",
  "Priority": 0,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Geo-Count"
  }
}

Wenn sich die Client-IP-Adresse außerhalb der USA befindet, verwendet die Web-ACL ihre Standardaktion und lässt die Anforderung zu.

Wenn sich die Client-IP-Adresse in den USA befindet, werden die folgenden Aktionen ausgeführt:

  • AWS WAF zählt die Anforderung.
  • Die CloudWatch-Metrik für Geo-Count zeigt einen Datenpunkt in der Metrik CountedRequests an.
    Hinweis: CloudWatch meldet die Metrik CountedRequests nur, wenn der Wert nicht null ist. Um die Daten in der CloudWatch-Konsole anzuzeigen, navigiere zu Graphed metrics (Grafisch dargestellte Metriken) und aktualisiere die Statistik dann auf Sum (Summe).
  • AWS WAF verwendet die Standardaktion der Web-ACL und lässt die Anforderung zu.
  • CloudWatch erfasst einen Datenpunkt in der Metrik AllowedRequests für diese Web-ACL.

Weitere Informationen findest du unter AWS WAF Metriken und Dimensionen.

Eine benutzerdefinierte Regel, die auf Count (Zählen) festgelegt ist, wird in den Protokollen als nicht beendend aufgeführt. Wenn die Anforderung einer benutzerdefinierten Regel entspricht, die auf Count (Zählen) festgelegt ist, protokolliert AWS WAF die folgenden Details:

  • nonTerminatingMatchingRules listet die nicht beendenden Regeln auf, die mit der Anforderung übereinstimmen.
  • ruleId listet die Regel auf, die mit der Anforderung übereinstimmt und nicht beendend ist.
  • Das Feld action (Aktion) lautet immer COUNT.
  • Das Feld ruleMatchDetails enthält detaillierte Informationen zur Regel, die mit der Anforderung übereinstimmt. AWS WAF füllt dieses Feld nur für Regelanweisungen zur Übereinstimmung von SQL-Injektion (SQLi) und Cross-Site-Scripting (XSS) aus.

Beispielhafte nonTerminatingMatchingRules-Details für eine Geo-Count-Übereinstimmung:

"nonTerminatingMatchingRules": [{
  "ruleId": "Geo-Count",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

Weitere Informationen zu allen Protokollfeldern findest du unter Protokollfelder für den Traffic des Protection Packs (Web-ACL).

Protokolle für einzelne Regeln in einer AWS Managed Rules-Regelgruppe analysieren, die auf „Count“ (Zählen) festgelegt sind

Um die Aktion einer Regel innerhalb einer Regelgruppe zu überschreiben, lege eine oder mehrere Regeln in der Regelgruppe auf Count (Zählen) fest. Das Überschreiben ändert die Aktion, sodass AWS WAF nur die Anforderungen zählt, die übereinstimmen. Die Überschreibung umfasst keine Regelaktionen in der Regelgruppe, die du auf etwas anderes als Count (Zählen) festgelegt hast.

Wenn eine Webanforderung mit der Regel übereinstimmt, verarbeitet AWS WAF die Übereinstimmung zunächst als Count (Zählen). Anschließend wertet AWS WAF die nachfolgenden Regeln in der Regelgruppe aus.

Im folgenden Beispiel verwendet die Web-ACL AWSManagedRulesKnownBadInputsRuleSet. Es gibt keine weiteren Regeln in der Web-ACL, und ihre Standardaktion ist Allow (Zulassen).

Beispielhafte AWSManagedRulesKnownBadInputsRuleSet-Regel:

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "ExcludedRules": [
        {
          "Name": "Log4JRCE"
        }
      ]
    }
  },
  "OverrideAction": {
    "None": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Wenn du die Regel Log4JRCE auf Count (Zählen) festlegst, zählt AWS WAF Anforderungen mit einer Log4j-Schwachstelle. Wenn die Anforderung mit keinen anderen Regeln in der Regelgruppe übereinstimmt, lässt die Standardaktion der Web-ACL die Anforderung zu.

Wenn du die Regelaktion für Regeln innerhalb der Regelgruppe auf Count (Zählen) festlegst, werden sie als ausgeschlossene Regeln in der Regelgruppe protokolliert. Du erhältst Count-Metriken für jede ausgeschlossene Regel.

Wenn eine Anforderung der Regel Log4JRCE entspricht, werden die folgenden Aktionen ausgeführt:

  • AWS WAF zählt die Anforderung.
  • Die CloudWatch-Metrik für die Regel Log4JRCE zeigt einen Datenpunkt in der Metrik CountedRequests an.

Wenn keine andere Regel in AWSManagedRulesKnownBadInputsRuleSet mit der Anforderung übereinstimmt, werden die folgenden Aktionen ausgeführt:

  • Die Standardaktion der Web-ACL lässt die Anforderung zu.
  • CloudWatch erfasst einen Datenpunkt in der Metrik AllowedRequests für die Web-ACL.

Für ausgeschlossene Regeln erfassen die AWS WAF-Protokolle die folgenden Details:

  • Das Feld excludedRules listet die Regeln in der Regelgruppe auf, die du ausgeschlossen hast.Die Aktion für diese Regeln ist auf Count (Zählen) festgelegt.
  • exclusionType zeigt an, dass die ausgeschlossene Regel die Aktion Count (Zählen) aufweist.
  • ruleId listet die ID der ausgeschlossenen Regel auf.

Beispielhafte excludedRules-Details für eine Anforderung, die der Regel Log4JRCE entspricht:

"ruleGroupList": [
  {
    "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule": null,
    "nonTerminatingMatchingRules": [

    ],
    "excludedRules": [
      {
        "exclusionType": "EXCLUDED_AS_COUNT",
        "ruleId": "Log4JRCE"
      }
    ]
  }
]

Wenn eine einzelne Regel innerhalb einer Regelgruppe auf Count (Zählen) aktualisiert wird, werden die folgenden Aktionen ausgeführt:

  • Die Protokolle für die Anforderung, die mit dieser Regel übereinstimmt, enthalten im Feld nonTerminatingMatchingRules keine Count-Aktion für die Regel.
  • Die AWS WAF-Protokolle zeigen diese Regel im Feld excludedRules an.

Protokolle analysieren, wenn die Aktion einer gesamten Regelgruppe „Count“ (Zählen) lautet

Wenn du die Aktion einer Regelgruppe auf Count (Zählen) überschreibst, legst du die gesamte Regelgruppe auf Count (Zählen) fest.

Im folgenden Beispiel verwendet die Web-ACL AWSManagedRulesKnownBadInputsRuleSet. Die Web-ACL enthält keine anderen Regeln. Die Standardaktion der Web-ACL ist Allow (Zulassen). Alle Regeln in AWSManagedRulesKnownBadInputsRuleSet verwenden die Standardaktion und sind nicht auf „Count“ (Zählen) festgelegt. Du hast Override rule group action to Count (Aktion der Regelgruppe auf „Zählen“ überschreiben) aktiviert.

Beispielhafte AWSManagedRulesKnownBadInputsRuleSet-Regel mit Überschreibung auf Count (Zählen):

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet"
    }
  },
  "OverrideAction": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Wenn eine Anforderung einer Regel innerhalb der Regelgruppe AWSManagedRulesKnownBadInputsRuleSet entspricht, werden die folgenden Aktionen ausgeführt:

  • CloudWatch zeigt einen Datenpunkt in der Metrik CountedRequests für den Namen der Regelgruppe an.
  • AWS WAF verarbeitet die restlichen Regeln in der Web-ACL, nachdem die Count-Überschreibung erfolgt ist. CloudWatch gleicht die Anforderung mit der Standardaktion der Web-ACL ab und zeigt einen Datenpunkt in der Metrik AllowedRequests für die Web-ACL an.
  • In den AWS WAF-Protokollen enthält die übereinstimmende Anforderung eine Count-Aktion im Feld nonTerminatingMatchingRules.
  • Die ruleGroupList zeigt die Regel innerhalb der Regelgruppe an, die die Anforderung ursprünglich blockiert hat, bevor die beendende Aktion überschrieben wurde.

Wenn eine Komponente in einer Anforderung, wie ein URI oder eine Abfragezeichenfolge, eine Log4j-Schwachstelle aufweist, werden die folgenden Aktionen ausgeführt:

  • Die Regel Log4JRCE blockiert die Anforderung.
  • Da Block (Blockieren) eine beendende Aktion ist, beendet AWS WAF die Auswertung der Regelgruppe und gibt das Ergebnis der beendenden Aktion an die Web-ACL zurück.
  • Override rule group action to Count (Aktion der Regelgruppe auf „Zählen“ überschreiben) wird wirksam. AWS WAF überschreibt die beendende Aktion der Regelgruppe auf Count (Zählen).
  • AWS WAF verarbeitet die restlichen Regeln in der Web-ACL.
  • Die Details zu ruleGroupList und nonTerminatingMatchingRules werden in den Protokollen im folgenden Format angezeigt:
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
    "ruleId": "Log4JRCE",
    "action": "BLOCK",
    "ruleMatchDetails": null
  },
  "nonTerminatingMatchingRules": [

  ],
  "excludedRules": null
}],
"rateBasedRuleList": [

],
"nonTerminatingMatchingRules": [{
  "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

CloudWatch Logs Insights abfragen, um Übereinstimmungen mit Count-Regeln zu analysieren

Nachdem du Regeln im Count-Modus bereitgestellt hast, verwende Amazon CloudWatch Logs Insights, um deine AWS WAF-Protokolle abzufragen und potenzielle falsch-positive Ergebnisse zu identifizieren, bevor du zu Block (Blockieren) wechselst.

Hinweis: Um diese Abfragen verwenden zu können, musst du zunächst die Protokollierung für deine Web-ACL aktivieren und Protokolle an eine CloudWatch-Protokollgruppe senden.

Führe die folgende Abfrage aus, um Anforderungen zu finden, die eine bestimmte Regel in nonTerminatingMatchingRules ausgelöst haben.

fields @timestamp
| filter @message like /"ruleId":"YOUR-RULE-SET-NAME","action":"COUNT"/
| sort @timestamp desc
| display @timestamp, terminatingRuleId, httpRequest.clientIp, httpRequest.country, @message
| limit 100

Hinweis: Ersetze YOUR-RULE-SET-NAME durch den Namen deines Regelsatzes.

Führe die folgende Abfrage aus, um alle Anforderungen zu finden, die nonTerminatingMatchingRules ausgelöst haben:

fields @timestamp, @message
| parse @message ',"nonTerminatingMatchingRules":[{"ruleId":"*","action":"*"' as rule, action
| filter action = "COUNT"
| display @timestamp, rule, action
| sort @timestamp desc

Führe die folgende Abfrage aus, um alle Anforderungen zu finden, die mehrere nicht beendende Regeln zusammen mit Labels ausgelöst haben:

fields @timestamp
| filter @message like '"labels":['
| parse @message '"labels":[*]' as Labels
| parse @message '"nonTerminatingMatchingRules":[*]' as nonTermRules
| filter nonTermRules like /COUNT/
| display @timestamp, nonTermRules, Labels
| sort @timestamp desc
| limit 100

Überprüfe die Abfrageergebnisse, um Muster in den Anforderungen zu identifizieren, die mit deinen Count-Regeln übereinstimmen. Wenn die übereinstimmenden Anforderungen legitimen Datenverkehr darstellen, generiert die Regel falsch-positive Ergebnisse. Passe die Regelbedingungen an, bevor du die Aktion auf Block (Blockieren) umschaltest.

Weitere Informationen

Wie AWS WAF geht man mit Regel- und Regelgruppenaktionen um

CloudWatch Logs Insights-Abfragesprache (Logs Insights QL)

Wie analysiere ich AWS-WAF-Protokolle in CloudWatch?

AWS OFFICIALAktualisiert vor 5 Monaten