XML-RPC放大攻击:针对WordPress的“暴力美学”
暴力猜解攻击是我们至今为止在互联网上看到的最古老而常见的攻击之一。黑客可以通过SSH和FTP协议,暴力猜解攻击你的WEB服务器。
传统暴力猜解攻击
这些攻击一般都不是很复杂,而且理论上是比较容易遏制的。但是,它们仍然拥有存在的价值,因为人们并不习惯采用强密码,而且不是每个人都拥有良好的登录习惯。
然而可惜的是,暴力猜解攻击有个致命的弱点。通常来说,如果黑客需要尝试500个不同的密码,他将尝试发送500次不同的请求到服务器上。通过限制登录次数,可以在一定层面上遏制暴力猜解攻击。
放大型暴力猜解攻击
黑客可以减少攻击次数么,他们能否一次请求,就能进行多次登陆尝试?请想象一下,如果你一次攻击请求能尝试500个密码,那么登录次数限制神马的,不都是战斗力5的渣渣了?
这种手法有点类似于咱们以前的DDoS放大攻击,一个核心指挥服务器,能够利用DNS或者NTP协议回应进行放大攻击,增加原本攻击强度50-100倍。无论是任何类型的放大型攻击,都将让黑客倍加受益。
通过Wordpress XML-RPC进行暴力猜解放大攻击
XML-RPC的隐藏特性之一,则是你可以使用system.multicall方法,在单个请求中进行多次尝试,这是非常有用的。它允许应用程序通过一条HTTP请求,执行多个命令。
XML-RPC是一个通过HTTP方法进行远程调用的,非常简单易用的玩意儿。它支持Perl、Java、Python、C、C++、PHP,以及许多其他编程语言。Wordpress和Drupal,以及许多其他内容管理系统都支持XML-RPC。
当然,任何好的技术都是双刃剑。在XML-RPC技术被普通程序开发者所喜爱的同时,也成了黑客手中的利器。
我们跟踪有关XML-RPC的攻击好几个星期了,第一次在网络上发现案例是在2015年9月10日,类似的攻击有愈演愈烈的趋势。与以前黑客热衷于wp-login.php不同,这个文件很容易被登录保护,或者.htaccess给ban掉。黑客尝试利用system.multicall方法,试图在一个请求里包含数百次攻击。你可以想象一下,你在查看日志的时候,一个条目就包含如此多尝试的样子。
194.150.168.95 – – “POST /xmlrpc.php HTTP/1.1″ 200 14204 “-” “Mozilla/5.0 (Windows; U; WinNT4.0; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1
光看这个,你看的出来这是调用了数百次密码猜解的攻击么?黑客可以通过它们绕过安全检测,进行暴力尝试。
wp.getCategories方法攻击
我们在网络上还发现了wp.getCategories方法,这要求用户名和密码,请求效果如下:
<methodCall><methodName>system.multicall</methodName>
<member><name>methodName</name><value><string>wp.getCategories</string></value></member>
<member><name>params</name><value><array><data>
<value><string></string></value><value><string>admin</string></value><value><string>demo123</string></value>
..
<member><name>methodName</name><value><string>wp.getCategories</string></value></member>
<member><name>params</name><value><array><data>
<value><string>admin</string></value>
<value><string>site.com</string></value>
…
WordPress(xmlrpc)会响应是否有成功的用户名密码组合。
在上面这个例子中,黑客尝试了admin/demo123和admin/site.com的组合,响应包如下:
[{‘faultCode': 403, ‘faultString': ‘Incorrect username or password.‘}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.‘}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.’}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.’}, {‘faultCode': 403, ‘faultString': …
[[{‘url': ‘http://site.com/wordpress/’, ‘isAdmin': True, ‘blogid': ‘1’, ‘xmlrpc': ‘http://site.com/wordpress/xmlrpc.php’, ‘blogName': ‘wpxxx’}]]]
这里我们使用的是wp.getCategories方法进行攻击实验,其他需要认证的方法也可以这样用。所以ban掉wp.getCategories对阻止同类攻击,并没有太大用处。下面是需要身份认证的方法列表:
wp.getUsersBlogs, wp.newPost, wp.editPost, wp.deletePost, wp.getPost, wp.getPosts, wp.newTerm, wp.editTerm, wp.deleteTerm, wp.getTerm, wp.getTerms, wp.getTaxonomy, wp.getTaxonomies, wp.getUser, wp.getUsers, wp.getProfile, wp.editProfile, wp.getPage, wp.getPages, wp.newPage, wp.deletePage, wp.editPage, wp.getPageList, wp.getAuthors, wp.getTags, wp.newCategory, wp.deleteCategory, wp.suggestCategories, wp.getComment, wp.getComments, wp.deleteComment, wp.editComment, wp.newComment, wp.getCommentStatusList, wp.getCommentCount, wp.getPostStatusList, wp.getPageStatusList, wp.getPageTemplates, wp.getOptions, wp.setOptions, wp.getMediaItem, wp.getMediaLibrary, wp.getPostFormats, wp.getPostType, wp.getPostTypes, wp.getRevisions, wp.restoreRevision, blogger.getUsersBlogs, blogger.getUserInfo, blogger.getPost, blogger.getRecentPosts, blogger.newPost, blogger.editPost, blogger.deletePost, mw.newPost, mw.editPost, mw.getPost, mw.getRecentPosts, mw.getCategories, mw.newMediaObject, mt.getRecentPostTitles, mt.getPostCategories, mt.setPostCategories
下面的图是针对XML-RPC的system.multicall方法,专门用于暴力猜解攻击的样例。每个请求都可以承载数百次暴力猜解攻击,图中的数字能让你欣赏感受下暴力美学:
如果你是一名Wordpress站长,并且没有使用依赖xmlrpc.php文件的插件,你可以重命名或者删除这个文件来防御攻击。但如果你正在使用如JetPack之类的插件,ban掉这个文件可能会让你的网站功能异常。
*参考来源:SU、TA,编译/dawner,转载来自FreeBuf黑客与极客(FreeBuf.COM)
Re: XML-RPC放大攻击:针对WordPress的“暴力美学”
这个分析很透彻,确实把XML-RPC原本用于提升效率的system.multicall变成了“批量爆破器”。传统登录限制在单请求数百次尝试面前基本失效,日志里还看不出异常,隐蔽性很强。感谢楼主分享具体案例和攻击手法,这对WordPress站长来说是个重要的提醒——光封wp-login.php已经不够了,xmlrpc.php也需要重点防护(比如禁用不需要的XML-RPC方法、加访问限制、或用插件拦截multicall)。期待后续能分享一些更实际的防御方案。Re: XML-RPC放大攻击:针对WordPress的“暴力美学”
这个分析很透彻,把XML-RPC的“双刃剑”特性讲得很清楚。之前只知道wp-login.php容易被暴力破解,没想到xmlrpc.php配合system.multicall可以一次请求试几百个密码,确实有点“暴力美学”的味道。日志里只显示一条POST记录,排查起来难度也大。 想问下楼主,针对这种攻击,除了插件层面禁用xmlrpc.php或者加.htaccess限制之外,有没有比较高效的服务器层面或者nginx规则能拦截掉这类批量请求?我目前看到一些方案是靠请求体大小或内容特征来过滤,但不确定误伤率是否可控。Re: XML-RPC放大攻击:针对WordPress的“暴力美学”
感谢楼主分享这个很有价值的漏洞情报。XML-RPC 的 `system.multicall` 确实是个容易被忽视的攻击面,把一个请求打包数百次尝试,不仅绕过了常规的登录频率限制,还给日志分析增加了不少难度。 想请教一下:除了完全禁用 `xmlrpc.php`(比如用 .htaccess 或插件)之外,有没有更细致的缓解方案?例如能否在服务器层面(Nginx/Apache)对 `system.multicall` 中的调用次数做限制,或者只允许白名单 IP 访问这个接口?另外,WordPress 官方针对这类放大攻击是否有过补丁或安全更新?
页:
[1]