深度剖析 Memcached 超大型DRDoS攻擊
雷鋒網編者按:近日,國內外多家安全公司和機構接連發布了針對 Memcached 超級DRDoS(Distributed Reflection Denial of Service)攻擊的預警,引發各方關注。雷鋒網此前也曾就其對 GitHub 發起的攻擊進行過報道,當時攻擊的最大峰值流量達到了驚人的 1.35T。
要知道,在2月27號之前,Memcached的反射攻擊事件流量範圍不過幾百兆到500G。只有短短几天,攻擊峰值的歷史紀錄就迅速被翻倍刷新,並且攻擊發生的頻率從一天十幾次到幾百次,呈現爆髮式增長。
目前,Memcached分布情況如何?黑客是如何發起攻擊的?應該如何檢查和預防?
1、事件回顧據監控數據顯示,從本周一至周五(2月26日至3月2日 06:00)短短5天內,全球就發生了 79 起利用 Memcached 協議的反射放大攻擊。日攻擊總流量最高達到 419TBytes。
Memcached反射放大攻擊日攻擊次數
Memcached反射放大攻擊日攻擊總流量
其中,針對我國境內的 Memcached 反射放大攻擊就有68次,江蘇、浙江兩省被攻擊頻繁。針對我國境內的攻擊,單次攻擊最高攻擊峰值達 505Gbps。攻擊持續時間最長的一次發生在3月1日,持續1.2小時,總攻擊流量達103.8TBytes。
中國各省份地區Memcached反射放大攻擊次數
從影響範圍來看,所有互聯網的業務都可能成為Memcached DRDoS的攻擊對象。一方面帶寬或業務遭受超大流量的攻擊,導致出口帶寬完全被佔滿,正常業務無法訪問;另一方面企業內部的Memcached系統可能被不法分子利用成為攻擊幫凶。
2、攻擊分析2.1 什麼是Memcached?
Memcached是一個高性能的開源分散式內存對象緩存系統,主要用於提高Web應用的擴展性,能夠有效解決大數據緩存的很多問題,在全球範圍內都有廣泛使用。Memcached基於內存的key-value存儲小塊數據,並使用該數據完成資料庫調用、API調用或頁面渲染等。攻擊者正是利用 key-value 這項功能構造了大流量的Memcached反射攻擊。
2.2 Memcached分布情況
最新統計顯示,全球總共有3790個Memcached伺服器被利用參與到這些Memcached反射放大攻擊。這些被利用反射源遍佈於全球96個國家或地區範圍內。其中,美國就佔了全球的1/4。
分布在中國地區的被利用的Memcached伺服器位列第二位,佔比12.7%。在中國各省份佔比如下所示,廣東、北京、浙江為TOP3。
據綠盟科技威脅情報中心(NSFOCUS Network Threat Intelligence,簡稱NTI)的統計結果顯示,全球範圍內存在被利用風險的Memcached伺服器為104,506台。分布情況如下:
從地理分布來看,美國可被利用的Memcached伺服器最多,其次是中國。
這些活躍的Memcached反射器為構造超級DRDoS攻擊提供了有力的先決條件。如果不及時修復治理,預計基於Memcached反射攻擊的攻擊事件會繼續增加,後果不敢想像。
2.3 Memcached如何形成DRDoS攻擊?
Memcached反射攻擊的構造過程分為如下3步;
1. 收集反射器IP
通過NTI/Shodan等情報引擎找到開放的Memcached系統,獲取系統IP;
2. 配置反射器
利用開放的Memcached系統作為反射器,並修改key-value配置實現較大的存儲容量,為構造反射放大攻擊進行準備;
3. 發起反射攻擊
攻擊者將自身IP偽造成攻擊的目標地址,並向Memcached反射器發送請求讀取Memcached在key-value中存儲的信息。Memcached在收到請求後向偽造的虛假源IP進行回復,從而形成反射。
Memcached反射攻擊示意圖
當大量Memcached被同時利用,並用同一個偽造源IP進行回復,就輕而易舉地形成了針對這個偽造源(受害者)的大流量DRDoS攻擊。
2.4 Memcached的攻擊特徵
DRDoS(Distributed Reflective Denial-of-Service)是DDoS攻擊分類中的一種。
此前各類安全廠商監測到的DRDoS攻擊主要是SSDP反射、DNS反射、NTP反射等。下表(引自US-Cert)詳細列舉了各類反射攻擊的放大倍數。
僅從放大倍數來看,Memcached反射攻擊的危害程度遠遠高於其他反射攻擊類型,US-Cert提供的數據顯示它能夠實現51,000倍的放大效果。
與其他反射攻擊相比,Memcached如何實現這麼多倍的放大效果呢?其中的重要原因就是Memcached的key-value功能。前文提到key-value的作用是決定存儲容量的大小,正常情況下key-value的值通常不超過幾千位元組。當Memcached被攻擊者利用作為反射器時,key-value的值經過修改可以達到100萬位元組以上。
攻擊過程:
第一步,通過命令修改Memcached上的key-value參數,以提升放大倍數。
send = "set t 0 900 1048501" + "
" + 『a』 * 1048501 + "
"
socket.sendall(send)
經驗證,key-value的最大值為1048501。
第二步通過get命令讀取Memcached的存儲信息,並反射到目標IP。
get="x00x00x00x00x00x01x00x00get t
"
socket.sendto(get, (host, 11211))
形成的攻擊報文如下:
觸發Memcached反射攻擊的請求報文最小為15位元組,包含為8位元組(RFC規定欄位)+3位元組 (get)+1(空格)+最小為1位元組(鍵的名稱 )+2位元組 (
),而返回的請求數據達到105萬位元組,理論上可放大到接近7萬倍。如此強悍的放大攻擊,與其他各類DRDoS攻擊形成斷崖式的差距對比。
3.1 Memcached系統自查建議
攻擊的形成過程為我們提供了一個很好的預警思路,安全產品可針對Memcached的key-value配置進行檢測,在Memcached系統被利用成為攻擊源之前就進行攔截。檢測流程如下:
(1)檢測目的埠為11211的TCP或UDP報文(確保是Memcached伺服器);
(2)檢測報文是否為set命令(set命令格式參見附錄),如果是則執行(3),否則結束檢測;
(3)檢測set命令後面的bytes欄位值(如下圖中標註的1048501),是否超過設定的閾值,如果是,則可以懷疑該報文存在異常;
(4)檢測到該類異常控制報文後,可有如下兩種處理方式:
a.告警並監控。為了防止被誤殺,建議同時監控該Memcached伺服器後面的流量變化來進一步判斷該伺服器是否被用做了反射器。
b. 直接丟棄。如果有足夠的證據表明該記錄是惡意添加的,直接丟棄可以保證伺服器不被當做反射器。
自查舉例:假設下圖是公網的一台Memcached伺服器上獲取的數據。
通常情況下,多數value的大小都在64K以內,而最後一條的達到了將近1M,與其他記錄有很明顯的差別,基本上可以判斷該記錄存在問題,該伺服器可能已經被利用。
3.2 Memcached攻擊流量清洗
面對如此大規模、大範圍的DDoS攻擊威脅,所有網路安全節點都應該加強防範,從攻擊防護和外發清洗兩方面入手,充分保障基礎設施和業務流量的安全。針對此攻擊,我們提供如下防護建議:
·運營商。
運營商及IDC處於網路上游,擁有強大的帶寬資源,是攻擊最直接的受害者,也是防護的第一道屏障。運營商能夠靈活控制路由策略和防護策略進行快速過濾。
1)在邊界配置UDP訪問控制規則,將源埠為11211的報文進行阻斷或限速;
2)在邊界配置BGP FlowSpec策略,對源埠為11211的UDP流量進行阻斷或限速;
3)利用DDoS防護設備將源埠為11211的UDP流量進行阻斷或限速。
·企業用戶
企業用戶通常貼近服務終端,熟悉掌握自身業務流量特點,策略配置更加明確,靈活性強。
1)大型企業客戶可以採用和運營商相同的策略,在出口邊界設備配置UDP訪問控制規則或BGP FlowSpec策略對源埠為11211的UDP流量進行阻斷或限速;
2)不具備出口路由配置許可權的企業客戶,可以在抗DDoS等設備上配置防護策略,對源埠為11211的UDP流量進行阻斷或限速;
3)考慮企業出口帶寬可能被打滿的情況,企業客戶可通過運營商或雲清洗服務在上游執行清洗策略,策略內容同樣是對源埠為11211的UDP流量進行阻斷或限速。
3.3 Memcached系統防護加固
對於正在使用Memcached系統的用戶,為了避免被攻擊者利用,使Memcached成為攻擊源,對外發起攻擊流量,影響自身系統性能,我們提供如下幾點建議。
1)在邊界網路設備上配置URPF策略,過濾外發的虛假源IP報文;
2)在Memcached系統前進行深度檢測,直接過濾報文特徵中set key 0 900 64000的第三個欄位過大的數據包,這樣做可以在Memcached系統被修改利用成為攻擊源前進行攔截;
3)對Memcached服務進行安全檢查,查看Memcached服務是否監聽UDP埠。查找Memcached進程,查看是否有-l參數,如果沒有則默認為0.0.0.0。若Memcached服務不需要監聽UDP,禁用UDP。詳情參考Memcached官方文檔:
https://github.com/memcached/memcached/wiki/ConfiguringServer#udp
附錄set 命令的基本語法格式如下:
set key flags exptime bytes [noreply]
value
參數說明如下:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。
exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
bytes:在緩存中存儲的位元組數
noreply(可選): 該參數告知伺服器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解為key-value結構中的value)
相關文章:GitHub 遭遇有史以來最嚴重DDoS攻擊,黑客想玩票大的?
此文為綠盟科技&電信雲堤聯合投稿,雷鋒網編輯。
※螞蟻金服的區塊鏈首秀:未來一年再造世界級應用
※車企都試圖把自動駕駛戰略和電動化「打包」,但現代要從燃料電池SUV開始
TAG:雷鋒網 |