Memcached DRDoS攻擊趨勢
基於Memcached服務的反射攻擊,由於其 5萬倍的反射比例,從一開始出現就成為DDoS攻擊界的「新寵」。 2018年2月28日 , GitHub遭受了1.35T的Memcached DRDoS攻擊。目前基於安全專家以及相關機構的努力,可利用的反射源已經逐步減少。攻擊者也逐步更新自己的攻擊手段躲避審查,本文主要介紹基於Memcached的DDoS攻擊趨勢以及一些新的Memcached DRDoS的攻擊手法。
攻擊趨勢
從2月25號開始,Memcached DRDoS攻擊數量逐漸增多,3月初,Memcached DRDoS攻擊只佔總體攻擊的5%,三月中旬以後,逐漸超過10%,現在穩定在10%-20%之間波動,最近一周增長到30%。
放大的魔力
5萬倍
CF在2月份發布文章稱,檢測到發送15位元組的包,收到750k位元組的包。從而計算出反射倍數是51200倍。
CF提出的5萬倍僅僅是按響應數據與請求數據的比例計算得到的,但DDoS攻擊消耗的是網路帶寬資源,所以真實的放大倍數必須考慮數據包的實際網路數據流長度。
在IEEE 802.3注1中,對乙太網數據包有明確的規定:
根據802.3規範,一個數據包在網路上傳播,佔用的長度範圍是84~1542。上述發送15位元組,實際網路上數據包佔有應為84位元組,接收1400位元組,實際網路上數據包佔有應為1466位元組。因為一個完整UDP的包,發送到網路中的報文實際長度會包含協議頭,包括14(以太頭) + 20(IP頭)+ 8(UDP頭)+ 4(FCS)+ 20(偵間隙) = 66位元組。
按照CF的檢測到的數據重新計算 :
750位元組產生的網路流量達到:750 * 1024 / 1400 * 1466 = 804205.7
實際反射倍數則是:804205 / 84 = 9573.9 倍。
可見計算方法不同,放大倍數差距如此之大,從原來的5萬倍變為不到1萬倍。但不管怎麼樣的差距,都不會影響Memcached反射攻擊成為DRDoS的TOP 1。
當然事實上,即使如何嚴謹的計算放大倍數,此類攻擊還是有進一步放大的案例。
增大反射倍數
Memcached 的value默認設置的最大長度是1Mbyte。單個get a請求後可實現的反射倍數達到: 1024 * 1024 / 1400 * 1466 / 84 = 13071.5倍。
雖然直接調大VALUE的值放大倍數還不足2萬倍,但通過一些攻擊技巧還是能實現反射倍數達到十幾萬倍。
我們最近捕獲到的攻擊,就使用了一種技巧實現了這樣的放大效果。
上圖所述的攻擊者在一個請求中,使用了多次查詢,通過在一個UDP包中執行多條get指令,Memcached伺服器返回大量的多條數據包,由於UDP包本身的長度要佔用66位元組,通過這樣的節省UDP包發送條數的手法,達到比之前單條發送要放大更多倍的效果。
上述攻擊實例中,攻擊者使用70個Memcached的GET指令拼裝到一個UDP包中,發送包總長度844位元組(Wireshark沒有計算偵間隙和FCS,所以是820 + 24 = 844)。
該指令獲取的VALUE值的長度達到304800:
實現反射倍數:304800 * 70 / 1400 * 1466 / 844 = 26471.4倍。
理論上這不是最高的放大倍數。
當GET指令的個數增加時,反射比例還會增大,加上優化payload,最終能實現十幾萬倍的反射效果:
1)將get VcoOw
替換為get a
,在一個UDP包中構造更多的請求指令,考慮MTU 1500,IP頭20,UDP頭8,Memcache協議頭8,則指令個數可達:(1500 - 20 - 8 - 8) / 7 = 209.14,安全計算取205個指令。
2)發送包長:66 + 8 + 7 * 205 = 1509位元組,
3)每個value值為1024 * 1024位元組,
則總體反射倍數:1024 * 1024 * 205 / 1400 * 1466 / 1509 = 149166.2倍 !
實際的環境中,反射比例要小的多。一方面,是由於Memcached伺服器的性能決定,另一方面UDP存在一定比例的丟包,甚至還有空響應的。
放大的意外
在對捕獲的攻擊數據分析中,有一定比例的返回包只有一個END數據
這是由於GET 指令的KEY不存在。一個820位元組的發送包能產生70個60位元組UDP小包。
反射倍數:(84 * 70) / 844 = 6.97倍。
雖然按帶寬計算的反射比例較低,但由於路由設備以及伺服器對小包處理性能較弱,因而大量的小包也會對網路也會產生較大的影響。
針對部分採樣數據的統計,END小包與大包比例如下:
反射源分析
對採樣的反射源產生的攻擊包進行聚類匯總。中國佔比最高,美國,俄羅斯緊隨其後。
國內分布的狀況,杭州的反射源產生的攻擊包最多。抑制反射源濫用網路,需要IDC、雲平台等積極處理。
抽樣分析反射源使用的Memcache 版本,1.4.15使用佔比最多:
對攻擊者使用Memcached DRDoS的攻擊目標進行分析,宿遷地區遭受的攻擊最多:
攻擊手法對比
之前曝出的攻擊POC C 版本注2和Python版本注3,其中C版本主要使用了Memcached服務的stats命令(10-20倍)。Python版本使用了Memcached服務的set和get命令:
memcpy((void*)udph+sizeof(struct udphdr), "x00x01x00x00x00x01x00x00stats
", 15);
dataset="set injected 0 3600",len(data)+1,"
",data,"
get injected
"
而我們這次捕獲到的變種使用了多次指令組合到一個UDP包中發送。
Payload如下:
Data1="x00x00x00x00x00x01x00x00stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
stats
…"
Data2 = "x00x00x00x00x00x01x00x00get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
get Vco0W
…"
根據攻擊者使用的反射資源,SET設置的key和value參數的相似性進行分類。攻擊者更多採用get XXX 相關的指令實現更大的反射倍數。
防範
1)在Memcached伺服器或者其上聯的網路設備上配置防火牆策略,僅允許授權的業務IP地址訪問Memcached伺服器,攔截非法的訪問。
2)更改Memcached服務的監聽埠為11211之外的其他大埠,避免針對默認埠的惡意利用。
3)除非特殊必要,不開啟Memcached UDP服務,最新版本的Memcached已經默認不開啟UDP服務。
4)升級到最新的Memcached軟體版本,配置啟用SASL認證等許可權控制策略(在編譯安裝Memcached程序時添加-enable-sasl選項,並且在啟動Memcached服務程序時添加-S參數,啟用SASL認證機制以提升Memcached的安全性)。
結語
UDP協議以其無阻塞、收發快為開發者所喜歡,較TCP更靈活,對一些實時交互的場景更具有優勢,相信越來越多的服務會選擇UDP協議。而DRDoS攻擊正是利用UDP協議這一鬆散快速響應的特性,一次次的瞄準更大範圍的開放服務來實施攻擊,讓目標防不勝防。
Memcached反射攻擊可高達十幾萬倍的反射能力,不僅對攻擊目標造成極大的損害,也會大大增加反射源的負載而影響自有業務運行。黑客無處不在,防禦仍需專業,預防則更依賴服務提供者、IDC和雲平台等多方面加強安全意識。
注釋:
注1:網路偵間隙
https://en.wikipedia.org/wiki/Ethernet_frame
注2: POC C 版本
https://pastebin.com/ziueinae
注3:POC Python版本
https://github.com/649/Memcrashed-DDoS-Exploit
TAG:百度安全實驗室 |