合作多年的跨境獨立站,做東歐市場的,最近經歷幾年來最出乎意料也最噁心的CC攻擊,48小時內2次攻擊,總共持續時長約6個小時,網站總共購物車停止服務約1小時20分鐘,第一波防護處理後,攻擊者不死心,強化了BOT的破防能力,但在CDN分流、CDN WAF,站內WAF、Web服務器層以及自定過濾代碼等共同保護下,無法再持續影響網站功能,幾小時後攻擊者放棄。

這個網站多年來一直在CF Pro的保護之下,攻擊者既然能成功突破我們打開的所有PHP/WP WAF規則,能精準地組織起不被攔截的CC請求,能精準地控制好請求的時序分佈於發送頻率,應該是有備而來,應該是技術老辣經驗豐富的人,也有可能是花錢夠得很強的黑客服務。 CF不是完美的,至少20刀每月的這款遠遠不是。

升服

毫無技術含量的防護法,但有效,為服務器加了100%冗餘(相對正常流量,日常跑滿60%),即使攻擊請求仍舊活躍,前台用戶至少能打開結算頁面下單了。 Access Log顯示攻擊IP是CF IP,就是說攻擊者並未繞過CF,而在CF之後的站點即使受此類攻擊,至少CC請求分佈與頻率仍受CF約束,一旦越過紅線就不靈了,也就是說攻擊者的破壞力是有天花板的,它做不到趕盡殺絕。實際上即使沒有CF,一般機房的網關層也會部署一定的防護能力,沒有拿著暴力攻擊是真可以肆意妄為的,另外一個約束是攻擊者自己的時間成本和錢包,很多時候其實是更強的約束:)碰到這種攻擊不是網站末日。

屏蔽到wp-content|wp-includes的非正常請求

到這兩個目錄的正常WP請求應該都是靜態請求(JS|CSS|IMAGE|FONT),如果請求看起來像這樣:/wp-content/whatever 或者/wp-content/whatever.php 只需讓Web服務器檢查一次文件是否存在,不存在就立刻404,而不是走WP的默認URl重寫路徑,若文件不存在則委託給index.php繼續處理,變成一個動態請求最終還是404但昂貴幾百倍。NginxApache都很容易截獲這類請求並迅速以高效的404結束之。

屏蔽到wp-admin的攻擊請求

到這個目錄的正常請求都會是/wp-admin/*.php(index.php常省略),可以同上面wp-content|wp-includes處理,但有更好的辦法,就是在CF創建應用了“Security:I'm Under Attack”的Page Rule,即可對所有/wp-admin訪問開啟recaptch驗證,從而擋住任何自動攻擊。

應用更省資源的動態頁404

對於無法在Web服務器或者CDN WAF快速屏蔽的垃圾動態請求(通常是CC攻擊的大部分),比如/duwxxkg–edx,/product/,要讓WP盡可能快地404,一般主題的默認的WP404頁(像這樣)會顯示header/footer,可能帶來額外數據庫操作,是攻擊者最喜歡也最容易大量自動化的的一類錯誤頁。好在處理起來不難,用鉤子截獲返回404並die()即可。

優化緩存

攻擊者也會自動化大量到正常存在頁面的攻擊請求,常見的一類是針對緩存配置漏洞的(可能最大的緩存漏洞是很多WP站點根本連緩存都懶得開),比如/valid-post-name是零SQL的可緩存頁,但/valid-post-name?foo=duwk732卻是未緩存頁,那麼大量這類隨機變化query string的請求就能消耗大量服務器資源用於數據庫查詢,你要做的是檢查一下你的緩存設置,盡可能多地忽略query param。

另一類是針對正常頁面的POST/PUT請求(comment.php也是常見目標),WAF對這類攻擊很敏感,絕大多數都較難得逞,如果有漏網之魚,可以加自定WAF規則,漏進來得如果很多,也可以藉助HOOK用代碼動態檢測快速500。

REST API 限流

REST API(/wp-json)默認是打開的,因為要處理的請求類型更寬泛,一般WP防火牆規則限制也會寬鬆,遇到攻擊時隔離惡意請求難度大,所以防護開銷也大,但絕大多數WP站點都可以用插件徹底屏蔽或者有選擇地屏蔽端點,或者對匿名訪問完全限流,即可攔住自動攻擊者的絕大部分企圖。

經驗教訓

  • 儘早集成CDN WAF(付費的,別省這個錢),如果這次沒有這一層站外WAF,單憑服務器自身,防護成本可能是幾十倍或更多(時間與金錢)
  • 永遠為服務器留出足夠冗餘,這一點也不浪費,服務器成本也絕不可能是你的主要成本,網站不止要應付下單客戶,還要應付不下單客戶、善意蜘蛛、惡意蜘蛛、玩票蜘蛛,以及像這種有備而來的敵意流量
  • 仔細配置你的緩存插件,把受攻擊狀態考慮在內
  • 提早充分熟悉WAF工具,碰到突發時再去Google可能太慢了,這些工具其實很簡單,核心基於WEB界面的過濾器規則設置大概只需要你半小時時間
  • 早一點使用網站下線監控報警工具,這次是客戶的一個週末加班員工報的錯,響應基本沒有耽誤,並不是每次都能這麼好運氣,自動化的pingdom阿里雲監控長期才可靠

發現錯別字麻煩選中按Ctrl+Enter

文章更新時給我發郵件

類似帖子

1 Comment
內聯反饋
查看所有評論
ben
1 月前

對於我這樣的非技術人員來說(但有了解一些表層技術),看得是驚心動魄啊。 WP叔叔一看就是身經百戰,在這些攻擊面前相當淡定啊。

如果真的認為獨立站是非常重要的數字資產,那麼在安全和防範上就真的要投入和認真對待。