导语:受感染的wordpress网站僵尸网络攻击WordPress网站。
Defiant威胁情报团队最近发现一起针对WordPress网站的有组织的暴力破解攻击活动。攻击者创建了一个由受感染的WordPress网站组成的僵尸网络来执行攻击,攻击中尝试通过XML-RPC认证来访问其他WordPress网站的特权账户。Wordfence过去30天共拦截到与该攻击活动相关的认证有超过500万次。
攻击者用一组4个C2服务器来发送请求给14000个俄罗斯代理提供商best-proxies[.]ru提供的代理服务器。攻击者用这些代理使C2流量匿名化。请求传递给代理服务器后,会被发送给超过20000个被感染的WordPress网站。这些网站都运行一个攻击WordPress网站的攻击脚本。攻击链如下图所示:
下面介绍攻击链的详细情况:
暴力破解攻击脚本
研究人员分析发现执行暴力破解攻击的IP几乎都与主流的web托管提供商相关,而且攻击的都是WordPress /xmlrpc.php的XML-RPC接口。研究人员还注意到与这些请求匹配的User-Agent字符串与wp-iphone和wp-android与XML-RPC接口交互的方式是匹配的。因为这些应用都会本地保存凭证,因此如果有大量的登陆失败记录属于异常情况。研究人员共发现有超过20000个WordPress网站攻击其他的WordPress网站。
WordPress攻击WordPress
攻击脚本首先会攻击WordPress网站的XML-RPC接口来测试username/password的组合,对每个请求随机伪造User-Agent字符串:
暴力破解脚本会通过POST来获取C2输入来定义执行设置的字符串,比如目标域名的JSON数组和本地wordlist(词典):
与攻击活动相关的词典包含一小部分常见密码集。脚本还可以根据常见的模式来动态生成合适的密码。常见的模式有:
%domainPattern% %userName% %userName%1 %userName%123 %userName%2018 %userName%2017 %userName%2016
换句话说,如果暴力破解脚本尝试以用户alice来登陆example.com,就会生成alice1, alice2018这样的密码。但这种技术在一些给定的网站中并不会成功,因此在大规模尝试的过程中就会出现大规模失败。
Multicall组呼功能
WordPress的XML-RPC接口在2015年的暴力破解攻击中就被关注过,那时候利用组合功能的攻击还非常流行。使用接口攻击者可以在一个请求中发送大量的user/password组合。WordPress会测试每个组合,然后返回成功/错误的列表。因为攻击者只需要发送一个凭证列表然后等待结果就可以了,因此这使暴力破解攻击大规模应用时变得更加简单。
攻击活动中的暴力破解脚本默认会执行组呼攻击。下面的代码段可以看出,在给定用户名和一些密码后,函数会组合一个含有所有要尝试的密码的XML对象。
使用指令来执行暴力破解攻击的C2系统还可以选择性的定义$startPass和$endPassvariables,这使暴力破解脚本只尝试一个给定列表的密码子集,而不是完整的密码集,这可以节省时间。
Multicall攻击不再有效
许多WordPress用户可能并没有意识到XML组呼攻击不再有效了。因为WordPress 4.4中引入了wp-includes/class-wp-xmlrpc-server.php的补丁。引入该补丁后,如果一个用户在目标网站上的XML-RFC尝试登陆请求失败了,那么相同请求中随后的尝试都会失败,即使凭证是有效的。
WordPress 4.4的XML-RPC补丁并没有发布记录。但是如果WordPress版本在4.3之前,该攻击方法还是有效的。攻击者应该也是意识到了该补丁,研究人员工防火墙拦截到的请求中都定义了$startPass和$endPass参数,并且值也是一样的。也就是说攻击脚本每次只尝试一个用户名和密码的组合就结束。
基础设施
C2服务器
攻击链在攻击者和目标站点之间使用了多抽象层。暴力破解攻击是由受感染的WordPress网络执行的,受感染的WordPress站点是通过代理服务器网络来接收指令的,所以很难追踪背后的中心C2服务器。
但研究人员发现攻击者用于暴力破解的脚本存在一些错误。每个脚本所用的词典都保存在同一受感染的WordPress站点上,其中含有重新生成字典的函数:
checkWordsList()函数会传递一个$path参数,该参数定义了含有字典的远程地址。如果没有本地字典,脚本就会从给定的地址下载。路径是从代理服务器发给暴力破解脚本的POST数据的剩余部分。研究人员拦截到的请求中包含有路径和IP地址。
IP指向一个含有登录页的服务器:
C2服务器中的简单登陆页
C2接口访问
对C2的进一步分析显示,对这些系统的认证并不是强制的。尝试访问C2接口的页面会触发一个302错误重定向到登陆页,但应用在重定向的时候也会发送数据。
到C2服务器主页的cURL请求
研究人员用BurpSuite创建了一个忽略登陆重定向的代理规则,这样就可以浏览C2应用的接口了。该接口包含大量特征,包括访问含有暴力破解脚本的受感染的WordPress僵尸网站的能力。
C2接口显示攻击者导出的日志列表
Best-Proxies.ru
研究人员通过访问C2服务器接口发现这些服务器和代理服务器有一定的相关性。每个服务器在webroot中都含有proxy.txt文件。该文件中有含有上万条SOCKS代理地址、IP地址和端口的文件。这些IP地址与之前发现的代理服务器的地址是重合的,也就是说C2在攻击时根据该文件随着选择代理,研究人员共发现14807个代理服务器。
但是也有C2服务器的proxy.txt文件中不含有代理地址,而是一个HTML文件。该文件是一个503服务不可达的错误页面副本,其中含有一个到api.best-proxies.ru的链接。文件也是俄语的,翻译过来就是“认证错误,key的有效期已过,请购买新key”。
C2服务器错误文件截图显示,攻击者没有更新用来访问代理列表的API key。
如何应对
为了防止WordPress网站成为暴力破解攻击的受害者,管理员应该对错误登陆进行限制和锁定等策略。