為了提升 WordPress 站台安全性,我安裝了防火牆及防毒外掛 Wordfence,此外掛提供了基本的站台防護能力,且提供即時惡意攻擊監控,我在即時監控的記錄中發現了有外部駭客正不斷的暴力攻擊 /xmlrpc.php 應用程式。
此駭客來至世界各地的主機,攻擊時間幾乎是 24 小時不停歇,從記錄中發現駭客使用不同的帳號密碼嘗試登入服務。
除了此 xmlrpc.php 的登入攻擊,還有 wp-login.php 也同樣遭遇暴力登入攻擊,如何解決 wp-login.php 暴力登入攻擊可參考另一篇文章: WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊。
這一篇文章將會來教學如何關閉 XML-RPC 服務,避免資安攻擊風險
XML-RPC 是 WordPress 提供對外遠端程式呼叫 (Remote Procedure Call ; RPC) 的 API 接口,可提供外部系統透過 XML-RPC API 執行遠端發文管理。
常用外部服務例如 Blogger, metaWeblog, Movable Type 或是 Pingback 等等,可與 XML-RPC 串接服務。
XML-RPC 使用 http 協定作為傳送機制,串接頁面為 /xmlrpc.php,在 3.5 版開始,預設會啟用此功能。
WordPress 預設開啟對外 API 服務,同時也潛藏著資安風險,在 2014 年曾經發生過一次大規模的攻擊事件,是由 XML-RPC 漏洞所引起,如果你的網站並沒有使用 XML-RPC 服務,建議關閉 XML-RPC 服務以避免資安風險。
如果用網址打開 WordPress 的 /xmlrpc.php 頁面,會顯示此回應訊息。
此訊息為 XML-RPC 服務正啟用,但只接受 POST 呼叫要求。
測試網址: https://xmlrpc.eritreo.it/
在 Address 上輸入WordPress 網址的 /xmlrpc.php 後,再自己決定是否輸入帳號密碼測試 XML-RPC 系統回應。
按下「Check」查看系統回應。
若不輸入帳號密碼且 XML-RPC 正常運作中,則會要求再次輸入帳號密碼登入。
若出現其他的錯誤回應,則表示測試連線不成功。
外掛名稱: Disable XML-RPC
官網介紹: https://tw.wordpress.org/plugins/disable-xml-rpc/
在後台「安裝外掛」輸入「Disable XML-RPC」後安裝並啟用外掛。
安裝後並啟用就好了,不需要特別的設定,啟用此外掛之後,它會停用 XML-RPC 的方法,但不會阻擋連線,所以在測試的時候會發現一樣可連線 /xmlrpc.php ,但執行服務呼叫時會發生錯誤。
開啟「外觀 > 佈景主題編輯器」
右側「佈景主題檔案」選擇「functions.php」,在語法內增加指令
add_filter('xmlrpc_enabled', '__return_false');
修改完「更新檔案」。
此修改會停用 XML-RPC 的方法,但不會阻擋連線,所以在測試的時候會發現一樣可連線 /xmlrpc.php ,但執行服務呼叫時會發生錯誤。
如果你不想安裝外掛,可修改 Apache 站台底下 WordPress 根目錄的 .htaccess 文件,設定網站拒絕回應 xmlrpc.php 頁面
在文件底部增加此語法
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 127.0.0.1
</Files>
語法中 allow from 127.0.0.1 指的是允許本機 IP 可接受連線,你也可以改為你可連線的 IP,若不會使用 XML-RPC可以刪除這一行。
設定完成記錄重啟 Apache 網站服務。
如果你不想安裝外掛,可修改 IIS 站台底下 WordPress 根目錄的 web.config 文件,設定網站拒絕回應 xmlrpc.php 頁面
在文件內增加此語法,並放在 範圍內
<location path="xmlrpc.php">
<system.webServer>
<security>
<ipSecurity allowUnlisted="false">
<add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" />
</ipSecurity>
</security>
</system.webServer>
</location>
語法中 指的是允許本機 IP 可接受連線,你也可以改為你可連線的 IP,若不會使用 XML-RPC可以刪除這一行。
完整語法參考
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<location path="xmlrpc.php">
<system.webServer>
<security>
<ipSecurity allowUnlisted="false">
<add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" />
</ipSecurity>
</security>
</system.webServer>
</location>
</configuration>
設定完成記錄重啟 IIS 網站服務。
修改完後再執行網址測試,就會回應 500 錯誤。
使用 XML-RPC 服務測試時,也會得到 500 錯誤。
WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊
WordPress 強制使用 https 連線 (使用 SSL 憑證)
如何在 WordPress 設定 Google reCAPTCHA 保護(登入、留言、聯絡)表單,免遭惡意攻擊