DDoS Distributed Denial of Service (分佈式拒絕服務)
能夠簡單理解爲:讓一個公開網站沒法訪問。
要達到這個目的的方法也很簡單:不斷地提出服務請求,讓合法用戶的請求沒法及時處理。html
隨着網絡發展,不少大型企業具有較強的服務提供能力,因此應付單個請求的攻擊已經不是問題。道高一尺,魔高一丈,因而乎攻擊者就組織不少同夥,同時提出服務請求,直到服務沒法訪問,這就叫「分佈式」。可是在現實中,通常的攻擊者沒法組織各地夥伴協同「做戰」,因此會使用「僵屍網絡」來控制N多計算機進行攻擊。web
Botnet,就是數量龐大的殭屍程序(Bot)經過必定方式組合,出於惡意目的,採用一對多的方式進行控制的大型網絡,也能夠說是一種複合性攻擊方式。由於殭屍主機的數量很大並且分佈普遍,因此危害程度和防護難度都很大。
僵屍網絡具有高可控性,控制者能夠在發佈指令以後,就斷開與僵屍網絡的鏈接,而控制指令會自動在殭屍程序間傳播執行。正則表達式
僵屍網絡由大量功能結點共同組成,多是普通PC、服務器或者移動設備。
步驟:感染傳播 -> 安裝執行 -> 接入僵屍網絡 -> 命令執行算法
控制模式 | 網絡規模 | 組網難度 | 抗打擊性 | 流行度 |
---|---|---|---|---|
IRC型僵屍網絡 | 通常 | 較簡單 | 偏弱 | 國內較少見 |
HTTP型僵屍網絡 | 中等 | 通常 | 通常 | 國內較廣泛 |
P2P型僵屍網絡 | 規模龐大 | 較困難 | 強 | 多見於國外 |
當網絡數據包的數量達到或者超過上限的時候,會出現網絡擁堵、響應緩慢的狀況。DDoS就是利用這個原理,發送大量網絡數據包,佔滿被攻擊目標的所有帶寬,從而形成正常請求失效,達到拒絕服務的目的。數據庫
Internet Control Message Protocol(網絡控制消息協議)是TCP/IP協議族的核心協議之一。它用於在TCP/IP網絡中發送控制消息,提供可能發生在通訊環境中的各類問題反饋。經過這些消息,管理者能夠對所發生的問題作出診斷,而後採起適當的措施解決。
Internet Group Management Protocol(因特網組管理協議)是用於管理因特網協議多播組成員的一種通訊協議。IP主機和相鄰的路由器利用IGMP來創建多播組的組成員。
攻擊者使用受控主機向被攻擊目標發送大量的ICMP/IGMP報文,進行洪水攻擊以消耗目標的寬帶資源,這種類型的攻擊出現的很早,使用hping等工具就能簡單的發起攻擊。但如今使用這種方法發動的攻擊已見很少,被攻擊目標能夠在其網絡邊界直接過濾並丟棄ICMP/IGMP數據包使攻擊無效化。瀏覽器
可是這種直接方式一般依靠受控主機自己的網絡性能,因此效果不是很好,還容易被查到攻擊源頭。因而反射攻擊就出現。緩存
User Datagram Protocol(用戶數據包協議)是一種面向無鏈接的傳輸層協議,主要用於不要求分組順序到達的傳輸,提供面向事務的簡單的不可靠信息傳送服務。
利用UDP數據報文,攻擊者也能夠發送洪水攻擊,UDP洪水攻擊和ICMP/IGMP洪水攻擊的原理基本相同,一般,攻擊者會使用小包和大包兩種方式進行攻擊。安全
小包是指64字節大小的數據包,這是以太網上傳輸數據幀的最小值,在相同流量下,單包體積越小,數據包的數量就越多。因爲交換機、路由器等網絡設備須要對沒一個數據包進行檢查和校驗,所以使用UDP小包攻擊可以最有效的增大網絡設備處理數據包的壓力,形成處理速度的緩慢和傳輸延遲等拒絕服務攻擊的效果。服務器
大包是指1500字節以上的數據包,其大小超過了以太網的最大傳輸單元(MTU),使用UDP大包攻擊,可以有效的佔用網絡接口的傳輸寬帶,並迫使被攻擊目標在接受到UDP數據時進行分片重組,形成網絡擁堵,服務器響應速度變慢。網絡
UDP洪水攻擊也是很早就出現的一種拒絕服務攻擊方式,這種攻擊發動簡單,有至關多的工具都可以發動UDP洪水攻擊,如hping、LOIC等,但UDP洪水攻擊徹底依靠受控主機自己的網絡性能,所以一般對目標寬帶資源的消耗並不太大。
反射攻擊又被稱爲DRDoS(Distributed Reflection Denial of Service 分佈式反射拒絕服務)攻擊,是指利用路由器、服務器等設施對請求產生應答,從而反射攻擊流量並隱藏攻擊來源的一種分佈式拒絕服務攻擊技術。
在進行反射攻擊時,攻擊者使用受控主機發送大量的數據包,這些數據包的特別之處在於,其目的IP地址指向做爲反射器的服務器、路由器等設施,而源IP地址則被僞形成被攻擊目標的IP地址,反射器在收到數據包時,會認爲該數據包是否被攻擊目標所發來的請求,所以會將相應數據發送給被攻擊目標,當大量的響應數據包涌向攻擊目標時,就會耗盡目標的網絡寬帶資源,形成拒絕服務攻擊。
放大攻擊是一種特殊的反射攻擊,其特殊之處在於反射器對於網絡流量具備放大做用,所以咱們也能夠將這種反射器成爲放大器,進行放大攻擊的方式與反射攻擊的方式也是基本一致的,不一樣之處在於反射器(放大器)所提供的網絡服務須要知足必定條件。
在反射器所提供的網絡服務協議中,須要存在請求和響應數據量不對稱的狀況,響應數據量須要大於請求數據量,響應數據量與請求數據量的比值越大,放大器的放大倍數也就越大,進行放大攻擊所產生的消耗寬帶資源的效果也就越明顯。
在傳輸控制協議創建鏈接時,首先會進行TCP三次握手,在這個過程當中,當服務器端接收到客戶端發來的SYN鏈接請求時,會對該請求進行ACK應答,利用TCP握手的ACK應答,便可進行ACK反射攻擊。
若是攻擊者將SYN的源IP地址僞形成被攻擊目標的IP地址,服務器的應答也就會直接發送給被攻擊目標,因爲使用TCP協議的服務在互聯網上普遍存在,攻擊者能夠經過受控主機向大量不一樣的服務器發送僞造源IP地址的SYN請求,從而使服務器響應的大量ACK應答數據涌向被攻擊目標,佔用目標的網絡寬帶資源並拒絕服務。
Domain Name System (域名系統)是因特網的一項核心服務,它做爲能夠將域名和IP地址相互映射的一個分佈式數據庫,可以令人更方便地訪問互聯網,而不用去記住那些難以記憶的IP地址,DNS使用的TCP與UDP端口號都是53,主要使用的UDP協議。
一般,DNS的相應數據包會比查詢數據包大,所以攻擊者利用普通的DNS查詢請求就可以發動放大攻擊,並將攻擊流量放大2~10倍,但更有效的方法是使用RFC2671中定義的DNS擴展機制EDNS0。
在EDNS0中,擴展了DNS數據包的結果,增長了OPT RR字段,在OPT RR字段中,包含了客戶端可以處理的最大UDP報文大小的信息,服務器在響應DNS請求時,解析並記錄下客戶端可以處理的最大UDP報文的大小,並根據該大小生成響應的報文。
攻擊者可以利用dig和EDNS0進行高效的DNS放大攻擊,攻擊者向普遍存在的開放DNS解析器發送dig查詢命令,將OPT RR字段中UDP報文大小設置爲很大的值,並將請求的源IP地址僞形成被攻擊目標的IP地址。DNS解析器收到查詢請求後,會將解析的結果發送給被攻擊目標,當大量的解析結果涌向目標時,就會致使目標網絡擁堵和緩慢,形成拒絕服務攻擊。攻擊者發送的DNS查詢請求數據包大小通常爲60字節左右,而查詢返回結果的數據包大小一般爲300字節以上,所以,使用該方式進行放大攻擊可以達到50倍以上的放大效果。
Network Time Protocol (網絡時間協議)是用來使計算器時間同步化的一種協議,它可使計算機與時鐘源進行同步化並提供高精準度的時間校訂,NTP使用UDP 123端口進行通訊。
在NTP協議的服務器實現上,一般會實現一系列Mode 7的調試接口,而接口中的monlist請求可以獲取到目標NTP服務器進行同步的最後600個客戶端的IP地址等信息。這意味着,只須要發送一個很小的請求包,就能觸發大量連續的包含IP地址信息等數據的UDP響應數據包。
實際上,monlist請求返回的數據量與一段時間內和NTP服務器交互的客戶端數據量有關,因爲NTP服務使用的是UDP單包通訊,所以攻擊者能夠將僞造源IP地址的UDP請求包發送給NTP放大器,僞造客戶端與NTP服務器的交互,增長「和NTP服務器交互的客戶端的數量」,以此來增長monlist請求的響應數據量並增大NTP放大器的放大倍數,只要向NTP放大器發送600個不超過64字節的請求包(約40KB數據),就可以快速的將NTP放大器的放大倍數提升到700倍以上,並在該服務器的NTP服務關閉或從新啓動以前一直保持這麼大的放大倍數。攻擊者發送的monlist請求數據包大小不超過64字節,而請求返回的結果會包含100個482字節的UDP響應數據,所以使用該方式進行放大攻擊可以達到700倍以上的放大效果。
Simple Network Management Protocol(簡單網絡管理協議)是目前網絡中應用最爲普遍的網絡管理協議,它提供了一個管理框架來監控和維護互聯網的設備,SNMP協議使用UDP 161端口進行通訊。
利用SNMP協議中的默認通訊字符串和GetBulk請求,攻擊者可以開展有效的SNMP放大攻擊。
許多廠商安裝的SNMP都採用了默認的通訊字符串(Community String),這些通訊字符串是程序獲取設備信息和修改配置必不可少的,最多見的默認通訊字符串是public和private,除此以外還有許多廠商私有的默認通訊字符串,幾乎全部運行SNMP的網絡設備上,均可以找到某種形式的默認通訊字符串。
在SNMPv1中定義的get請求能夠嘗試一次獲取多個MIB對象,但響應消息的大小受到設備處理能力的限制,若是設備不能返回所有請求的響應,則會返回一條錯誤信息。在SNMPv2中,添加了Getbulk請求,該請求會通知設備返回儘量多的數據,這使得管理程序可以經過發送一次請求就得到大段的檢索信息。
攻擊者向普遍存在並開啓了SNMP服務的網絡設備發送Getbulk請求,使用默認通訊字符串做爲認證憑據,並將源IP地址僞形成攻擊目標的IP地址,設備收到Getbulk請求後,會將響應結果發送給攻擊目標,當大量的響應結果涌向攻擊目標時,就會致使攻擊目標網絡擁堵和緩慢,形成拒絕服務攻擊。
攻擊者發送的Getbulk請求數據包約爲60字節,而請求的響應數據可以達到1500字節以上,所以,使用該方式進行放大攻擊可以達到25倍以上的放大效果,這也是一種放大效應明顯且有效的放大攻擊方式。
Character Generator Protocol (Chargen字符發生器協議)是一種簡單網絡協議,在RFC 864中被定義。該協議設計的目的是用來調試TCP或UDP協議程序、測量鏈接的帶寬或進行QoS的微調等。它的默認端口爲19,分爲基於TCP和UDP兩種方式,TCP方式下創建鏈接後,服務器會不斷傳送任意字符到客戶端,直到客戶端關閉鏈接。UDP方式下每當服務器收到客戶端的一個UDP數據包後向客戶端返回一個數據包,長度爲0~512字節之間隨機值,數據包的負載能夠是任意字符。
Chargen協議的設計初衷是爲了網絡測試,並無嚴格的訪問控制和流量控制機制,在UDP模式下任何人均可以向開放Chargen服務的主機請求服務,這種簡單的請求-回覆模式使得攻擊者能夠僞造源發地址信息向Chargen服務發送請求,而Chargen服務並不會驗證源發地址的真僞,會向源發地址發送應答包,這致使該服務可被用來進行DOS攻擊。RFC 864中給出Chargen應答包的建議大小不超過512字節,可是在實際實現過程當中,這個大小並未被嚴格限制,根據實際測試,在Linux 系統下,對於64字節的無負載UDP Chargen請求,系統回覆一個1066字節的UDP 應答報文,流量被放大了15倍,而在Windows系統下使用一樣的請求,回覆的UDP應答報文長度達3259字節,併產生了分片,流量被放大了50倍。這使得該服務能夠被用來進行放大DOS攻擊。
互聯網上家用路由器、網絡攝像頭、打印機、智能家電等智能設備廣泛採用 UPnP(即插即用)協議做爲網絡通信協議, 而UPnP設備的發現是經過源端口爲 1900 的 SSDP(簡單服務發現協議)進行相互感知。
利用SSDP協議進行反射攻擊的原理與利用DNS服務、NTP服務相似,都是僞形成被攻擊者的IP地址向互聯網上大量的智能設備發起SSDP請求,接收到請求的智能設備根據源IP地址將響應數據包返回給受害者。隨着物聯網和智能設備的快速發展和普及,利用智能設備展開DDoS攻擊會愈來愈廣泛。
攻擊鏈路與之前介紹的幾種攻擊方法有所不一樣,其攻擊的目標並非做爲互聯網斷點的服務器的寬帶資源,而是骨幹網上的鏈路的寬帶資源,對鏈路進行攻擊的一種典型的方式是Coremelt攻擊。
Coremelt是安全研究人員在2009年提出的一種針對鏈路的分佈式拒絕服務攻擊方法,攻擊者須要控制一個分佈足夠普遍的僵屍網絡來發動Coremelt攻擊。
首先,攻擊者經過traceroute等手段來判斷各個殭屍主機和將要攻擊的鏈路之間的位置關係,並根據結果將殭屍主機分爲兩個部分,而後,攻擊者控制殭屍主機,使其與鏈路另外一側的每一臺殭屍主機進行通訊並收發大量數據,這樣,大量的網絡數據包就會通過骨幹網上的被攻佔鏈路,形成網絡擁堵和延時。
從骨幹網上來看,這些殭屍主機之間相互收發的數據包確實是真是存在的通訊數據,沒有辦法將這些通訊數據與真正的合法通訊數據進行有效的區分,所以這種攻擊方式更加難以防禦和緩解。
Transmission Control Protocol(傳輸控制協議)是一種面向鏈接的、可靠的、基於字節流的傳輸層通信協議,不一樣主機的應用層之間常常須要可靠的、像管道同樣的鏈接,可是IP層沒法提供這樣的流機制,在現實的互聯網中,這種鏈接一般經過TCP協議來實現。
TCP鏈接包括三個階段:鏈接建立,數據傳送和鏈接終止,因爲在協議的設計過程中只專一於協議的可用性,而沒有對協議的安全性進行比較周密和詳細的考慮,所以TCP協議存在不少安全缺陷和安全性問題。
TCP鏈接洪水攻擊是在鏈接建立階段對TCP資源進行攻擊的。
在三次握手進行的過程當中,服務器會建立並保存TCP鏈接的信息,這個信息一般被保存在鏈接表結構中,可是,鏈接表的大小是有限的,一旦服務器接收到的鏈接數量超過了鏈接表能存儲的數量,服務器就沒法建立新的TCP鏈接了。攻擊者能夠利用大量受控主機,經過快速創建大量惡意的TCP鏈接佔滿被攻擊目標的鏈接表,使目標沒法接受新的TCP鏈接請求,從而達到拒絕服務攻擊的目的。
SYN洪水攻擊就是攻擊者利用受控主機發送大量的TCP SYN報文,使服務器打開大量的半開鏈接,佔滿服務器的鏈接表,從而影響正經常使用戶與服務器創建會話,形成拒絕服務。
在創建TCP鏈接的過程當中,若是在服務器返回SYN+ACK報文後,客戶端因爲某種緣由沒有對其進行確認,這時服務器端就須要重傳SYN+ACK報文,並等待客戶端的確認報文直到TCP鏈接超時,這種等待客戶確認的鏈接狀態一般被稱爲半開鏈接。
在鏈接超時以前,半開鏈接會一直保存在服務器的鏈接表中。
因爲鏈接表的大小是有限的,若是在短期內產生大量的半開鏈接,而這些鏈接又沒法很快的結束,鏈接表就會很快被佔滿,致使新的鏈接TCP鏈接沒法創建。
攻擊者在發送TCP SYN報文時,能夠在收到服務器返回的SYN+ACK報文後,跳過最後的ACK報文發送,使鏈接處於半開狀態,可是這樣會很明顯的暴露出進行SYN洪水攻擊的IP地址,同時相應報文會做爲反射流量佔用攻擊者的寬帶資源,因此更好的方式是攻擊者將SYN報文的源IP地址隨機僞造其餘主機的IP地址或者不存在的IP地址,這樣攻擊目標將會應答發送給被僞造的IP地址,從而佔用鏈接資源並隱藏攻擊來源。
因爲帶有PSH標誌位的TCP數據包會強制要求接收端將接收緩衝區清空並將數據提交給應用服務進行處理,所以當攻擊者利用受控主機向攻擊目標發送大量的PSH+ACK數據包時,被攻擊目標就會消耗大量的系統資源不斷地進行接收緩衝區的清空處理,致使沒法正常處理數據,從而形成拒絕服務。
在正常的TCP傳輸過程中,若是待發送的數據會清空發送緩衝區,那麼操做系統的TCP/IP協議棧就會自動爲該數據包設置PSH標誌,一樣,當服務端接收到一個設置了PSH+ACK標誌的報文時,意味着當前數據傳輸已經結束,所以須要當即將這些數據投遞交給服務進程並清空接收緩衝區,而無須等待判斷是否還會有額外的數據到達。
在TCP鏈接的終止階段,一般是經過帶有FIN標誌報文的四次交互(TCP四次握手)來切斷客戶端與服務端的TCP鏈接,可是客戶端或服務器其中之一出現異常情況,沒法正常完成TCP四次握手以終止鏈接時,就會使用RST報文將鏈接強制中斷。
在TCP鏈接中,RST表示復位,用來在異常時關閉鏈接,發送端在發送RST報文關閉鏈接時,不須要等待緩衝區中的數據報所有發送完畢,而會直接丟棄緩衝器的數據併發送RST報文,一樣,接收端在收到RST報文後,也會清空緩衝區並關閉鏈接,而且沒必要發送ACK報文進行確認。
攻擊者能夠利用RST報文的這個特性,發送僞造的帶有RST標誌位的TCP報文,強制中斷客戶端與服務端的TCP鏈接,在僞造RST報文的過程當中,服務端的IP地址和端口號是已知的,攻擊者還須要設法獲取客戶端的IP地址和端口號,而且使RST報文的序列號處於服務器的接收窗口以內,若是攻擊者和被攻擊客戶端或服務器處於同一內網,這些信息能夠經過欺騙和嗅探等方式獲取到。
不少狀況下,攻擊者不會與被攻擊客戶端或服務器處於同一內網,致使發動TCP RST攻擊時難以獲取端口和序列號,在這種狀況下,攻擊者能夠利用大量的受控主機猜想端口和序列號,進行盲打,發送RST洪水攻擊,只要在數量巨大的RST報文中有一條與攻擊目標的端口號相同,而且序列號落在目標的接收窗口之中,就可以終端鏈接。
Sockstress攻擊是研究人員在2008年提出的一種攻擊TCP鏈接的方法,與前面幾種攻擊方式不一樣的是,Sockstress攻擊不須要在短期內發送大量的攻擊流量,所以不屬於洪水攻擊,而是一種慢速攻擊。
在TCP傳輸數據時,並非將數據直接遞交給應用程序處理,而是先臨時存儲在接受緩衝區裏,該接收緩衝區的大小是由TCP窗口表示的,若是TCP窗口大小爲0,則表示接收緩衝區已被填滿,發送端應該中止發送數據,知道接收端的窗口發生了更新,Sockstress攻擊就是利用該原理長時間維持TCP鏈接,以達到拒絕服務攻擊的目的。
Sockstress攻擊首先會完成TCP三次握手以創建TCP鏈接,可是在三次握手的最後一次ACK應答中,攻擊者將其TCP窗口大小設置爲0,隨後進行一次數據請求,攻擊目標在傳輸數據時,發現接收端的TCP窗口大小爲0,就會中止傳輸數據,併發出TCP窗口探測包,詢問攻擊者其TCP窗口是否有更新,因爲攻擊者沒有更改TCP窗口的大小,被攻擊目標就會一直維持TCP鏈接等待數據發送,並不斷進行窗口更新的探測,若是攻擊者利用大量的受控主機進行Sockstress攻擊,被攻擊目標會一直維持大量的TCP鏈接並進行大量窗口更新探測,其TCP鏈接表會逐漸耗盡,沒法鏈接新的鏈接而致使拒絕服務。
Secure Sockets Layer(安全套接層)是爲網絡通訊提供安全及數據完整性的一種安全協議,SSL可以在傳輸層對網絡鏈接進行加密,以防止傳輸的數據明文被監聽和截獲。
然而,SSL協議加密、解密和祕鑰協商的過程當中會消耗大量的系統資源,嚴重下降機器的性能,所以,一般只有在傳輸密碼等機密信息時才使用SSL協議進行傳輸。攻擊者能夠利用SSL協議消耗資源的特性進行拒絕服務攻擊。
在進行SSL數據傳輸以前,通訊雙方首先要進行SSL握手,以協商加密算法交換加密祕鑰,進行身份驗證,一般狀況下,這樣的SSL握手過程只須要進行一次便可,可是在SSL協議中有一個Renegotiation選項,經過它能夠進行祕鑰的從新協商以創建新的祕鑰。
THC SSL DOS攻擊是安全研究人員在2011年提出的一種針對SSL的拒絕服務攻擊方法,這種方法就是利用Renegotiation選項,形成被攻擊目標資源耗盡,在進行SSL鏈接並握手以後,攻擊者反覆不斷的進行祕鑰從新協商過程,而祕鑰從新協商過程須要服務器投入比客戶端多15倍的CPU計算資源,攻擊者只須要一臺普通的臺式機就能拖慢一臺高性能服務器,而若是有大量主機同時進行攻擊,則會使服務器忙於協商祕鑰而徹底中止響應。
在進行SSL握手的過程當中,服務器會消耗較多的CPU計算資源進行加解密,並進行數據的有效性檢驗,對於客戶端發過來的數據,服務器須要先花費大量的計算資源進行解密,以後才能對數據的有效性進行檢驗,重要的是,不論數據是不是有效的,服務器都必須先進行解密纔可以作檢查,攻擊者能夠利用這個特性進行SSL洪水攻擊。
在進行洪水攻擊時,一個要點是須要攻擊者可以在客戶端大量的發出攻擊請求,這就須要客戶端所進行的計算儘量的少,對於SSL洪水攻擊,比較好的方式是在數據傳輸以前,進行SSL握手的過程當中發動攻擊,攻擊者並不須要完成SSL握手和祕鑰交換,而只須要在這個過程當中讓服務器去解密和驗證,就可以大量的消耗服務器的計算資源,所以,攻擊者能夠很是容易的構造祕鑰交換過程當中的請求數據,達到減小客戶端計算量的目的。
Domain Name System (域名系統)服務是互聯網的一項核心服務,經過使用DNS,人們在訪問網絡時不須要記住其IP地址,而只需輸入其域名便可,在IPv6網絡環境下,因爲IP地址由原來的32位擴展到了128位,變得更加難以記憶,DNS服務也就變得更加劇要,當DNS服務的可用性收到威脅時,互聯網上的大量設備都會受到影響甚至沒法正常運行。
DNS查詢和解析過程: 當客戶端向DNS服務器查詢某域名時,DNS服務器會首先檢查其本地緩存中是否有該域名的記錄,若是緩 存中有該域名的記錄(即命中),則直接講緩存中記錄的IP地址做爲非權威應答返回給客戶端,若是在 緩存中沒有找到該域名的記錄,則會進行迭代查詢,從根域名開始,逐級進行域名解析,直到解析出完 整的域名,以後服務器會將域名解析結果做爲應答發送給客戶端,並生成一條解析記錄保存到緩存中。
在DNS解析的過程當中,客戶端發起一次查詢請求,DNS服務器可能須要進行額外的屢次查詢才能完成解析的過程並給出應答,在這個過程當中會消耗必定的計算和網絡資源,若是攻擊者利用大量受控主機不斷髮送不一樣域名的解析請求,那麼DNS服務器的緩存會被不斷刷新,而大量解析請求不能命中緩存又致使DNS服務器必須消耗額外的資源進行迭代查詢,這會極大的增長DNS服務器的資源消耗,致使DNS響應緩慢甚至徹底拒絕服務。
DNS NXDOMAIN洪水攻擊是DNS QUERY洪水攻擊的一個變種攻擊方式,區別在於後者是向DNS服務器查詢一個真實存在的域名,而前者是向DNS服務器查詢一個不存在的域名。(NXDOMAIN = Non-eXistent Domain)
在進行DNS NXDOMAIN洪水攻擊時,DNS服務器會進行屢次域名查詢,同時,其緩存會被大量NXDOMAIN記錄所填滿,致使響應正經常使用戶的DNS解析請求的速度變慢,這與DNS QUERY洪水攻擊所達到的效果相似,除此以外,一部分DNS服務器在獲取不到域名的解析結果時,還會再次進行遞歸查詢,向其上一級的DNS服務器發送解析請求並等待應答,這進一步增長了DNS服務器的資源消耗,所以,DNS NXDOMAIN洪水攻擊一般比DNS QUERY洪水攻擊的效果更好。
近年來,Web技術發展很是迅速,人們能夠經過瀏覽器使用Web服務,簡單方便的獲取須要的信息,而許多機構和企業的重要信息和關鍵業務也是經過Web服務的方式對外提供,一旦Web服務受到解決服務攻擊,就會對其承載的業務形成致命的影響。
Web服務一般使用 HyperText Transfer Protocol (超文本傳輸協議)進行請求和響應數據的傳輸。
常見的HTTP請求有GET請求和POST請求兩種,一般GET請求用於從Web服務器獲取數據和資源,例如請求頁面、獲取圖片和文檔等;POST請求用於向Web服務器提交數據和資源,例如發送用戶名/密碼、上傳文件等。在處理這些HTTP請求的過程當中,Web服務器一般須要解析請求、處理和執行服務端腳本、驗證用戶權限並屢次訪問數據庫,這會消耗大量的計算資源和I/O訪問資源。
攻擊者利用大量的受控主機不斷的向Web服務器發送惡意大量HTTP請求,要求Web服務器處理,就會徹底佔用服務器的資源,形成其餘正經常使用戶的Web訪問請求處理緩慢設置得不處處理,致使拒絕服務,這就是HTTP洪水攻擊。
因爲HTTP協議是基於TCP協議的,須要完成三次握手創建TCP鏈接才能開始HTTP通訊,所以進行HTTP洪水攻擊時沒法使用僞造源IP地址的方式發動攻擊,這時,攻擊者一般會使用HTTP代理服務器,HTTP代理服務器在互聯網上普遍存在,經過使用HTTP代理服務器,不只能夠隱藏來源以免被追查,還可以提升攻擊的效率——攻擊者鏈接代理服務器併發送完成請求後,能夠直接切斷與該代理服務器的鏈接並開始鏈接下一個代理服務器,這時代理服務器與目標Web服務器的HTTP鏈接依然保持,Web服務器須要繼續接收數據並處理HTTP請求。
與DNS服務相似,Web服務也存在緩存機制,若是攻擊者的大量請求都命中了服務器緩存,那麼這種攻擊的主要做用僅體現再消耗網絡寬帶資源上,對於計算和I/O資源的消耗是很是有限的,所以,高效的HTTP洪水攻擊應不斷髮出針對不一樣資源和頁面的HTTP請求,並儘量請求沒法被緩存的資源,從而加劇服務器的負擔,加強攻擊效果。
此外,若是Web服務器支持HTTPS,那麼進行HTTPS洪水攻擊是更爲有效的一種攻擊方式,一方面,在進行HTTPS通訊時,Web服務器須要消耗更多的資源用來進行認證和加解密,另外一方面,一部分的防禦設備沒法對HTTPS通訊數據流進行處理,也會致使攻擊流量繞過防禦設備,直接對Web服務器形成攻擊。
HTTP洪水攻擊是目標對Web服務威脅最大的攻擊之一,有大量的攻擊工具支持HTTP洪水攻擊,發動簡單其效果明顯,已經成爲攻擊者使用的主要攻擊方式之一。
Slowloris攻擊是一種針對web服務器的慢速HTTP攻擊,由安全研究人員在2009年提出。
在HTTP協議中規定,HTTP頭部以連續的「rnrn」做爲結束標誌,許多Web服務器在處理HTTP請求的頭部信息時,會等待頭部傳輸結束後再進行處理,所以,若是Web服務器沒有接受到連續的「rnrn」,就會一直接受數據並保持與客戶端的鏈接,利用這個特性,攻擊者可以長時間與Web服務器保持聯繫,並逐漸耗盡Web服務器的鏈接資源。
攻擊者在發送HTTP GET請求時,緩慢的發送無用的header字段,而且一直不發送「rnrn」結束標誌,這樣就可以長時間佔用與Web服務器的鏈接並保證該鏈接不被超時中斷,然而,Web服務器可以處理的併發鏈接數是有限的,若是攻擊者利用大量的受控主機發送這種不完整的HTTP GET請求並持續佔用這些鏈接,就會耗盡Web服務器的鏈接資源,致使其餘用戶的HTTP請求沒法被處理,形成拒絕服務。
慢速POST請求攻擊也是一種針對Web服務器的慢速HTTP攻擊,由安全研究人員在2010年提出,與Slowloris攻擊不一樣的是,慢速POST請求攻擊利用緩慢發送HTTP BODY的方式達到佔用並耗盡Web服務器鏈接資源的目的。
在HTTP頭部信息中,可使用Content-Length字段來指定HTTP消息實體的傳輸長度,當Web服務器接收到的請求頭部中含有Content-Length字段時,服務器會將該字段的值做爲HTTP BODY的長度,持續接收數據並在達到Content-Length值時對HTTP BODY的數據內容進行處理,利用這個特性,攻擊者可以長時間與Web服務器保持鏈接,並逐漸耗盡Web服務器的鏈接資源。
攻擊者在發送HTTP POST請求時,在請求頭部中將Content-Length設置爲一個很大的值,並將HTTP BODY以很是緩慢的速度一個字節一個字節的向Web服務器發送,這樣,Web服務器就須要一直維持與客戶端的鏈接並等待數據傳輸結束,因爲Content-Length被設置成了很大的值,而HTTP BODY的傳輸速度又很是緩慢,攻擊者就能夠長時間佔用這個鏈接,經過間斷性的發送單字節的HTTP BODY內容,攻擊者就可以確保鏈接不因超時而致使中斷,若是攻擊者利用大量的受控主機發送這種緩慢的HTTP POST請求並持續佔用這些鏈接,就會耗盡Web服務器的鏈接資源,致使其餘用戶的HTTP請求沒法被處理,形成拒絕服務。
Web服務器在收到HTTP請求以後,須要檢查並處理其中的數據,經過惡意構造請求數據的內容,攻擊者能夠顯著的增長數據處理過程當中的資源消耗,形成拒絕服務攻擊。
這裏以正則表達式拒絕服務攻擊和哈希衝突拒絕服務攻擊爲例進行說明。
正則表達式拒絕服務攻擊又被稱爲ReDoS,是安全研究人員在2009年發現的一種拒絕服務攻擊方法,在處理請求數據時,Web應用一般會使用正則表達式進行字符的匹配操做,一部分正則表達式引擎會使用一種被稱爲非肯定性有限狀態自動機的實現方式,以便可以處理複雜的正則表達式,例如包含了向後引用或者捕獲括號的正則表達式。然而,這種正則引擎的實現方式也致使了其處理時間增長,尤爲是在肯定「否認匹配」時,正則引擎須要對全部可能的匹配路徑所有進行測試,若是位於Web應用中的正則表達式寫的很差,須要測試的匹配路徑數量會隨着輸入字符串的長度呈指數級增加,利用惡意構造的輸入字符串,攻擊者只須要提交相對較短的輸入字符串,就能夠強制正則引擎處理數億個匹配路徑,所需時間能夠達到幾個小時甚至幾天,只須要幾個這種相似的惡意正則表達式匹配請求,就可以徹底佔用Web服務器的計算資源,形成Web服務器拒絕服務。
哈希衝突拒絕服務攻擊是安全研究人員在2011年提出的一種拒絕服務攻擊方法,web應用在處理請求中的POST數據時,一般使用鍵-值對的方式來進行存儲,在PHP、Python、Java等語言中,鍵-值對的實質是一個哈希表,web應用程序經過計算「鍵」的哈希來獲取其所對應的的「值」。正常狀況下,這個哈希表的哈希衝突較少,所以進行查找和插入的速度很快,正常狀態下的哈希表如圖所示。
若是攻擊者構造一組惡意的POST數據,使得請求中的「鍵」的哈希值所有相同,那麼保存POST數據的哈希表就會所以退化成爲鏈表 ,對哈希表的查找和插入等操做規則變成了對鏈表的遍歷操做,形成大量的計算資源被佔用,致使拒絕服務攻擊。如圖所示爲大量衝突狀態下的哈希表。
攻擊分類 | 洪水攻擊 | 慢速攻擊 |
---|---|---|
網絡層攻擊 | ICMP/IGMP洪水攻擊 | / |
傳輸層攻擊 | UDP洪水攻擊 SYN洪水攻擊 TCP鏈接洪水攻擊 PSH+ACK洪水攻擊 ACK反射攻擊 RST洪水攻擊 SSL洪水攻擊 |
Sockstress攻擊 THC SSL Dos攻擊 |
應用層攻擊 | DNS QUERY洪水攻擊 DNS NXDOMAIN洪水攻擊 DNS放大攻擊 HTTP洪水攻擊 SNMP放大攻擊 NTP放大攻擊 |
Slowloris攻擊 慢速POST請求攻擊 數據處理過程攻擊 |
要保證網絡設備不能成爲瓶頸,所以選擇路由器、交換機、硬件防火牆等設備的時候要儘可能選用知名度高、口碑好的產品。再就是假如和網絡提供商有特殊關係或協議的話就更好了,當大量攻擊發生的時候請他們在網絡接點處作一下流量限制來對抗某些種類的DDoS攻擊是很是有效的。
網絡帶寬直接決定了能抗受攻擊的能力,倘若僅僅有10M帶寬的話,不管採起什麼措施都很難對抗如今的SYN Flood攻擊。因此,最好選擇100M的共享帶寬,固然是掛在1000M的主幹上了。
在有網絡帶寬保證的前提下,請儘可能提高硬件配置,要有效對抗每秒10萬個SYN攻擊包。並且最好能夠進行優化資源使用,提升web server 的負載能力。
經過DDoS硬件防火牆對異常流量的清洗過濾,經過數據包的規則過濾、數據流指紋檢測過濾、及數據包內容定製過濾等頂尖技術能準確判斷外來訪問流量是否正常,進一步將異常流量禁止過濾。
把網站儘量作成靜態頁面,不只能大大提升抗攻擊能力,並且還給黑客入侵帶來很多麻煩,最好在須要調用數據庫的腳本中,拒絕使用代理的訪問,經驗代表,使用代理訪問你網站的80%屬於惡意行爲。
這是目前網絡安全界防護大規模DDoS攻擊的最有效辦法。分佈式集羣防護的特色是在每一個節點服務器配置多個IP地址,而且每一個節點能承受不低於10G的DDoS攻擊,如一個節點受攻擊沒法提供服務,系統將會根據優先級設置自動切換另外一個節點,並將攻擊者的數據包所有返回發送點,使攻擊源成爲癱瘓狀態,從更爲深度的安全防禦角度去影響企業的安全執行決策。
對穩定性、流暢性以及安全性上要求較高的業務,用戶遭受 DDoS 攻擊且達到必定峯值時,系統經過 IP 輪詢機制,將從IP 池中靈活調取一個新的 IP 充當業務 IP,使攻擊者失去攻擊目標,以此保證業務在 DDoS 的攻擊下正常運轉。
當用戶應用 BGP 高防 IP 且配置轉發規則和域名回源後,此時全部的訪問流量都將流經 BGP 高防 IP 集羣,經過端口協議轉發的方式(支持網站業務和非網站業務)將訪問流量轉發至源站,同時攻擊流量將在 BGP 高防 IP 集羣進行清洗和過濾,只會將正常業務流量返回至源站,從而確保源站業務的穩定。
針對反射放大類攻擊,都有相同的特色,能夠直接在運營商側進行過濾,不用將流量流入抗D設備,從而使防護與反射放大類壓制更有效果。本不存在放大效果,但基於其真實 IP 的緣由,穿透性與隱蔽性都十分顯著。
流量預壓制/UDP 預壓制等能力,從容應對新型的超大流量攻擊。 (Memcached的5W倍反射)
參考資料:綠盟科技博客,原文連接
《破壞之王:DDos攻擊與防範深度剖析》 做者:鮑旭華、洪海、曹志華