如何上傳 AWS WAF 封鎖的檔案?
我需要上傳 (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_BODY 和 CrossSiteScripting_BODY 攻擊填入。
下列是 CrossSiteScripting_BODY 的 matchedData 範例:
"terminatingRuleMatchDetails": [{ "conditionType": "XSS", "location": "BODY", "matchedData": [ "<?", "`" ]
下列是 SQLi_BODY 的 matchedData 範例:
"terminatingRuleMatchDetails": [{ "conditionType": "SQL_INJECTION", "location": "BODY", "matchedData": [ ")", "*", "(", "0" ]
若要處理由 SQLi_BODY 或 CrossSiteScripting_BODY 封鎖的上傳,請選擇下列其中一個選項:
將已知的 IP 位址新增至安全清單
如果您知道存取應用程式的 IP 位址範圍,請將已知的 IP 位址新增至具有 IP 比對條件的安全清單規則。如需指示,請參閱使用 IP 比對條件。
使用具有比對條件的安全清單
使用具有字串或規則運算式 (regex) 比對條件的安全清單來允許請求。您可以根據 URI、HTTP 標頭或與 AWS WAF 檔案的「內文」相關聯的詞組來建立安全清單。
若要建立安全清單,請建立新的自訂規則。此規則會以例外條件封鎖 XSS 或 SQLi 向量,這是根據上傳有效請求屬性的相符資料。請務必覆寫特定規則的動作,這些規則在受管理規則群組內並會導致誤判: SQLi_BODY 和 CrossSiteScripting_BODY。
若要建立此自訂規則,請完成下列步驟:
- 開啟 AWS WAF 主控台。
- 在導覽窗格的 AWS WAF 下,選擇 Web ACL。
- 對於區域,選取您在其中建立 Web ACL 的 AWS 區域。
注意事項:如果您為 Amazon CloudFront 設定 Web ACL,請選取全域。 - 選取您的 Web ACL。然後,在 Web ACL 規則索引標籤中,選擇規則。
- 選擇新增規則,然後選擇新增我自己的規則和規則群組。
- 對於名稱,輸入規則名稱,然後選擇一般規則。
- 對於如果是請求,選擇符合所有陳述式 (AND)。
- 使用下列欄位填寫陳述式 1:
對於檢查,選取有標籤。
對於比對範圍,選取標籤。
對於比對索引鍵,輸入建立誤判的規則標籤。例如,如果 CrossSiteScripting_BODY 規則會建立誤判,請輸入 awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body。 - 使用下列欄位填寫陳述式 2:
選取否定陳述式結果的核取方塊。
對於檢查,選取內文。
對於比對類型,選取包含字串。
對於比對字串,輸入要與規則比對的值。 - (選用) 對於文字轉換,選擇文字轉換或無。
- 對於動作,選擇封鎖。然後,選擇新增規則。
- 對於設定規則優先順序,將規則移至封鎖請求的受管理規則群組下方。這會在 AWS WAF 使用下一個規則優先順序內的標籤之前,先設定規則群組檢查的受管理規則標籤。
- 選擇儲存。
重要事項:最佳實務是在非生產環境中測試規則,將動作設定為計數。若要評估規則,請使用 Amazon CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌。當規則執行您想要的操作時,將動作變更為封鎖。
檔案上傳遭到 WindowsShellCommands_BODY、GenericLFI_BODY,或 SizeRestrictions_BODY 規則封鎖
檔案上傳時,取得 HTTP 封存 (HAR) 檔案。然後,檢閱它是否適用於 WindowsShellCommands_BODY、GenericLFI_BODY 或 SizeRestrictions_BODY 規則。如需指示,請參閱如何從瀏覽器為 AWS Support 案例建立 HAR 檔案?
若要允許 WindowsShellCommands_BODY、GenericLFI_BODY 或 SizeRestrictions_BODY 的誤判,請先將對應的規則設定為計數模式。如需指示,請參閱將規則群組的評估結果覆寫為計數。
然後,為導致誤判的特定受管理規則建立自訂規則:
- 開啟 AWS WAF 主控台。
- 在導覽窗格的 AWS WAF 下,選擇 Web ACL。
- 對於區域,選取您在其中建立 Web ACL 的 AWS 區域。
注意事項:如果您為 Amazon CloudFront 設定 Web ACL,請選取全域。 - 選取您的 Web ACL。然後,在 Web ACL 規則索引標籤中,選擇規則。
- 選擇新增規則,然後選擇新增我自己的規則和規則群組。
- 對於名稱,輸入規則名稱,然後選擇一般規則。
- 對於如果是請求,選擇符合所有陳述式 (AND)。
- 使用下列欄位填寫陳述式 1:
對於檢查,選取有標籤。
對於比對範圍,選取標籤。
對於比對索引鍵,輸入建立誤判的規則標籤。例如,如果 WindowsShellCommands_BODY 規則會建立誤判,請輸入 awswaf:managed:aws:windows-os:WindowsShellCommands_Body。 - 使用下列欄位填寫陳述式 2:
選取否定陳述式結果的核取方塊。
對於檢查,選取 URI 路徑。
對於比對類型,選取完全相符字串。
對於比對字串,輸入在其中提出請求的 URI 路徑。 - (選用) 對於文字轉換,選擇文字轉換或無。
- 對於動作,選擇封鎖。
- 選擇新增規則。
- 對於設定規則優先順序,將規則移至封鎖請求的受管理規則下方。
- 選擇儲存。
重要事項:最佳實務是在非生產環境中測試規則,將動作設定為計數。使用 CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌來評估規則。當規則執行您想要的操作時,將動作變更為封鎖。
允許封鎖檔案的其他選項
**注意事項:**規則會以與 Web ACL 中的清單順序相同的順序進行處理。如需下列建議,請務必視需要重新排序您的規則優先順序。
為您的使用案例選擇最佳方法:
- 使用字串比對規則陳述式 (AWS WAF) 或字串比對條件 (AWS WAF Classic) 來套用選擇性排除。將與檔案的「內文」相關聯的特定詞組新增至安全清單。如果某個 URI 路徑上發生誤判,請將路徑新增至安全清單。
- 使用單獨的網域進行檔案上傳。請務必考慮這是否對您的使用案例來說是一種具有成本效益的選擇。
- 掃描 (清除) 檔案和影像以尋找內嵌程式碼和資料。您可以在上傳檔案之前在用戶端執行此動作。或者,如果您建立排除規則,則您可以在上傳檔案之後,在後端執行此動作。
- 在上傳檔案之前壓縮檔案。
**警告:**請確保您不會壓縮惡意檔案。 - 如果上傳來自已知 IP 位址範圍,請將這些 IP 位址新增至您的安全清單。
- 使用 base64 編碼對所有影像資料進行編碼,以便 AWS WAF 不會對影像調用 XSS 或 SQLi。
**警告:**請務必避免編碼惡意影像。 - 實作影像最佳化技術,例如移除區塊或隨機化位元。
相關內容
- 已提問 3 個月前lg...
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前