拒絕服務攻擊(Denial-of-Service Attack)亦稱洪水攻擊,是一種網絡攻擊手法,其目的在於使目標電腦的網絡或系統資源耗盡,使服務暫時中斷或中止,致使其正經常使用戶沒法訪問。web
分佈式拒絕服務攻擊(Distributed Denial-of-Service Attack),是使用網絡上兩個或兩個以上被攻陷的電腦做爲 「殭屍」 向特定的目標發動 「拒絕服務」 式攻擊。正則表達式
受害主機在 DDoS 攻擊下,明顯特徵就是大量的不明數據報文流向受害主機,受害主機的網絡接入帶寬被耗盡,或者受害主機的系統資源(存儲資源和計算資源)被大量佔用,甚至發生死機。前者可稱爲帶寬消耗攻擊,後者稱爲系統資源消耗攻擊。二者可能單獨發生,也可能同時發生。數據庫
DDOS按拒絕對象能夠分爲:帶寬消耗型攻擊、資源消耗型攻擊。express
從協議層次劃分:api
OSI 層級 | 攻擊內容 |
Network Based (2-4層) | IP Fragment |
Tear Drop | |
SYN Flood (Dirt Jumper) | |
TCP (connection) Flood | |
e.g. SYN-ACK, ACK & PUSH-ACK, RST or FIN and Fragmented ACK | |
Christmas Tree | |
Fake Session | |
LAND | |
Redirect Traffic Attack | |
ICMP Flood, Ping Floods and SMURF Attacks | |
Ping of Death ICMP | |
DNS based (4層) | UDP Flood |
UDP Fragment | |
DNS Flood (Distributed and DNS Blacklisting) | |
e.g. DNS UDP Flood, DNS Query Flood and DNS NXDOMAIN Flood | |
SSL/TLS based (5–6層) | SSL Floods, Malformed SSL (e.g. empty SSL HELLO) |
SSL THC attack (Extending from SSL Renegotiation vulnerability) | |
Application based (6–7層) | Slowloris (Nuclear DDoSer, Slowhttptest) |
Keep-Dead | |
Slow POST (R-U-Dead-Yet, Tor Hammer, Nuclear DDoSer, Slowhttptest) | |
HashDoS | |
Apache Killer (Slowhttptest) | |
HTTP GET Flood, Recursive GET Flood (Web Scraping), Dirt Jumper (HTTP Flood) | |
#RefRef (exploit SQLi - OWASP Top 10 vulnerability as entry) | |
XML 「Bomb」 (DTD attack), XML External Entity DoS |
普通DDOS瀏覽器
普通拒絕服務攻擊是指一些傳統的攻擊方式,如SYN FLOOD攻擊、ACK FLOOD攻擊、CC攻擊、UDP FLOOD攻擊等等。安全
新型DDOS服務器
Websocket、臨時透鏡、慢速DDOS、ReDOSwebsocket
1. SYN FLOOD攻擊網絡
SYN FLOOD攻擊是利用TCP協議的一些特性發動的,經過發送大量僞造的帶有SYN標誌位的TCP報文使目標服務器鏈接耗盡,達到拒絕服務的目的。要想理解SYN FLOOD的攻擊原理必需要先了解TCP協議創建鏈接的機制。SYN FLOOD攻擊就是在三次握手機制的基礎上實現的。攻擊者經過僞造IP報文,在IP報文的原地址字段隨機填入僞造的IP地址,目的地址填入要攻擊的服務器IP地址,TTL、Source Port等隨機填入合理數據,TCP的目的端口填入目的服務器開放的端口,如80、8080等,SYN標誌位置1。而後不停循環將僞造好的數據包發送到目的服務器。
2. ACK FLOOD攻擊
ACK FLOOD攻擊一樣是利用TCP三次握手的缺陷實現的攻擊,ACK FLOOD攻擊利用的是三次握手的第二段,也就是TCP標誌位SYN和ACK都置1,攻擊主機僞造海量的虛假ACK包發送給目標主機,目標主機每收到一個帶有ACK標誌位的數據包時,都會去本身的TCP鏈接表中查看有沒有與ACK的發送者創建鏈接,若是有則發送三次握手的第三段ACK+SEQ完成三次握手創建TCP鏈接;若是沒有則發送ACK+RST斷開鏈接。可是在這個過程當中會消耗必定的CUP計算資源,若是瞬間收到海量的SYN+ACK數據包將會消耗大量的CPU資源使得正常的鏈接沒法創建或者增長延遲,甚至形成服務器癱瘓、死機。
3. UDP FLOOD攻擊
UDP FLOOD攻擊顧名思義是利用UDP協議進行攻擊的,UDP FLOOD攻擊能夠是小數據包衝擊設備也能夠是大數據包阻塞鏈路佔盡帶寬。不過兩種方式的實現很類似,差異就在UDP的數據部分帶有多少數據。相比TCP FLOOD攻擊,UDP FLOOD攻擊更直接更好理解,有必定規模以後更難防護,由於UDP攻擊的特色就是打出很高的流量,一箇中小型的網站出口帶寬可能不足1G,若是遇到10G左右的UDP FLOOD攻擊,單憑企業自身是不管如何也防護不住的,必須須要運營商幫你在上游清洗流量才行,若是遇到100G的流量可能地方的運營商都沒有能力清洗了,須要把流量分散到全國清洗。UDP FLOOD攻擊就像是一塊大石頭,看着普普統統的好像跟現代機槍炸彈不是一個等級的武器,可是若是石頭足夠大,就不同了。
4. CC攻擊
CC攻擊全稱Challenge Collapsar,中文意思是挑戰黑洞,由於之前的抗DDOS攻擊的安全設備叫黑洞,顧名思義挑戰黑洞就是說黑洞拿這種攻擊沒辦法,新一代的抗DDOS設備已經更名爲ADS(Anti-DDoS System),基本上已經能夠完美的抵禦CC攻擊了。CC攻擊的原理是經過代理服務器或者大量肉雞模擬多個用戶訪問目標網站的動態頁面,製造大量的後臺數據庫查詢動做,消耗目標CPU資源,形成拒絕服務。咱們都知道網站的頁面有靜態和動態之分,動態網頁是須要與後臺數據庫進行交互的,好比一些論壇用戶登陸的時候須要去數據庫查詢你的等級、權限等等,當你留言的時候又須要查詢權限、同步數據等等,這就消耗不少CPU資源,形成靜態網頁能打開,可是須要和數據庫交互的動態網頁打開慢或者沒法打開的現象。這種攻擊方式相對於前兩種實現要相對複雜一些,可是防護起來要簡單的多,提供服務的企業只要儘可能少用動態網頁而且讓一些操做提供驗證碼就能抵禦通常的CC攻擊。
5. 反射DDOS
不少協議的請求包要遠小於回覆包,以一個字節的數據換十個字節的數據回來這就是一種放大,可是你這單純的放大攻擊的是本身,因此說想要攻擊別人就要在發送請求包時把源地址寫成要攻擊的人的地址,這樣回覆的大字節報文就去你要攻擊的人那裏了。
這裏放大主要利用的是NTP的monlist(listpeers也行)、DNS的AXFR(ANY也行)、SNMP的getbulkrequest。
monlist是返回最近600個與當前NTP服務器通訊過的IP地址;
AXFR是區域傳送(有地方叫域傳送),好比freebuf.com下的全部域名返回給請求者;
SNMPV2版本中新加的getbulkrequest用於一次請求大量的信息,減小管理站與被管理設備的交互次數。
6. Websocket
websocket是HTML5一種新的協議,它實現了瀏覽器與服務器全雙工通訊(full-duple)。目前主流的瀏覽器都能很好地支持websocket,並且用它實現DOS攻擊也並非很難,只要在js代碼中寫入相應的代碼,當人們打開這個網頁時瀏覽器會自動執行js代碼去請求鏈接要攻擊的IP地址。
7. 臨時透鏡
這種攻擊是一種典型的經過時間延時進行流量放大攻擊的方法。若是攻擊者能夠控制多個時間段的多個數據包,讓它們同時到達目標,這樣就能使流量瞬間到達一個峯值,對目標形成很大危害。這個攻擊方式道理不難理解,可是實現起來但是不容易,要讓相同源和目的IP的IP報文走不一樣的路徑到達目的地,這一點就是要實現臨時透鏡攻擊的關鍵所在,我國的互聯網基本上是由四張網(電信、聯通、移動、教育網)經過互聯互通組成的,任意兩點之間的路徑都能有千千萬萬條,可是怎麼纔能有咱們本身控制報文的路線呢?我想到的第一個辦法就是用IP協議的寬鬆源路由選項,學過或者平時比較瞭解TCP/IP的童鞋們可能據說過這個寬鬆源路由,但我估計不多有人用。IP數據在傳輸時一般由路由器自動爲其選擇路由,可是網絡工程師爲了使數據繞開出錯網絡或者爲了測試特定線路的吞吐率,須要在信源出控制IP數據報的傳輸路徑,源路由就是爲了知足這個要求設計的。源路由有兩種,一種叫嚴格源路由另外一種就是咱們要說的寬鬆源路由。IP選項部分能夠最多帶上9個IP地址做爲這個數據報要走的路徑,嚴格源路由是每一跳都必須按照指定的路由器去走,可是寬鬆源路由的不用這麼嚴格。我國大部分運營商都禁止了源路由,不過有人說在國外不由止源路由,國外有服務器的朋友能夠去測試一下是否是真的。
8. 慢速DDOS
一提及慢速攻擊,就要談談它的成名歷史了。HTTP Post慢速DoS攻擊第一次在技術社區被正式披露是2012年的OWASP大會上,由Wong Onn Chee和Tom Brennan共同演示了使用這一技術攻擊的威力。對任何一個開放了HTTP訪問的服務器HTTP服務器,先創建了一個鏈接,指定一個比較大的content-length,而後以很是低的速度發包,好比1-10s發一個字節,而後維持住這個鏈接不斷開。若是客戶端持續創建這樣的鏈接,那麼服務器上可用的鏈接將一點一點被佔滿,從而致使拒絕服務。和CC攻擊同樣,只要Web服務器開放了Web服務,那麼它就能夠是一個靶子,HTTP協議在接收到request以前是不對請求內容做校驗的,因此即便你的Web應用沒有可用的form表單,這個攻擊同樣有效。在客戶端以單線程方式創建較大數量的無用鏈接,並保持持續發包的代價很是的低廉。實際試驗中一臺普通PC能夠創建的鏈接在3000個以上。這對一臺普通的Web server將是致命的打擊。更不用說結合肉雞羣作分佈式DoS了。鑑於此攻擊簡單的利用程度、拒絕服務的後果、帶有逃逸特性的攻擊方式,這類攻擊一炮而紅,成爲衆多攻擊者的研究和利用對象。發展到今天,慢速攻擊也多種多樣。
9. ReDoS
ReDoS(Regular expression Denial of Service)正則表達式拒絕服務攻擊。開發人員使用了正則表達式來對用戶輸入的數據進行有效性校驗,當編寫校驗的正則表達式存在缺陷或者不嚴謹時, 攻擊者能夠構造特殊的字符串來大量消耗服務器的系統資源,形成服務器的服務中斷或中止。
正則表達式引擎分紅兩類,一類稱爲DFA(肯定性有限狀態自動機),另外一類稱爲NFA(非肯定性有限狀態自動機)。兩類引擎要順利工做,都必須有一個正則式和一個文本串,一個捏在手裏,一個吃下去。DFA捏着文本串去比較正則式,看到一個子正則式,就把可能的匹配串全標註出來,而後再看正則式的下一個部分,根據新的匹配結果更新標註。而NFA是捏着正則式去比文本,吃掉一個字符,就把它跟正則式比較,而後接着往下幹。一旦不匹配,就把剛吃的這個字符吐出來,一個一個吐,直到回到上一次匹配的地方。
參考文章
http://blog.csdn.net/qq_32400847/article/details/63262965
http://361531.blog.51cto.com/351531/1035717/