


沒想到部落格前一陣子被駭客盯上,不斷敲門想要找出漏洞。幸好之前有做基本的防禦,但這次發現還有可改進的空間,於是把整個過程記錄下來分享給大家。
CPU 負載和網路流量不正常
這次會發現被攻擊算是運氣好,因為先前測試 IPFS 時為了方便,直接將 Gateway 綁定網域使用。
因為 Gateway 沒有權限控管,任何人都可以 access,因此大批大陸 request 打過來要求一堆垃圾 CID,使 container CPU 上限被吃滿並佔大量頻寬。



解決後時常會檢查系統狀況,因而再度發現 WordPress container CPU 負載保持異常一段時間



當下認為又被攻擊,立刻前往 CloudFlare 打開 Under Attack 模式先緩解,再來檢查問題。



檢查 log
使用以下指令列出最近 log
docker logs -f <wp_container>
發現有大量連續 post request 進來



全部都是 //xmlrpc.php
,猜測正在透過 RPC api 暴力破解密碼。但記得防火牆有設定阻擋 xmlrpc.php
才對,於是前往 CloudFlare 檢查設定。
修正防火牆設定
檢查後才發現原來是自己犯蠢,防火牆規則的網址值前面多了一個空格,難怪阻擋不到



nginx 補強設定
一般根本不會用 RPC api,而 api public 風險又太高,乾脆順手從 nginx 直接阻擋,避免萬一
server {
...
location /xmlrpc.php {
return 404;
}
...
}
其他發現
駭客會探測使用者帳戶
駭客會使用合法 api 遍歷 WordPress 裡的使用者,同時透過 response 裡的內容去猜測帳戶名稱




透過 /?author=1
或 /wp-json/wp/v2/users/
等 API,駭客可以寫自動化腳本,從裡面汲取所需資訊,如 user id、name 等等可供猜測的資料,後續再透過 RPC api 暴力攻擊,增加成功度。



/wp-json/wp/v2/users
API 的 response,除了能知道 id、name、帳號數目,還能知道 yoast 的版本駭客會用 double slash 網址起頭
發現被拿來攻擊的 API 開頭大部分是 double slash




這肯定不是意外,推測可能有些防火牆比較笨,設定阻擋 /wp-json
路徑,卻會放過 //wp-json
等 request,雖然最後他們都是一樣的。因此設定防火牆要注意其特性,或者使用 contains
等邏輯,避免被鑽漏洞。
總結
透過這次經驗也旁側敲擊到不少駭客的手法,趕緊增加防火牆規則強度,同時也了解到,真的有不少人在找目標攻擊,就算目標再小也是一樣,一定要小心!詳細預防方法請看 防範 WordPress 被攻擊的 8 個方法