iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
DevOps

自架 Windows Server,打造你的專業 WordPress 部落格系列 第 26

WordPress 如何關閉 XML-RPC 服務,避免資安攻擊風險

為了提升 WordPress 站台安全性,我安裝了防火牆及防毒外掛 Wordfence,此外掛提供了基本的站台防護能力,且提供即時惡意攻擊監控,我在即時監控的記錄中發現了有外部駭客正不斷的暴力攻擊 /xmlrpc.php 應用程式。

此駭客來至世界各地的主機,攻擊時間幾乎是 24 小時不停歇,從記錄中發現駭客使用不同的帳號密碼嘗試登入服務。
除了此 xmlrpc.php 的登入攻擊,還有 wp-login.php 也同樣遭遇暴力登入攻擊,如何解決 wp-login.php 暴力登入攻擊可參考另一篇文章: WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊。

這一篇文章將會來教學如何關閉 XML-RPC 服務,避免資安攻擊風險

什麼是 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 呼叫要求。

XML-RPC 服務連線測試

測試網址: https://xmlrpc.eritreo.it/
在 Address 上輸入WordPress 網址的 /xmlrpc.php 後,再自己決定是否輸入帳號密碼測試 XML-RPC 系統回應。

按下「Check」查看系統回應。
若不輸入帳號密碼且 XML-RPC 正常運作中,則會要求再次輸入帳號密碼登入。

若出現其他的錯誤回應,則表示測試連線不成功。

如何關閉 XML-RPC 服務

方法1: 安裝 Disable XML-RPC 外掛

外掛名稱: Disable XML-RPC
官網介紹: https://tw.wordpress.org/plugins/disable-xml-rpc/
在後台「安裝外掛」輸入「Disable XML-RPC」後安裝並啟用外掛。

安裝後並啟用就好了,不需要特別的設定,啟用此外掛之後,它會停用 XML-RPC 的方法,但不會阻擋連線,所以在測試的時候會發現一樣可連線 /xmlrpc.php ,但執行服務呼叫時會發生錯誤。

方法2: 修改 php 檔案,停用 XML-RPC

開啟「外觀 > 佈景主題編輯器」

右側「佈景主題檔案」選擇「functions.php」,在語法內增加指令

add_filter('xmlrpc_enabled', '__return_false');

修改完「更新檔案」。
此修改會停用 XML-RPC 的方法,但不會阻擋連線,所以在測試的時候會發現一樣可連線 /xmlrpc.php ,但執行服務呼叫時會發生錯誤。

方法3: 停用 xmlrpc.php 系統回應 (適用 Apache 架站)

如果你不想安裝外掛,可修改 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 網站服務。

方法4: 停用 xmlrpc.php 系統回應 (適用 IIS 架站)

如果你不想安裝外掛,可修改 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 錯誤。

重點整理

  1. Wordfence 提供防毒及防火牆功能
  2. XML-RPC 服務預設為開啟狀態,卻會遭受惡意攻擊
  3. XML-RPC 提供對外程式呼叫服務
  4. 使用 Disable XML-RPC 外掛或修改原始碼關閉服務
  5. 可直接設定網站伺服器拒絕回應 xmlrpc.php

相關學習文章

WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊
WordPress 強制使用 https 連線 (使用 SSL 憑證)
如何在 WordPress 設定 Google reCAPTCHA 保護(登入、留言、聯絡)表單,免遭惡意攻擊


上一篇
WordPress WPS Hide Login 外掛教學,隱藏登入網址,防止暴力登入攻擊
下一篇
如何在 WordPress 設定 Google reCAPTCHA 保護(登入、留言、聯絡)表單,免遭惡意攻擊
系列文
自架 Windows Server,打造你的專業 WordPress 部落格30

尚未有邦友留言

立即登入留言