New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何設定 AWS WAF 以保護我的資源免受常見攻擊?
如何設定 AWS WAF 以保護我的資源免受常見攻擊?
解決方案
從 AWS WAF Classic 遷移到 AWS WAF (如果適用)
如果您使用的是 AWS WAF Classic,建議遷移至 AWS WAF。若要進行此遷移,可以利用自動化遷移工具。 如需詳細資訊,請參閱為何遷移至 AWS WAF?
針對應用程式執行滲透測試以識別漏洞
每個應用程序都會收到自己的請求類型。因此,必須自訂保護應用程式的防火牆規則。
針對您的應用程式執行滲透測試,以了解其特定漏洞。如需詳細資訊,請參閱:
- 用於滲透測試的 AWS 客戶支援政策
- AWS Marketplace 上的滲透測試供應商
檢閱傳入的請求以最佳化您的自訂規則
建立自訂規則以保護應用程式之前,請先檢閱環境中傳入的請求。
首先,使用以下方式產生日誌:
- 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 Athena 或 Amazon 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 功能。
相關內容
- 已提問 4 個月前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前