iT邦幫忙

2

Wordpress系統常被GCP Cloud Armor OWASP Policy阻擋,有解嗎?

  • 分享至 

  • xImage

公司有個系統是以WordPress以及各種套件組成,有開放對外。

現在遇到的問題是我啟用Google Cloud Armor preconfigured WAF rules,開發Team同仁就會反應常常遇到網頁回應404,看Log發現都是觸發了規則導致被Deny

原本都是看哪條規則,如果是太嚴格的那種(風險只是警告),我就會在Policy的地方把這條規則拿掉。例如:owasp-crs-v030301-id942430-sqli:Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (12)

不過目前系統要上線(WordPress對外公開有個"上線"的功能),我發現變成會觸發到SQL Injection的Rule,我查了一下這種是比較高風險,例如:owasp-crs-v030301-id942260-sqli:Detects basic SQL authentication bypass attempts 2/3 這種

感覺一直遇到問題就把防火牆規則bypass掉,這樣是不是有點鴕鳥心態...
因為一開始測試防火牆也都是用preview mode(偵測不阻擋),前陣子有被DDOS過,都沒有被阻擋,還好有被速率規則Deny掉,所以現在要把高風險的Rule拿掉我是有點抖抖的

但是開發Team同仁回覆這種套件的東西他們也沒辦法改原始碼,然後WordPress又很多會動態生成參數,可能會被系統誤判成SQL Injection攻擊,我就算要白名單放行也不知道怎麼處理

想請教各位有甚麼比較好的方式可以處理嗎?
我爬了一些文章,基本上就是兩種1. 允許規則放行 2. 修改觸發規則的程式碼

主要是系統本身就是對外,WordPress又常會被攻擊,把一些高風險的Rule拿掉我覺得不是那麼恰當,但是這樣User也沒辦法正常使用系統,傷腦筋@@

mathewkl iT邦高手 1 級 ‧ 2025-02-08 12:01:21 檢舉
WP問題太多,應該要考慮丟了而不是一直妥協結果就被駭了...
James iT邦大師 6 級 ‧ 2025-02-08 14:00:36 檢舉
無解,WordPress只能用基本功能。其它外掛漏洞太多了。
DennisLu iT邦好手 1 級 ‧ 2025-02-08 17:44:51 檢舉
通用owasp 個人認為 如果程式都是自己寫的再用。
不然都是別人的,他擋你你只能取消被擋的風險,那好像就沒意義了。
以前初次將owasp掛上自己寫的網頁,剛掛上去的就有些被擋跑不順,就是靠自己修程式修到可以過。
.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
Ray
iT邦大神 1 級 ‧ 2025-02-08 17:15:12

OWASP Policy 屬於通用型的 WAF 規則, 除非你的程式是全部自己刻出來的, 在原始碼階段, 就用白箱掃描工具把程式調整好, 否則, 她很難適應特定現成的 Application 套件去調整, 因為這些套件開發者, 有可能在開發時, 就不理 OWASP 的安全原則, 那一定會衝突.

在開發階段就沒有參考 OWASP 的軟體, 不適合直接套用 OWASP Policy WAF.

建議使用: 專為 WordPress 設計的 WAF 防禦工具, 例如: WordFence, Cloudflare, Bitninja...等, 它們都有針對 WordPress 調整過的 Policy, 可以讓套件順利且安全的執行, 然後外面再套上 Cloud Armor 做網路層和 Web Server/Load Balancer 對 DDoS 的防守, 至於 Application 層 (WordPress) 的誤報, 就讓 Cloud Armor 全部放行不要處理.

我經常同時使用兩三套 WAF 互補長短, 不會從頭到尾只依賴一套而已;
根據不同特性, 有些 WAF 工具放在 Web Server 之外, 有些會建在主機內.
這也更能有效抵抗資安面對的瑞士乳酪理論(Swiss Cheese Model).

WAF 誤報是很常見的事情, 要不就改原始碼, 要不就自己改寫 WAF Policy, 如果你只會 on/off 別人寫好的 Policy, 自己不會重寫的話, 就要多引進其他工具來補強.

0
Gary
iT邦好手 1 級 ‧ 2025-02-10 16:38:57
  1. 先確認是誤判還是真正的攻擊
    針對被阻擋的請求,先檢查 Cloud Armor Log,看具體的 Request URI、Query Parameters,確認是否是 WordPress 內部的正常行為,還是真的有攻擊跡象。
    若有特定的 WordPress 功能(例如發佈文章、插件 API)頻繁被誤判,這些在另外處理。

  2. 調整 WAF 規則,僅針對 WordPress 相關 API
    不一定要直接關掉整個 SQL Injection 規則,可嘗試針對 WordPress 會觸發的 API(如 /wp-admin/、/wp-json/)來放寬規則:

  • 建立 WAF exception rule:針對特定路徑 /wp-admin/* 允許某些規則。
  • 自訂 rule exclusion:僅對某些 args 或 body 參數放行,避免整體關閉規則。
  1. 使用 Google Cloud Armor 的自訂 Rule
    Armor 允許自訂 rule exclusion,可以先讓所有請求進入 preview mode,確認哪些 args(參數)或 header 是被錯誤攔截的,然後針對這些參數加白名單:
    {
    "expression": "request.path.matches('/wp-admin/.*')",
    "action": "ALLOW"
    }
    只對 WordPress 管理介面放行,而不是完全關掉 WAF 規則。

  2. 如 WordPress 套件無法改,考慮 Nginx Reverse Proxy,可以在 Cloud Armor 前加一層 Nginx Reverse Proxy,針對 wp-admin 或 wp-json API 做參數 rewrite,避免參數格式剛好符合 SQL Injection 攻擊模式。對特定 User-Agent 或 Referer(例如:Googlebot、內部 IP)設例外規則。

以上參考

我要發表回答

立即登入回答