暴力猜解攻擊是我們至今為止在互聯網上看到的最古老而常見的攻擊之一。黑客可以通過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掉這個文件可能會讓你的網站功能異常。