0
雷鋒網編者按:近日,國內外多家安全公司和機構接連發布了針對 Memcached 超級DRDoS(Distributed Reflection Denial of Service)攻擊的預警,引發各方關注。雷鋒網此前也曾就其對 GitHub 發起的攻擊進行過報道,當時攻擊的最大峰值流量達到了驚人的 1.35T。
要知道,在2月27號之前,Memcached的反射攻擊事件流量范圍不過幾百兆到500G。只有短短幾天,攻擊峰值的歷史紀錄就迅速被翻倍刷新,并且攻擊發生的頻率從一天十幾次到幾百次,呈現爆發式增長。
目前,Memcached分布情況如何?黑客是如何發起攻擊的?應該如何檢查和預防?
以下為綠盟科技&電信云堤聯合投稿,雷鋒網編輯。
據監控數據顯示,從本周一至周五(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.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" + "\r\n" + ‘a’ * 1048501 + "\r\n"
socket.sendall(send)
經驗證,key-value的最大值為1048501。
第二步通過get命令讀取Memcached的存儲信息,并反射到目標IP。
get="\x00\x00\x00\x00\x00\x01\x00\x00get t\r\n"
socket.sendto(get, (host, 11211))
形成的攻擊報文如下: 
觸發Memcached反射攻擊的請求報文最小為15字節,包含為8字節(RFC規定字段)+3字節 (get)+1(空格)+最小為1字節(鍵的名稱 )+2字節 (\r\n),而返回的請求數據達到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攻擊,黑客想玩票大的?
此文為綠盟科技&電信云堤聯合投稿,雷鋒網編輯。
雷峰網特約稿件,未經授權禁止轉載。詳情見轉載須知。