如何設定 AWS WAF 以保護我的資源免受常見攻擊?

3 分的閱讀內容
0

如何設定 AWS WAF 以保護我的資源免受常見攻擊?

解決方案

從 AWS WAF Classic 遷移到 AWS WAF (如果適用)

如果您使用的是 AWS WAF Classic,建議遷移至 AWS WAF。若要進行此遷移,可以利用自動化遷移工具。 如需詳細資訊,請參閱為何遷移至 AWS WAF?

針對應用程式執行滲透測試以識別漏洞

每個應用程序都會收到自己的請求類型。因此,必須自訂保護應用程式的防火牆規則。

針對您的應用程式執行滲透測試,以了解其特定漏洞。如需詳細資訊,請參閱:

檢閱傳入的請求以最佳化您的自訂規則

建立自訂規則以保護應用程式之前,請先檢閱環境中傳入的請求。

首先,使用以下方式產生日誌:

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer
  • Amazon API Gateway

然後,將這些日誌儲存在 Amazon Simple Storage Service (Amazon S3) 中。最後,使用 Amazon Athena 查詢日誌並識別模式。例如,您可能會看到如下模式:

  • 對不存在 URI 的環境提出請求

  • 若要識別此模式,必須知道每個支援的 URI

  • 在 AWS WAF 日誌上執行以計算每個 URI 請求的 Athena 查詢範例:

SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • 包含網頁伺服器不支援的 HTTP 主機標頭的請求,或包含 IP 位址而非網站網域名稱的請求

  • 在 AWS WAF 日誌上執行以計算具有不同主機標頭值的請求的 Athena 查詢範例:

SELECT header.value as HostHeader, count(header) as count
FROM waf_logs, UNNEST(httprequest.headers) AS x(header)
WHERE "header"."name" = 'Host'
GROUP BY  header
ORDER BY count DESC

在識別模式之後,您可以在 COUNT 模式下建立 AWS WAF 規則,以驗證是否已將規則設定為符合這些請求。然後,將規則移至 BLOCK 模式。

例如,如果您的應用程式僅支援主機標頭 "www.example.com":

  • 在包含值 "www.example.com" 的主機標頭上建立不相符
  • 將動作設定為 BLOCK

此時,對沒有 "www.example.com" 主機標頭的環境發出的任何請求都會被阻止。 
**注意事項:**此規則亦會阻止對 AWS 提供的完全合格網域名稱 (FQDN) 的請求。

使用 AWS 受管規則來防範常見攻擊

使用 AWS 受管規則來防止施加於大多數應用程式的常見攻擊,包括下列請求:

  • 不包含使用者代理程式
  • 代表機器人請求
  • 使用 “localhost” 作為 HTTP 主機標頭
  • 使用 PROPFIND HTTP 方法

COUNT 模式下,將這些基準規則群組納入您的 Web 存取控制清單 (Web ACL) 中。確保在規則群組中選擇「啟用 COUNT 模式」。然後,檢閱 AWS WAF 日誌和 CloudWatch 指標,以確定受管規則是否符合任何合法流量。如果不符合,請停用「啟用 COUNT 模式」以將規則群組移至 BLOCK。若要停用 AWS 受管規則群組中的特定規則,請為該規則選擇「覆寫規則動作」。

**注意事項:**對環境的合法請求會觸發 AWS 受管規則中的規則。如需詳細資訊,請參閱如何偵測到 AWS 受管規則所造成的誤判並將其新增至安全清單?

**重要事項:**AWS 受管規則旨在保護您免受常見的 Web 威脅。根據文件使用時,AWS 受管規則群組會為您的應用程式增加另一層安全性。但是,AWS 受管規則群組並不是用來替代您的安全責任,這些責任是由您選取的 AWS 資源來決定。請參閱共用責任模型,以確保 AWS 中的資源受到適當的保護。

使用合法請求速率設定 AWS WAF 的基準

對您的流量執行分析,以在 AWS WAF 日誌中找出合法用戶端 IP 位址使用 Amazon AthenaAmazon Quicksight 提出的請求數目。使用從這次分析中獲得的資訊,根據合法用戶端提出的請求速率設定 AWS WAF 的基準。然後,在設定 AWS WAF 以速率為基礎的規則時設定臨界值。

在 AWS WAF 日誌上執行以計算指定時間範圍 (2020 年 11 月 16 日上午 9 點到上午 10 點) 內來自單一 IP 位址 (x.x.x.x) 之請求數目的 Athena 查詢範例:

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE httprequest.clientip LIKE 'x.x.x.x' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"

在 AWS WAF 日誌上執行以計算同一時間範圍內來自所有 IP 位址的請求數目的 Athena 查詢範例:

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

使用 AWS WAF 安全自動化範本來防止常見攻擊

使用 AWS WAF 安全自動化範本來提供額外的保護,以避免常見攻擊。例如,您可以啟用針對下列項目的保護:

  • 掃描器和探測器
  • 不良機器人
  • 錯誤的 IP 位址

**注意事項:**此解決方案會使用產生費用的其他 AWS 服務。

防止 SQL injection 隱碼攻擊和跨網站指令碼

為保護您的應用程式免受 SQL injection 隱碼攻擊和跨網站指令碼 (XSS) 攻擊,請使用內建 SQL injection 隱碼攻擊跨網站指令碼引擎。請記住,攻擊可以對 HTTP 請求的不同部分執行,例如 HTTP 標頭、查詢字串或 URI。設定 AWS WAF 規則,以根據內建緩解引擎檢查 HTTP 請求的不同部分。

**注意事項:**對環境的合法請求可能會觸發緩解引擎中的規則。如需詳細資訊,請參閱如何偵測到 AWS 受管規則所造成的誤判並將其新增至安全清單?

限制從 CloudFront 的存取權 (如果您在 CloudFront 上使用 AWS WAF)

  • 根據 CloudFront IP 位址限制存取權
  • 在 CloudFront 中為原始請求新增自訂標頭。在原始來源上,僅在自訂標頭和值存在時才允許存取權。如果原始來源是 Application Load Balancer 或 API 閘道,請在原始來源上使用 AWS WAF 以允許包含自訂標頭和值的請求。

防範 DDoS 攻擊

如需關於防範分散式拒絕服務 (DDoS) 攻擊的詳細資訊,請參閱 DDoS 恢復能力的 AWS 最佳實務和 AWS Shield 功能


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