暴力猜解攻击是我们至今为止在互联网上看到的最古老而常见的攻击之一。黑客可以通过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 – – [07/Oct/2015:23:54:12 -0400] “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掉这个文件可能会让你的网站功能异常。