如何上傳 AWS WAF 封鎖的檔案?

2 分的閱讀內容
0

我需要上傳 (POST) 檔案,該檔案會使用 AWS WAF 封鎖的擴充功能。

簡短描述

若要了解 AWS WAF 可能會封鎖 POST 請求的原因,請注意下列要點:

  • AWS WAF _BODY 管理規則僅會檢查 Web 存取控制清單 (ACL) 的內文大小上限的請求內文。區域 Web ACL 的限制為 8 KB,而 Amazon CloudFront Web ACL 的限制則為 16 KB。對於 CloudFront Web ACL,您可以在 Web ACL 組態中增加至 64 KB 的上限。
  • SQL injection 隱碼攻擊和跨網站指令碼 (XSS) 規則對在它們的中繼資料包含隨機字元的檔案很敏感。這些隨機字元可能會調用 Web ACL 規則,因為它們與 AWS WAF 中的實際 XSS 或 SQL injection 隱碼攻擊簽名類似。

首先,請檢閱可能會封鎖檔案上傳的常見規則。如果一般規則不會封鎖上傳,請考慮其他選項來允許封鎖的檔案。
下列規則通常會封鎖檔案上傳:

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

解決方案

檔案上傳遭到 SQLi_BODY 和 CrossSiteScripting_BODY 規則封鎖

請檢查 AWS WAF 完整日誌中的 terminatingRuleMatchDetails 欄位以取得規則資訊。

**注意事項:**terminatingRuleMatchDetails 欄位僅會針對 SQLi_BODYCrossSiteScripting_BODY 攻擊填入。

下列是 CrossSiteScripting_BODYmatchedData 範例:

"terminatingRuleMatchDetails": [{
        "conditionType": "XSS",
        "location": "BODY",
        "matchedData": [
            "<?",
            "`"
        ]

下列是 SQLi_BODYmatchedData 範例:

"terminatingRuleMatchDetails": [{
        "conditionType": "SQL_INJECTION",
        "location": "BODY",
        "matchedData": [
            ")",
            "*",
            "(",
            "0"
        ]

若要處理由 SQLi_BODYCrossSiteScripting_BODY 封鎖的上傳,請選擇下列其中一個選項:

將已知的 IP 位址新增至安全清單
如果您知道存取應用程式的 IP 位址範圍,請將已知的 IP 位址新增至具有 IP 比對條件的安全清單規則。如需指示,請參閱使用 IP 比對條件

使用具有比對條件的安全清單
使用具有字串或規則運算式 (regex) 比對條件的安全清單來允許請求。您可以根據 URI、HTTP 標頭或與 AWS WAF 檔案的「內文」相關聯的詞組來建立安全清單。

若要建立安全清單,請建立新的自訂規則。此規則會以例外條件封鎖 XSS 或 SQLi 向量,這是根據上傳有效請求屬性的相符資料。請務必覆寫特定規則的動作,這些規則在受管理規則群組內並會導致誤判: SQLi_BODYCrossSiteScripting_BODY

若要建立此自訂規則,請完成下列步驟:

  1. 開啟 AWS WAF 主控台
  2. 在導覽窗格的 AWS WAF 下,選擇 Web ACL
  3. 對於區域,選取您在其中建立 Web ACL 的 AWS 區域。
    注意事項:如果您為 Amazon CloudFront 設定 Web ACL,請選取全域
  4. 選取您的 Web ACL。然後,在 Web ACL 規則索引標籤中,選擇規則
  5. 選擇新增規則,然後選擇新增我自己的規則和規則群組
  6. 對於名稱,輸入規則名稱,然後選擇一般規則
  7. 對於如果是請求,選擇符合所有陳述式 (AND)
  8. 使用下列欄位填寫陳述式 1
    對於檢查,選取有標籤
    對於比對範圍,選取標籤
    對於比對索引鍵,輸入建立誤判的規則標籤。例如,如果 CrossSiteScripting_BODY 規則會建立誤判,請輸入 awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body
  9. 使用下列欄位填寫陳述式 2
    選取否定陳述式結果的核取方塊。
    對於檢查,選取內文
    對於比對類型,選取包含字串
    對於比對字串,輸入要與規則比對的值。
  10. (選用) 對於文字轉換,選擇文字轉換
  11. 對於動作,選擇封鎖。然後,選擇新增規則
  12. 對於設定規則優先順序,將規則移至封鎖請求的受管理規則群組下方。這會在 AWS WAF 使用下一個規則優先順序內的標籤之前,先設定規則群組檢查的受管理規則標籤。
  13. 選擇儲存

重要事項:最佳實務是在非生產環境中測試規則,將動作設定為計數。若要評估規則,請使用 Amazon CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌。當規則執行您想要的操作時,將動作變更為封鎖

檔案上傳遭到 WindowsShellCommands_BODY、GenericLFI_BODY,或 SizeRestrictions_BODY 規則封鎖

檔案上傳時,取得 HTTP 封存 (HAR) 檔案。然後,檢閱它是否適用於 WindowsShellCommands_BODYGenericLFI_BODYSizeRestrictions_BODY 規則。如需指示,請參閱如何從瀏覽器為 AWS Support 案例建立 HAR 檔案?

若要允許 WindowsShellCommands_BODYGenericLFI_BODYSizeRestrictions_BODY 的誤判,請先將對應的規則設定為計數模式。如需指示,請參閱將規則群組的評估結果覆寫為計數

然後,為導致誤判的特定受管理規則建立自訂規則:

  1. 開啟 AWS WAF 主控台
  2. 在導覽窗格的 AWS WAF 下,選擇 Web ACL
  3. 對於區域,選取您在其中建立 Web ACL 的 AWS 區域。
    注意事項:如果您為 Amazon CloudFront 設定 Web ACL,請選取全域
  4. 選取您的 Web ACL。然後,在 Web ACL 規則索引標籤中,選擇規則
  5. 選擇新增規則,然後選擇新增我自己的規則和規則群組
  6. 對於名稱,輸入規則名稱,然後選擇一般規則
  7. 對於如果是請求,選擇符合所有陳述式 (AND)
  8. 使用下列欄位填寫陳述式 1
    對於檢查,選取有標籤
    對於比對範圍,選取標籤
    對於比對索引鍵,輸入建立誤判的規則標籤。例如,如果 WindowsShellCommands_BODY 規則會建立誤判,請輸入 awswaf:managed:aws:windows-os:WindowsShellCommands_Body
  9. 使用下列欄位填寫陳述式 2
    選取否定陳述式結果的核取方塊。
    對於檢查,選取 URI 路徑
    對於比對類型,選取完全相符字串
    對於比對字串,輸入在其中提出請求的 URI 路徑。
  10. (選用) 對於文字轉換,選擇文字轉換
  11. 對於動作,選擇封鎖
  12. 選擇新增規則
  13. 對於設定規則優先順序,將規則移至封鎖請求的受管理規則下方。
  14. 選擇儲存

重要事項:最佳實務是在非生產環境中測試規則,將動作設定為計數。使用 CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌來評估規則。當規則執行您想要的操作時,將動作變更為封鎖

允許封鎖檔案的其他選項

**注意事項:**規則會以與 Web ACL 中的清單順序相同的順序進行處理。如需下列建議,請務必視需要重新排序您的規則優先順序。
為您的使用案例選擇最佳方法:

  • 使用字串比對規則陳述式 (AWS WAF) 或字串比對條件 (AWS WAF Classic) 來套用選擇性排除。將與檔案的「內文」相關聯的特定詞組新增至安全清單。如果某個 URI 路徑上發生誤判,請將路徑新增至安全清單。
  • 使用單獨的網域進行檔案上傳。請務必考慮這是否對您的使用案例來說是一種具有成本效益的選擇。
  • 掃描 (清除) 檔案和影像以尋找內嵌程式碼和資料。您可以在上傳檔案之前在用戶端執行此動作。或者,如果您建立排除規則,則您可以在上傳檔案之後,在後端執行此動作。
  • 在上傳檔案之前壓縮檔案。
    **警告:**請確保您不會壓縮惡意檔案。
  • 如果上傳來自已知 IP 位址範圍,請將這些 IP 位址新增至您的安全清單。
  • 使用 base64 編碼對所有影像資料進行編碼,以便 AWS WAF 不會對影像調用 XSS 或 SQLi。
    **警告:**請務必避免編碼惡意影像。
  • 實作影像最佳化技術,例如移除區塊或隨機化位元。
AWS 官方
AWS 官方已更新 4 個月前