WordPress 的 XMLRPC 权威指南(+ 如何禁用它)
已发表: 2021-04-08网站安全是一件很难以正确方式解决的问题。 特别是与 XML-RPC 相关的安全问题——通常在 WordPress 网站的攻击中被利用。 互联网上有很多提供各种解决方案的信息,但哪些是正确的? 本文将解释如何,那里的解决方案,以及实际上什么是最好的解决方案。 让我们潜入吧!
XMLRPC 比 WordPress 本身更早。 该系统被引入 WordPress 以通过帮助用户离线撰写新帖子然后将其上传到服务器来解决缓慢的互联网连接困境。 只有使用 xmlrpc.php 文件才能将 WordPress 与其他应用程序远程连接。
即使是一些有经验的开发人员也不能完全理解 XMLRPC 以及与之相关的安全威胁。 您管理的站点很有可能有一个活动的 XMLRPC 文件,需要您立即关注,但您只有在了解 XMLRPC 的操作方式以及安全处理它的最佳方式后才能执行有效的行动计划。
尽管 WordPress 现在有自己的 REST API,但 xmlrpc.php 文件仍然存在于核心中,并且默认启用,从而使 WordPress 站点暴露于各种网络攻击。 在本文中,我们将了解此文件的用法、与之相关的漏洞,以及如何在不危及您网站安全的情况下处理此问题。
目录
- 什么是 xmlrpc.php 文件?
- xmlrpc.php 文件对黑客有多大危害?
- 蛮力攻击
- DDoS 攻击
- 跨站端口攻击 (XSPA)
- 阻止 XMLRPC 攻击的无效方法
- 通过完全禁用 XMLRPC
- 为什么安装安全插件实际上会伤害您的网站
- Accelerated Domains 如何为其客户处理 XMLRPC 问题?
- 最后的想法
什么是 xmlrpc.php 文件?
在其最简单的形式中,为跨平台通信创建了 XML-RPC(远程过程调用)。 该协议用于通过使用 HTTP 作为传输和 XML 作为编码器来进行过程调用。 客户端通过向服务器发送 HTTP 请求并接收 HTTP 响应来进行这些调用。 XML-RPC 通过 HTTP 请求调用函数,然后这些函数执行一些操作并发送硬编码的响应作为回报。
让我们将其与 REST API 调用进行比较,以充分理解这个概念。
程序 | RPC | 休息 |
注册 | 发布/注册 | POST/用户 |
读取用户 | GET/readUser?userid=123 | 获取/人/1234 |
REST 使用 URL 参数来识别资源,而 RPC 使用查询参数作为函数参数提供。
WordPress 使用 XMLRPC 允许其用户与他们的站点进行远程交互。 它仍然使用它来为其移动应用程序提供动力并支持 JetPack、WooCommerce 等插件。使用xmlrpc.php
文件有其缺点,但完全禁用它是唯一可行的解决方案吗? 要回答这个问题,我们首先需要查看与之相关的漏洞以及可以避免这些漏洞的解决方案。
xmlrpc.php 文件对黑客有多大危害?
使用 XMLRPC,黑客利用远程过程调用 (RPC) 并调用函数来获取他们想要的数据。 在大多数 WordPress 站点中, xmlrpc.php
文件很容易被追踪,黑客只需发送任意 XML 数据,就可以控制站点运行他们准备好的代码来执行某种类型的攻击。
要了解 WordPress XMLRPC 是如何被入侵的,让我们看看与之相关的最流行的网络攻击。
蛮力攻击
在蛮力攻击中,黑客通过多次登录尝试来猜测正确的用户名和密码。 不幸的是,大量 WordPress 网站使用弱管理员密码或没有添加任何安全层来阻止攻击者。 这些网站很容易受到这种类型的攻击。
其他人使用强密码,也有适当的安全机制,例如 reCaptcha,以及自动 IP 阻止,可有效抵御暴力攻击,但如果黑客决定使用 XMLRPC; 她甚至不需要访问 WordPress 管理员。
来自 Kali Linux 的一个非常常见的工具,WPSCAN 用于枚举所有用户名,一旦完成,黑客就会使用xmlrpc.php
文件通过向受害者站点发送以下 HTTP 请求来暴力破解密码。
POST /xmlrpc.php HTTP/1.1
User-Agent: Fiddler
Host: www.example.com
Content-Length: 164
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
在上面的示例中,黑客可以发送数千个变体,直到他检索到正确的密码。
针对上述请求返回以下响应。 响应包含错误代码和一条明确的消息,说明尝试的用户名和密码不正确。 这是一个明确的指示,告诉黑客再试一次,直到匹配正确的密码。
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 26 May 2019 13:30:17 GMT
Content-Type: text/xml; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.1.21
Cache-Control: private, must-revalidate
Expires: Sun, 02 Jun 2019 13:30:17 GMT
Content-Length: 403
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>403</int></value>
</member>
<member>
<name>faultString</name>
<value><string>Incorrect username or password.</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>
响应返回 HTTP 200 代码以及提供的用户名和密码不正确的消息。 通过 XMLRPC 通道,黑客不必担心 reCaptchas 或限制登录尝试插件。 她可以继续运行变体,直到检索到正确的密码。
注意:蛮力攻击是资源密集型的,也会导致性能问题。 试错过程循环运行更长的时间,这会使您的服务器忙于为实际访问者提供服务。 这种不必要的资源消耗会导致服务器消耗更多功率。
DDoS 攻击
分布式拒绝服务 (DDoS) 是最致命的网络攻击之一,它可以通过成百上千的并发请求攻击服务器来使服务器瘫痪。 黑客使用 WordPress 的 pingback 功能以及 xmlrpc.php 文件来执行此类攻击。
理想情况下,黑客会针对可能被多次攻击且需要更长响应时间的端点或页面。 这样,单次点击就可以对服务器资源产生最大的影响,在我们的例子中,XMLRPC 很好地为黑客提供了暴露这些端点的服务。
几个已经受到攻击的 WordPress 站点被用来执行 pingback.ping 方法来针对单个受害者。 压倒性的 HTTP GET 和 POST 请求阻塞了常规流量并最终导致服务器崩溃。
首先,黑客通过发送以下请求来检查 xmlrpc.php 文件是否已启用。
POST /xmlrpc.php HTTP/1.1
Host: withinsecurity.com
Connection: keep-alive
Content-Length: 175
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>demo.sayHello</methodName>
<params>
<param>
<value>admin</value>
</param>
</params>
</methodCall>
一旦确认在目标网站上启用了 XMLRPC,攻击者就会开始使用被利用站点的网络攻击它,向受害者站点发送多个 pingback 请求。 这可以从多个主机自动执行,并用于对受害者站点进行大规模 DDoS 攻击。
POST /xmlrpc.php HTTP/1.1
Host: withinsecurity.com
Connection: keep-alive
Content-Length: 293
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>http://173.244.58.36/</string></value>
</param>
<param>
<value><string>https://example.com/blog/how-to-make-a-salad</string></value>
</param>
</params>
</methodCall>
跨站端口攻击 (XSPA)
跨站点端口攻击 (XSPA) 非常常见,其中黑客注入恶意脚本以检索有关 TCP 端口和 IP 地址的信息。 对于 WordPress,XMLRPC 与其 pingback 机制一起用于绕过任何 IP 掩码,例如 Cloudflare 等基本 WAF。
在 XSPA 攻击中,黑客使用 pingback.ping 方法对目标网站上的帖子进行 pingback,然后发送 IP 地址作为响应。 黑客使用嗅探器创建端点以发送 pingback 和博客文章的实时 URL。
黑客从她的服务器发送以下请求。
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>
如果响应包含 faultCode 且值大于 0,则表示端口已打开,您可以开始直接发送 HTTP 数据包。
阻止 XMLRPC 攻击的无效方法
到目前为止,我们已经确定 xmlrpc.php 文件容易受到一些严重的网络攻击,例如 DDoS、Bruteforce 和跨站端口攻击,因此,正确处理它以阻止这些攻击至关重要.
通过完全删除 XMLRPC
您可以简单地删除 XMLRPC 文件,该文件将使您的服务器开始向任何试图访问它的人抛出 404 错误。 此解决方案的缺点是每次更新 WordPress 时都会重新创建文件。
通过完全禁用 XMLRPC
另一个更可行的选择是禁用xmlrpc.php
文件。 您只需在.htaccess
文件中添加代码块即可完成此操作。 确保在 WordPress 添加的永不更改的.htaccess
规则之前执行此操作。
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
这将为使用它的每个应用程序或服务禁用xmlrpc.php
文件。 如果您仍希望通过 XMLRPC 访问您的 WordPress 站点,您可以将某个 IP 地址列入白名单。 为此,您需要添加以下命令:
<Files xmlrpc.php>
<RequireAny>
Require ip 1.1.1.2
Require ip 2001:db8::/32
</RequireAny>
</Files>
优点
- 消除 XMLRPC 在网络攻击中被滥用的风险。
- 长期性能优势和服务器资源节省。
缺点
- 禁用 XMLRPC 与禁用使用此版本远程访问的应用程序的远程访问相同。 这意味着 Jetpack、WP 移动应用程序或任何其他通过 XMLRPC 与您的 WordPress 站点连接的解决方案无法再与您的站点连接。
- 自定义应用程序的旧代码也可能不起作用。
为什么安装安全插件实际上会伤害您的网站
WordPress 用户经常依赖插件来获得任何所需的特性或功能,而没有过多考虑它们对网站性能的影响。 有几个 WordPress 安全插件承诺保护您的网站免受与 XMLRPC 相关的安全问题的影响,但实际上,它们对您的网站造成的伤害更大。
以下是使用插件保护您的网站不是最佳选择的一些原因。
- 安全插件仅在应用程序级别有效,并不能保护您的服务器免受攻击。
- 他们在您的网站上添加了不必要的代码,这会降低其性能并增加首字节 (TTFB) 的时间。
- 其中一些插件弊大于利,被黑客用来为您的网站创建后门。
- 这些插件需要频繁的管理,这会增加更多的工作量。
从上面的评估来看,没有一个选项可以提供处理 XMLRPC 安全问题的理想解决方案。 这将我们带到了加速域。 一种服务,旨在解决复杂的安全相关问题等等。 让我们看看 Accelerated Domains 如何为您有效解决 XMLRPC 问题。
Accelerated Domains 如何为其客户处理 XMLRPC 问题?
Accelerated Domains 以最有效的方式解决了复杂的性能、安全性和可扩展性问题。 Accelerated Domains 提供企业级托管安全性,可阻止任何类型的网络攻击,包括与 XMLRPC 相关的网络攻击。
Accelerated Domains 的智能安全引擎位于服务器前面,可过滤近 40% 的所有 HTTP 流量。 它通过连续数据馈送和 Servebolt 的实践知识和流量分析提供支持的智能启发式功能,甚至可以在时间线的早期检测到最复杂的网络攻击。 Accelerated Domains 在不以任何方式降低您网站的性能的情况下发挥其魔力。 事实上,它加速了它。
Accelerated Domains 主动安全引擎可自动保护您的网站免受 DDoS 攻击。 凭借接近 60 Tbps 的网络容量,它能够抵御互联网上一些最大规模的 DDoS 攻击。 同样,它通过自动限速功能提供了一种有效的防御机制来抵御暴力攻击,其中识别并限制从单一来源生成的请求数量以防止恶意活动。
优点
- Accelerated Domains 缓解了与 XMLRPC 相关的大多数安全漏洞,因此无需禁用它。
- 允许用户继续使用插件,如 Jetpack、WooCommerce 应用程序和其他依赖于 xmlrpc.php 文件的工具。
- 在任何域上轻松集成,因此无需修改
.htaccess
文件。 - 无需安装额外的插件。
缺点
- 它没有。
最后的想法
网络攻击日益复杂,作为网站管理员和企业主,了解它们并了解遇到它们的工具对您来说至关重要。 大多数攻击都是通过主动方法避免的,例如持续监控和更新软件,或者通过添加像 Accelerated Domains 这样的工具来自动完成所有这些操作。 启用后,Accelerated Domains 会智能地过滤流量并在需要时采取必要的措施来保护您的源服务器和您的网站免受网络攻击。