實戰錄 | 一起嘮嘮那些常見的DDoS攻擊

《實戰錄》導語

雲端衛士《實戰錄》欄目定期會向粉絲朋友們分享一些在開發運維中的經驗和技巧,希望對於關注我們的朋友有所裨益。本期分享人爲雲端衛士系統架構師高鵬,將帶來常見的DDoS的分享。


DDoS(Distributed Denial of Service:分佈式拒絕服務)攻擊指藉助於客戶/服務器技術,將多個計算機聯合起來作爲攻擊平臺,對一個或多個目標發動DDoS攻擊,從而成倍地提高拒絕服務攻擊的威力。


請DDoS攻擊的主要表現形式



一、流量型攻擊


這種攻擊消耗網絡帶寬或使用大量數據包淹沒一個或多個路由器、服務器和防火牆;帶寬攻擊的普遍形式是大量表面看合法的 TCP、UDP 或 ICMP 數據包被傳送到特定目的地;爲了使檢測更加困難,這種攻擊也常常使用源地址欺騙,並不停地變化。這種攻擊相對而言更加難以防禦,因爲合法數據包和無效數據 包看起來非常類似。


二、資源耗盡型


利用TCP和HTTP等協議定義的行爲來不斷佔用計算資源以阻止它們處理正常事務和請求。HTTP 半開和 HTTP 錯誤就是應用攻擊的兩個典型例子,緩存溢出攻擊-試圖在一個緩存中存儲超出其設計容量的數據。這種多出的數據可能會溢出到其他的緩存之中,破壞或者覆蓋其中的有效數據。


常見的DDoS攻擊類型


1、SYN flood攻擊

通常在進行 TCP 連接需要進行三次握手。當客戶端向服務端發出請求時,首先會發送一個 TCP SYN 數據包。而後,服務器分配一個控制塊,並響應一個 SYN ACK 數據包。服務器隨後將等待從客戶端收到一個 ACK 數據包。如果服務器沒有收到ACK 數據包,TCP連接將處於半開狀態,直到服務器從客戶端收到ACK數據包或者連接因爲 time-to-live(TTL)計時器設置而超時爲止。在連接超時的情況下,事先分配的控制塊將被釋放。


當一個攻擊者有意地、重複地向服務器發送 SYN 數據包,但不對服務器發回的SYN ACK 數據包答覆 ACK 數據包時,就會發生 TCP SYN 泛洪攻擊。這時,服務器將會失去對資源的控制,無法建立任何新的合法TCP連接。


圖1 tcp三次握手


圖2 syn-flood攻擊圖解

2、UDP flood攻擊

UDP flood 又稱UDP洪水攻擊或UDP淹沒攻擊,UDP是沒有連接狀態的協議,因此可以發送大量的 UDP 包到某個端口,如果是個正常的UDP應用端口,則可能干擾正常應用,如果是沒有正常應用,服務器要回送ICMP,這樣則消耗了服務器的處理資源,而且很容 易阻塞上行鏈路的帶寬。


常見的情況是利用大量UDP小包衝擊DNS服務器或Radius認證服務器、流媒體視頻服務器。100k pps的UDPFlood經常將線路上的骨幹設備例如防火牆打癱,造成整個網段的癱瘓。在UDPFLOOD攻擊中,攻擊者可發送大量僞造源IP地址的小 UDP包。


但是,由於UDP協議是無連接性的,所以只要開了一個UDP的端口提供相關服務的話,那麼就可針對相關的服務進行攻擊。

3、ICMP攻擊

利用ICMP報文進行網絡攻擊主要分爲三種類型:死亡之Ping、ICMP DoS攻擊、基於重定向的路由欺騙。


1死亡之Ping


這種攻擊主要是由於單個包的長度超過了ip協議規範所規定的包長度,死亡之ping首先是以太網長度有限,ip包片段被分片,當一個長度超過以太網幀的最大尺寸時,包被分片,作爲多個幀來發送。接收端的機器提取各個分片,並重組爲一個完整的皮包。在正常情況下,ip頭包含整個ip包的長度。當一個ip包被分片以後,頭只包含各個分片的長度。


分片並不包含整個ip包的長度信息,因此ip包一旦被分片,重組後的整個ip包的總長度只有在所在的分片都接受完畢之後才能確定。


在IP協議規範中規定了一個IP包的最大尺寸,而大多數的包處理程序又假設包的長度超過這個最大尺寸這種情況是不會出現的。因此,包的重組代碼所分配的內存區域也最大不超過這個最大尺寸。


這樣,超大的包一旦出現,包當中的額外數據就會被寫入其他正常區域。這很容易導致系統進入非穩定狀態,是一種典型的緩存溢出(Buffer Overflow)攻擊。在防火牆一級對這種攻擊進行檢測是相當難的,因爲每個分片包看起來都很正常。


由於使用ping工具很容易完成這種攻擊,以至於它也成了這種攻擊的首選武器,這也是這種攻擊名字的由來。


2ICMP DoS攻擊


針對帶寬的Dos:


ICMP echo reply報文具有高轉發優先級,攻擊者向被攻擊的主機發送大量源ip僞造的ICMP echo request報文,被攻擊主機回覆主機不可達,攻擊主機帶寬被佔用,不能正常服務,這種攻擊方式要求主句處理能力和帶寬要大於被攻擊主機,否則自身被Dos了。


圖3 icmp dos攻擊


針對連接的Dos:


針對連接的dos攻擊,可以終止現有的網路連接,會影響所有的ip設備,因爲它使用了合法的icmp的消息。通過發送一個僞造的ICMP Destination Unreachable或者Redirect消息來終止合法的網絡連接。更惡意的是如puke和smack會給某一個範圍內的端口發送大量的數據包,毀掉大量的網絡連接,同時還會消耗受害主機cpu的時鐘週期。


3基於重定向的路由欺騙


ICMP重定向報文是當主機採用非最優路由發送數據報時,設備會發回ICMP重定向報文來通知主機最優路由的存在。一般情況下,設備僅向主機而不向其它設備發送ICMP重定向報文,但一些惡意的攻擊可能跨越網段向另外一個網絡的主機發送虛假的重定向報文,以改變主機的路由表,破壞路由,干擾主機正常的IP報文轉發,並以此增強其竊聽能力。


4、Smurf 攻擊

與通常的Dos攻擊不同,Smurf攻擊並不直接對目標主機發送服務請求包。所謂的Smurf攻擊是指,攻擊者在遠程機器上發送ICMP答應請求服務,其目標主機不是一個主機的IP地址,而是某個網絡的廣播地址,其請求包的源IP不是發起攻擊的IP地址,而是加以僞裝的將要攻擊的主機IP地址。


大量的主機收到ICMP應答請求服務包後,按源IP返回請求信息,從而導致受攻擊主機的服務性能下降,甚至崩潰。


圖4 smurf攻擊


5、Fraggle攻擊

類似於Smurf,使用UDP應答消息而非ICMP。UDP端口7(ECHO)和端19(Chargen)在收到UDP報文後,都會產生迴應。在UDP 的7號端口收到報文後,會迴應收到的內容,而UDP的19號端口在收到報文後,會產生一串字符流。它們都同ICMP一樣,會產生大量無用的應答報文,佔滿網路帶寬。


攻擊者可以向子網廣播地址發送源地址爲受害網絡或受害主機的UDP包,端口號用7或19。子網絡啓用了此功能的每個系統都會向受害者的主機做出響應,從而引發大量的包,導致受害網絡的阻塞或受害主機的崩潰;子網上沒有啓動這些功能的系統將產生一個ICMP不可達的消息,因而仍然消耗帶寬。


也可將源端口改爲Chargen。目的端口爲ECHO,這樣會自動不停地產生迴應報文,其危害性更大。


6、land flood攻擊

Land flood攻擊是用一個特別打造的syn包,它的源地址和目標地址都被設置成某一個服務器地址。此舉將導致服務器向它自己的地址發送syn-ack消息,結果這個地址有發回ack消息並穿件一個空連接,被攻擊的服務器沒接受一個這樣的連接都將保留,直到超時。


7、NTP Reply flood攻擊

正常情況下,客戶端向NTP服務器發送請求後,NTP服務器向客戶端答覆請求,流程大概如下圖:



但是,可以構造UDP數據包,由於UDP沒有TCP的三次握手,導致隨意的數據包可以流過去,於是,將UDP數據包中源地址改成欲攻擊對象的,這樣返回的數據包就飛到那個造孽的娃娃電腦上去了,大概流程圖如下:


圖5 NTP Reply flood攻擊


8、Tear drop

利用UDP包重組時重疊偏移(假設數據包中第二片IP包的偏移量小於第一片結束的位移,而且算上第二片IP包的Data,也未超過第一片的尾部, 這就是重疊現象。)的漏洞對系統主機發動拒絕服務攻擊,最終導致主機菪掉;對於Windows系統會導致藍屏死機,並顯示STOP 0x0000000A錯誤。


對付這種類型得攻擊最好的方法就是要及時爲操作系統打補丁了,但是Teardrop攻擊仍然會耗費處理器的資源和主機帶寬。


圖6 TearDrop攻擊


9、HTTP GET/POST Flood攻擊

這種攻擊主要是針對存在ASP、JSP、PHP、CGI等腳本程序,並調用MSSQLServer、MySQLServer、Oracle等數據庫的網站系統而設計的,特徵是和服務器建立正常的TCP連接,並不斷的向腳本程序提交查詢、列表等大量耗費數據庫資源的調用,典型的以小博大的攻擊方法。


一般來說,提交一個GET或POST指令對客戶端的耗費和帶寬的佔用是幾乎可以忽略的,而服務器爲處理此請求卻可能要從上萬條記錄中去查出某個記錄,這種處理過程對資源的耗費是很大的,常見的數據庫服務器很少能支持數百個查詢指令同時執行,而這對於客戶端來說卻是輕而易舉的。


因此攻擊者只需通過Proxy代理向主機服務器大量遞交查詢指令,只需數分鐘就會把服務器資源消耗掉而導致拒絕服務,常見的現象就是網站慢如蝸牛、ASP程序失效、PHP連接數據庫失敗、數據庫主程序佔用CPU偏高。


這種攻擊的特點是可以完全繞過普通的防火牆防護,輕鬆找一些Proxy代理就可實施攻擊,缺點是對付只有靜態頁面的網站效果會大打折扣,並且有些Proxy會暴露攻擊者的IP地址。


圖7 http get flood


10、IP Fragment攻擊

fragment攻擊是指通過惡意操作,發送極小的分片來繞過包過濾系統或者入侵檢測系統的一種攻擊手段。攻擊者通過惡意操作,可將TCP報頭(通常爲20字節)分佈在2個分片中,這樣一來,目的端口號可以包含在第二個分片中。

11、ACK flood攻擊

ack攻擊是tcp建立連接以後,所有的數據傳輸tcp報文都是帶有ack標誌位的,主機在接收一個帶有ack標識位的數據包的時候,需要檢查該數據包所表示的連接四元組是否合法,如果合法,然後再向應用層傳遞該數據包。


如果檢查中發現該數據包不合法,例如,該數據包所指向的目的端口在本機並未開放,則主機操作系統協議棧會迴應RST包告訴對方該端口不存在。


相比主機收到的ack報文和syn報文時所作動作的複雜程度,顯然ACK報文帶來的負載要小的多,所以在實際環境中,只有攻擊程序每秒鐘發送ack報文的速率達到一定程度,才能使主機和防火牆的負載大有變化。


當發送速率很大的時候,主機操作系統將耗費大量的精力接收報文、判斷狀態,同事要主動迴應RST報文,正常的數據包就可能無法得到及時的處理,這時候客戶端的表現就是訪問頁面反應很慢,丟包率很高。


圖8 ack flood攻擊

12、HTTP Slow Header

Slow-Header的工作原理是利用在服務器端的客戶閒置端超時值。如果客戶端被發現閒置了超過所配置的時間,服務器端將放棄客戶端連接。


Slow-Header攻擊查找服務器端設定的近似值,選擇一個較低的值,然後向服務器啓動一個加上Partial header的HTTP請求。它不斷髮送基於選擇的值的header,這樣客戶端的空閒超時不會被觸發而服務器端的請求將不能完成。


圖9 Httpslow Header


13、DNS query flood攻擊

DNS 服務器在接收到域名解析請求的時候首先會在服務器上查找是否有對應的緩存,如果查找不到並且該域名無法直接由服務器解析的時候,DNS 服務器會向其上層DNS服務器遞歸查詢域名信息。


域名解析的過程給服務器帶來了很大的負載,每秒鐘域名解析請求超過一定的數量就會造成DNS服務器解析域名超時。


根據微軟的統計數據,一臺DNS服務器所能承受的動態域名查詢的上限是每秒鐘9000個請求。而我們知道,在一臺P3的PC機上可以輕易地構造出每秒鐘幾萬個域名解析請求,足以使一臺硬件配置極高的DNS服務器癱瘓,由此可見DNS 服務器的脆弱性。


目前最常用的DNS服務器軟件是國內領先的WINMYDNS,以及國外的Bind等。通常攻擊者採用的手段包括:

常用手段

(1) 利用發包程序向DNS服務器發送不帶任何負載的NULL數據包。由於數據包本身不符合協議規定,服務器在收到報文的時候將直接丟棄。因此這種攻擊方式除非攻擊流量比較大,否則不會有明顯的效果。


(2) 利用程序構造DNS解析請求固定的域名,由於DNS服務器在解析請求的時候會在系統cache存放上一次解析的結果,這種攻擊方式也需要較大的流量。


(3)向DNS服務器發起解析請求隨機的、不存在的域名;這樣DNS服務器就需要進行頻繁的字符串匹配,由於在本地無法查到對應的結果,服務器必須使用遞歸查詢向上層域名服務器提交解析請求,引起連鎖反應。

14、DNS amplification flood攻擊

通過向一系列無辜的第三方DNS服務器發送大量的查詢請求(小的和欺騙性的詢問信息),這些查詢請求數據包中的源IP地址爲被攻擊主機的IP地址,DNS服務器將大量的查詢結果發送給被攻擊主機,使被攻擊主機所在的網絡擁塞或拒絕服務。

圖10 DNS Amplification flood攻擊

發佈了44 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章