沒想到部落格前一陣子被駭客盯上,不斷敲門想要找出漏洞。幸好之前有做基本的防禦,但這次發現還有可改進的空間,於是把整個過程記錄下來分享給大家。

CPU 負載和網路流量不正常

這次會發現被攻擊算是運氣好,因為先前測試 IPFS 時為了方便,直接將 Gateway 綁定網域使用。

因為 Gateway 沒有權限控管,任何人都可以 access,因此大批大陸 request 打過來要求一堆垃圾 CID,使 container CPU 上限被吃滿並佔大量頻寬。

CPU 持續保持 container 所能使用的上限,網路流量最高到接近 5MB/s,同時儲存空間被佔用 1G

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

不正常的持續 CPU loading 和流量,封鎖後隨即下降

當下認為又被攻擊,立刻前往 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;
    }
...
}

延伸閱讀:防範 WordPress 被攻擊的 8 個方法

其他發現

駭客會探測使用者帳戶

駭客會使用合法 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 個方法

J
Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。