如何為 AWS WAF 中的計數規則動作格式化指標和日誌?

3 分的閱讀內容
0

我已經設定好 AWS WAF,Web ACL 中的一些規則採用計數動作。如何對採用計數規則動作的規則分析 Amazon CloudWatch 指標和日誌?

簡短描述

在使用規則的一般動作設定來實作規則之前,您可以先使用計數規則動作來測試規則。AWS WAF 會根據計數規則動作中的規則來評估請求,並報告指標、請求範例和日誌中的相符項目。

您也可以使用計數規則動作來疑難排解產生誤報的規則。當規則或規則群組封鎖您不期望封鎖的流量時,就會發生誤報。如果您發現規則封鎖了您希望允許的請求,您可以將該規則的動作更新為計數。這可讓規則不再對您的請求採取行動。如需有關偵測和緩解誤報的詳細資訊,請參閱如何偵測由 AWS Managed Rules 引起的誤報並將其新增至安全清單中?

解決方案

若要瞭解如何為計數規則動作格式化指標和日誌,請考慮下列三種情況:

  1. 將自訂規則的規則動作設定為計數模式。
  2. AWS Managed Rules 規則群組中,將個別規則的規則動作設定為計數模式。
  3. 將整個規則群組的動作覆寫為計數。

將自訂規則的規則動作設定為計數模式

範例

您擁有具有單一自訂規則 ( Geo-Count) 與計數規則動作的 Web ACL (Test1-ACL)。如果請求來自美國,則 Geo-Count 規則會計算請求。如果用戶端 IP 屬於其他國家/地區,則會比對具有「允許」動作的 Web ACL 預設動作。

以下是此規則的 JSON 表示法:

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

如果請求來自位於美國的用戶端 IP,則會發生下列情況:

  • 該請求會被計算在內。
  • 自訂規則 Geo-Count 的 CloudWatch 指標會在 CountedRequests 指標中顯示資料點。
    **備註:**CloudWatch 只有在有非零值的情況下,才會報告 CountedRequests 指標。若要檢視資料,請將 CloudWatch 主控台中 Graphed metrics (圖形化指標) 索引標籤上的統計資料切換為 Sum (總和)。
  • 由於 Geo-Count 是具有計數動作的自訂規則,因此 AWS WAF 會計算請求。
  • 接著,AWS WAF 會根據 Web ACL 預設動作評估請求。由於 Web ACL 預設動作設定為「允許」,因此會允許請求。
  • 此動作的資料點會顯示在 Web ACL 的 AllowedRequests 指標中。

如需 AWS WAF 命名空間所包含指標和維度的詳細資訊,請參閱 AWS WAF 指標和維度

當您將自訂規則的動作更新為計數時,從記錄的角度來看,該規則會被視為非終止規則。因此,如果請求符合計數模式中的自訂規則,則會記錄下列欄位:

  • nonTerminatingMatchingRules:符合請求的非終止規則清單。
  • ruleId:符合請求且非終止的規則 ID。
  • action:這一律是 COUNT (計數)。
  • **ruleMatchDetails:**有關符合請求之規則的詳細資訊。此欄位只會填入 SQL 隱碼攻擊 (SQLi) 和跨網站指令碼 (XSS) 比對規則陳述式。

如果 Geo-Count 規則符合請求,則日誌會顯示 nonTerminatingMatchingRules 詳細資料,如下列範例所示:

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

  ]
}]

如需所有可能日誌欄位的詳細資訊,請參閱日誌欄位

若要開啟 Web ACL 的記錄功能,請參閱管理 Web ACL 的記錄

在 AWS Managed Rules 規則群組中,將個別規則的規則動作設定為計數模式

您可以覆寫規則群組內規則的動作,將部分或全部規則設定為計數。對於規則群組內設定為計數以外項目的規則動作,覆寫會變更該動作,以便只計算相符的請求。

如果 Web 請求符合規則,AWS WAF 會將比對作為計數處理,然後繼續評估規則群組中的後續規則。

如需如何將規則群組中的規則動作設定為計數的詳細資訊,請參閱將規則群組中的規則動作設定為計數

範例

您有一個包含 AWS Managed Rules 規則群組 (AWSManagedRulesKnownBadInputsRuleSet) 的網路 ACL (Test2-ACL)。此 Web ACL 中沒有其他規則,且 Web ACL 預設動作已設定為「允許」動作。

您可以將 AWSManagedRulesKnownBadInputsRuleSet 規則群組內的 Log4JRCE 規則更新為計數動作。現在,如果用戶端請求中的元件 (例如 URI、查詢字串等) 有 Log4j 漏洞,則該請求會依 Log4JRCE 規則計算。如果請求不符合規則群組中的任何其他規則,則 Web ACL 預設動作會允許該請求。

以下是此規則的 JSON 表示法:

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

如果您將規則群組中規則的規則動作設定為計數,則這些規則會被視為規則群組中的排除規則。如果您已開啟指標,則會收到每個排除規則的 COUNT (計數) 指標。

如果請求符合 Log4JRCE 規則,則會發生下列情況:

  • 該請求會被計算在內。
  • Log4JRCE 規則的 CloudWatch 指標會在 CountedRequests 指標中顯示資料點。

如果 AWSManagedRulesKnownBadInputsRuleSet 中沒有其他規則符合請求,則會發生下列情況:

  • Web ACL 預設動作允許此請求。
  • 資料點會出現在 Web ACL 的 AllowedRequests 指標中。

對於排除的規則,AWS WAF 日誌中會擷取下列欄位:

  • excludedRules:您已排除的規則群組中的規則清單。這些規則的動作設定為 Count (計數)。
  • exclusionType:表示排除的規則具有計數動作的類型。
  • ruleId:已排除規則群組中規則的 ID。

如果 Log4JRCE 規則符合請求,日誌會顯示 excludedRules 詳細資料,如下列範例所示:

"ruleGroupList":[
  {
    "ruleGroupId":"AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule":null,
    "nonTerminatingMatchingRules":[
      
      ],
    "excludedRules":[
      {
        "exclusionType":"EXCLUDED_AS_COUNT",
        "ruleId":"Log4JRCE"
      }
    ]
  }
]

如果規則群組中的個別規則更新為計數規則動作,則會發生下列情況:

  • 與此規則相符之請求的日誌不會在 nonTerminatingMatchingRules 欄位下包含規則的計數動作。
  • AWS WAF 日誌會在 excludedRules 欄位下顯示此規則。

將整個規則群組的動作覆寫為計數

如需如何將規則群組的動作覆寫為計數的詳細資訊,請參閱將產生的規則群組動作覆寫為計數

如需如何將規則群組的動作覆寫為計數的詳細資訊,請參閱將規則群組動作覆寫為計數

範例

您有一個包含 AWS Managed Rules 規則群組 (AWSManagedRulesKnownBadInputsRuleSet) 的網路 ACL (Test3-ACL)。此 Web ACL 中沒有其他規則,且 Web ACL 預設動作為「允許」。AWSManagedRulesKnownBadInputsRuleSet 規則群組中的所有規則都使用規則中定義的預設動作。這表示此規則群組中的規則未設定為 Count (計數)。不過,會開啟 Override rule group action to count (將規則群組動作覆寫為計數) 選項。

以下是此規則的 JSON 表示法:

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

如果用戶端請求中的元件 (例如 URI、查詢字串等) 有 Log4j 漏洞,會發生下列情況:

  • 請求被 Log4JRCE 規則封鎖。
  • 由於封鎖是終止動作,因此 AWS WAF 會停止評估規則群組,並將終止動作結果傳回給 Web ACL。
  • 此時,Override rule group action to count (將規則群組動作覆寫為計數) 會生效。規則群組的終止動作會覆寫為計數。
  • AWS WAF 會繼續處理 Web ACL 中的其餘規則。

如果請求符合 AWSManagedRulesKnownBadInputsRuleSet 規則群組內的 Log4JRCE 規則 (或任何其他規則),則會發生下列情況:

  • CloudWatch 會在與規則群組名稱 AWSManagedRulesKnownBadInputsRuleSet 相對應的 CountedRequests 指標中顯示資料點。
  • AWS WAF 會在覆寫發生之後繼續處理 Web ACL 中的其餘規則。因此,請求最終會與 Web ACL 預設動作比對。這會在 Web ACL 的 AllowedRequests 指標中顯示為資料點。
  • 在 AWS WAF 日誌中,相符的請求會在 nonTerminatingMatchingRules 欄位中包含計數動作。
  • 此外,ruleGroupList 會顯示在將終止動作覆寫為計數之前,原先封鎖請求之規則群組內的規則。
  • 如果 Log4JRCE 規則符合請求,則日誌會顯示 ruleGroupListnonTerminatingMatchingRules 詳細資料,如下列範例所示:
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
      "ruleId": "Log4JRCE",
      "action": "BLOCK",
      "ruleMatchDetails": null
    },
  "nonTerminatingMatchingRules": [

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

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

  ]
}]

相關資訊

Web ACL 中規則和規則群組動作的基本處理

AWS 官方
AWS 官方已更新 2 年前