DDos、Dos攻擊方式和防御方法


0x01、DDoS介紹

DDoS是英文Distributed Denial of Service的縮寫,意即“分布式拒絕服務”。

那什么又是拒絕服務(Denial of Service)呢?可以這么理解,凡是能導致合法用戶不能夠訪問正常網絡服務的行為都算是拒絕服務攻擊。也就是說拒絕服務攻擊的目的非常明確,就是要阻止合法用戶對正常網絡資源的訪問,從而達成攻擊者不可告人的目的。

分布式拒絕服務攻擊一旦被實施,攻擊網絡包就會從很多DOS攻擊源(俗稱肉雞)猶如洪水般涌向受害主機,從而把合法用戶的網絡包淹沒,導致合法用戶無法正常訪問服務器的網絡資源,因此,拒絕服務攻擊又被稱之為“洪水式攻擊”。

常見的DDOS攻擊手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood等。

 

0x01、DoS和DDoS之間的區別

在DoS攻擊中,部署一台計算機和一個互聯網連接,以便用數據包摧毀服務器或網絡,其唯一目的是使受害者的帶寬和可用資源過載。

DDoS攻擊是相同的但是被放大了。DDoS不是一台計算機和一台互聯網連接,而是經常涉及數百萬台計算機,這些計算機全部以分布式方式使用,以使網站,網絡應用程序或網絡脫機。

在這兩種情況下,無論是通過單一DoS還是多次DDoS攻擊,目標都會被數據請求轟炸,這些數據請求會禁用受害者的功能。

0x02、DDos攻擊的常見方法

SYN Flood(SYN泛洪):利用TCP協議的原理,這種攻擊方法是經典最有效的DDOS方法,可通殺各種系統的網絡服務,主要是通過向受害主機發送大量偽造源IP和源端口的SYN或ACK 包,(企圖使用大量服務器資源使系統對合法流量無響應),導致主機的緩存資源被耗盡或忙於發送回應包而造成拒絕服務。TCP通道在建立以前,需要三次握手:

a. 客戶端發送一個包含SYN標志的TCP報文, 同步報文指明客戶端所需要的端口號和TCP連接的初始序列號
b. 服務器收到SYN報文之后,返回一個SYN+ ACK報文,表示客戶端請求被接受,TCP初始序列號加1
c.客戶端也返回一個確認報文ACK給服務器,同樣TCP序列號加1
d. 如果服務器端沒有收到客戶端的確認報文ACK,則處於等待狀態,將該客戶IP加入等待隊列,然后輪訓發送SYN+ACK報文
所以攻擊者可以通過偽造大量的TCP握手請求,耗盡服務器端的資源。

 

HTTP Flood

 針對系統的每個Web頁面,或者資源,或者Rest API,用大量肉雞,發送大量http request。這種攻擊主要是針對存在ASP、JSP、PHP、CGI等腳本程序,並調用MSSQLServer、MySQLServer、Oracle等數據庫的網站系統而設計的,特征是和服務器建立正常的TCP連接,並不斷的向腳本程序提交查詢、列表等大量耗費數據庫資源的調用,典型的以小博大的攻擊方法。缺點是對付只有靜態頁面的網站效果會大打折扣。

 

Teardrop Attacks(淚滴攻擊)

淚滴攻擊涉及黑客向受害者的機器發送重疊的,超大的有效載荷的破碎和混亂的IP片段。由於TCP / IP碎片重新組裝的方式存在錯誤,因此顯然會導致操作系統和服務器崩潰。所有操作系統的許多類型的服務器都容易受到這種類型的DOS攻擊,包括Linux。

 

慢速攻擊

Low-rate Denial-of-Service attacks(低速拒絕服務攻擊),不要被標題所迷惑,這仍然是致命的DoS攻擊!低速率DoS(LDoS)攻擊旨在利用TCP的慢速時間動態,能夠執行重傳超時(RTO)機制以降低TCP吞吐量。簡而言之,黑客可以通過發送高速率和密集突發來反復進入RTO狀態來創建TCP溢出 - 同時在慢速RTO時間尺度上。受害節點處的TCP吞吐量將大幅降低,而黑客的平均速率較低,因此難以被檢測到。

Http協議中規定,HttpRequest以\r\n\r\n結尾來表示客戶端發送結束。攻擊者打開一個Http 1.1的連接,將Connection設置為Keep-Alive, 保持和服務器的TCP長連接。然后始終不發送\r\n\r\n 每隔幾分鍾寫入一些無意義的數據流, 拖死機器。


Internet Control Message Protocol(ICMP) flood(Internet控制消息協議(ICMP)泛洪)

Internet控制消息協議(ICMP)是一種用於IP操作,診斷和錯誤的無連接協議。ICMP Flood - 發送異常大量的任何類型的ICMP數據包(尤其是網絡延遲測試“ping”數據包) - 可能會淹沒嘗試處理每個傳入ICMP請求的目標服務器,這可能導致拒絕 - 目標服務器的服務條件。

 

Peer-to-peer attacks(點對點攻擊)

點對點(P2P)網絡是一種分布式網絡,其中網絡中的各個節點(稱為“對等體”)充當資源的供應者和消費者,與集中式客戶端 - 服務器模型相反,客戶端 - 服務器或操作系統節點請求訪問中央服務器提供的資源。

每當網絡上出現一個熱門事件,比如XX門, 精心制作一個種子, 里面包含正確的文件下載, 同時也包括攻擊目標服務器的IP。這樣,當很多人下載的時候, 會無意中發起對目標服務器的TCP連接。

CC攻擊

CC攻擊(Challenge Collapsar)是DDOS(分布式拒絕服務)的一種,前身名為Fatboy攻擊,也是一種常見的網站攻擊方法。攻擊者通過代理服務器或者肉雞向向受害主機不停地發大量數據包,造成對方服務器資源耗盡,一直到宕機崩潰。相比其它的DDOS攻擊CC似乎更有技術含量一些。這種攻擊你見不到真實源IP,見不到特別大的異常流量,但造成服務器無法進行正常連接最讓站長們憂慮的是這種攻擊技術含量低,利用更換IP代理工具和一些IP代理一個初、中級的電腦水平的用戶就能夠實施攻擊。

0x03、DDOS攻擊現象判定方法

1.SYN類攻擊判斷:A.CPU占用很高;B.網絡連接狀態:netstat –na,若觀察到大量的SYN_RECEIVED的連接狀態;C.網線插上后,服務器立即凝固無法操作,拔出后有時可以恢復,有時候需要重新啟動機器才可恢復。

 

2.CC類攻擊判斷:A.網站出現service unavailable提示;B.CPU占用率很高;C.網絡連接狀態:netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條;D.用戶無法訪問網站頁面或打開過程非常緩慢,軟重啟后短期內恢復正常,幾分鍾后又無法訪問。

3.UDP類攻擊判斷:A.觀察網卡狀況 每秒接受大量的數據包;B.網絡狀態:netstat –na TCP信息正常。

4.TCP洪水攻擊判斷:A.CPU占用很高;B.netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條

0x04、DDoS攻擊防御方法

1. 過濾不必要的服務和端口:可以使用Inexpress、Express、Forwarding等工具來過濾不必要的服務和端口,即在路由器上過濾假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以針對封包Source IP和Routing Table做比較,並加以過濾。只開放服務端口成為目前很多服務器的流行做法,例如WWW服務器那么只開放80而將其他所有端口關閉或在防火牆上做阻止策略。

2. 異常流量的清洗過濾:通過DDOS硬件防火牆對異常流量的清洗過濾,通過數據包的規則過濾、數據流指紋檢測過濾、及數據包內容定制過濾等頂尖技術能准確判斷外來訪問流量是否正常,進一步將異常流量禁止過濾。單台負載每秒可防御800-927萬個syn攻擊包。

3. 分布式集群防御:這是目前網絡安全界防御大規模DDOS攻擊的最有效辦法。分布式集群防御的特點是在每個節點服務器配置多個IP地址(負載均衡),並且每個節點能承受不低於10G的DDOS攻擊,如一個節點受攻擊無法提供服務,系統將會根據優先級設置自動切換另一個節點,並將攻擊者的數據包全部返回發送點,使攻擊源成為癱瘓狀態,從更為深度的安全防護角度去影響企業的安全執行決策。

4. 高防智能DNS解析:高智能DNS解析系統與DDOS防御系統的完美結合,為企業提供對抗新興安全威脅的超級檢測功能。它顛覆了傳統一個域名對應一個鏡像的做法,智能根據用戶的上網路線將DNS解析請求解析到用戶所屬網絡的服務器。同時智能DNS解析系統還有宕機檢測功能,隨時可將癱瘓的服務器IP智能更換成正常服務器IP,為企業的網絡保持一個永不宕機的服務狀態。

0x05、CC攻擊防御方法

1. 利用Session做訪問計數器:利用Session針對每個IP做頁面訪問計數器或文件下載計數器,防止用戶對某個頁面頻繁刷新導致數據庫頻繁讀取或頻繁下載某個文件而產生大額流量。(文件下載不要直接使用下載地址,才能在服務端代碼中做CC攻擊的過濾處理)

 

2. 把網站做成靜態頁面:大量事實證明,把網站盡可能做成靜態頁面,不僅能大大提高抗攻擊能力,而且還給駭客入侵帶來不少麻煩,至少到現在為止關於HTML的溢出還沒出現,看看吧!新浪、搜狐、網易等門戶網站主要都是靜態頁面,若你非需要動態腳本調用,那就把它弄到另外一台單獨主機去,免的遭受攻擊時連累主服務器。

 

3. 增強操作系統的TCP/IP棧:Win2000和Win2003作為服務器操作系統,本身就具備一定的抵抗DDOS攻擊的能力,只是默認狀態下沒有開啟而已,若開啟的話可抵擋約10000個SYN攻擊包,若沒有開啟則僅能抵御數百個,具體怎么開啟,自己去看微軟的文章吧!《強化 TCP/IP 堆棧安全》。也許有的人會問,那我用的是Linux和FreeBSD怎么辦?很簡單,按照這篇文章去做吧!《SYN Cookies》。

4. 在存在多站的服務器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。CC的防御要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某服務器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問數據庫請求都必須一個隨機參數在Session里面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的服務器聯系獲得,需要較長的時間,而且沒有什么認證,開800線攻擊,服務器馬上滿負荷了。代碼層的防御需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個服務器的影響!

 

5. 服務器前端加CDN中轉(免費的有百度雲加速、360網站衛士、加速樂、安全寶等),如果資金充裕的話,可以購買高防的盾機,用於隱藏服務器真實IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服務器上部署的其他域名也不能使用真實IP解析,全部都使用CDN來解析。 

另外,防止服務器對外傳送信息泄漏IP地址,最常見的情況是,服務器不要使用發送郵件功能,因為郵件頭會泄漏服務器的IP地址。如果非要發送郵件,可以通過第三方代理(例如sendcloud)發送,這樣對外顯示的IP是代理的IP地址。 

總之,只要服務器的真實IP不泄露,10G以下小流量DDOS的預防花不了多少錢,免費的CDN就可以應付得了。如果攻擊流量超過20G,那么免費的CDN可能就頂不住了,需要購買一個高防的盾機來應付了,而服務器的真實IP同樣需要隱藏。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM