(一)DDos分布式拒絕服務
DDos是Distributed Denial of Service攻擊的簡稱,即分布式拒絕服務。
借助于客戶/服務器技術,將多個計算機聯合起來作為攻擊平臺,對一個或多個目標發動DDoS攻擊,從而成倍地提高拒絕服務攻擊的威力。通常,攻擊者使用一個偷竊帳號將DDoS主控程序安裝在一個計算機上,在一個設定的時間主控程序將與大量代理程序通訊,代理程序已經被安裝在網絡上的許多計算機上。代理程序收到指令時就發動攻擊。利用客戶/服務器技術,主控程序能在幾秒鐘內激活成百上千次代理程序的運行。
DDos攻擊主要是通過大量合法的請求占用大量網絡資源,以達到癱瘓網絡的目的。
(二)DDos攻擊分類
依據消耗目標資源的不同,可分為
(1)攻擊網絡帶寬資源
(2)攻擊系統資源
(3)攻擊應用資源
依據攻擊數據包發送的頻率和速度來劃分
(1)洪水攻擊
(2)慢速攻擊
1. 攻擊網絡帶寬資源
無論是服務器的網絡接口帶寬,還是路由器、交換機等互聯網基礎設施,其數據包處理能力都是存在著事實上的上限的,當到達或通過的網絡數據包數量超過了這個上限時,就會出現網絡擁堵、響應緩慢的情況。
消耗網絡帶寬資源的DDos攻擊就是根據這個原理,利用受控主機發送大量的網絡數據包,占滿被攻擊目標的全部帶寬,從而使正常的請求無法得到及時有效的響應,造成拒絕服務。
1.1 直接攻擊
1.1.1 ICMP/IGMP洪水攻擊
網絡控制消息協議ICMP用于在TCP/IP網絡中發送控制信息,因特網組管理協議IGMP用于管理因特網協議多播組成員。
攻擊者使用受控主機向被攻擊目標發送大量的ICMP/IGMP報文,進行洪水攻擊以消耗目標的帶寬資源。
這種類型的攻擊出現得很早,但現在已不多見,被攻擊目標可以在其網絡邊界直接過濾并丟棄ICMP/IGMP數據包使攻擊無效。
1.1.2 UDP洪水攻擊
用戶數據報協議UDP是一種面向無連接的傳輸層協議,主要用于不要求分組順序到達的傳輸目的。
利用UDP數據報文,攻擊者可以發動洪水攻擊,通常會分為小包和大包兩種攻擊方式。
小包是指64字節大小的數據包,這是以太網上傳輸數據幀的最小值。
在相同流量下,單包體積越小,包數量就越多。
由于交換機、路由器等網絡設備需要對每一個數據包進行檢查和校驗,因此使用UDP小包攻擊能夠最有效地增大網絡設備處理數據包的壓力,造成處理速度的緩慢和傳輸延遲等拒絕服務效果。
大包是指1500字節以上的數據包,其大小超過了以太網的MTU最大傳輸單元,使用UDP大包攻擊,能夠有效地占用網絡接口的傳輸帶寬,并迫使被攻擊目標在接收到UDP數據時進行分片重組,造成網絡擁堵,服務響應緩慢。
UDP洪水攻擊出現得很早,它完全依靠受控主機本身的網絡性能,通常對攻擊目標帶寬資源的消耗并不太大。
1.2 反射和放大攻擊
1.2.1 ACK反射攻擊
在傳輸控制協議TCP建立連接時,首先會進行TCP三次握手。
在此過程中,當服務器端接收到客戶端發來的SYN連接請求時,會對該請求進行ACK應答。
利用TCP握手的ACK應答,即可進行ACK反射攻擊。
如果攻擊者將SYN的源IP地址偽造成被攻擊目標的IP地址,服務器的應答也就會發送給被攻擊目標。
由于使用TCP協議的服務在互聯網上廣泛存在,攻擊者可以通過受控主機向大量不同的服務器發送偽造源IP地址的SYN請求,從而使服務器響應的大量ACK應答數據涌向被攻擊目標,占用目標的網絡帶寬資源并造成拒絕服務。
在發動ACK反射攻擊時,首先需要進行掃描,獲得大量的反射器地址,并分別向這些反射器發送偽造源地址的SYN請求數據。
ACK反射攻擊的優點主要在于能夠比較有效地隱藏攻擊的來源。
1.2.2 DNS放大攻擊
域名系統DNS是因特網的一項核心服務,它將域名和IP地址相互映射。DNS使用TCP/UDP 53端口通信,主要使用UDP協議。
通常,DNS響應數據包會比查詢數據包大,因此攻擊者利用普通的DNS查詢請求就能夠發動放大攻擊。
在以前,對DNS查詢的響應數據包被限制在512字節以內,多余的字節根據實現的不同可能會被丟棄或使用TCP協議建立連接并重傳。
后來出現了DNS擴展機制EDNS0擴展了DNS數據包的結構,增加了OPT RR字段。
該字段包含了客戶端能夠處理的最大UDP報文大小的信息,服務端在響應DNS請求時,根據該字段的大小生成響應報文。
攻擊者發送的DNS查詢請求數據包大小一般為60字節左右,而查詢返回結果的數據包大小通常在3000字節以上。使用該方式進行放大攻擊能夠達到50倍以上的放大效果。
發動DNS放大攻擊需要先進行掃描,獲得
大量的開放DNS解析器地址,并向這些地址發送偽造源IP的查詢命令來放大攻擊流量。
1.2.3 NTP放大攻擊
網絡時間協議NTP用于使計算機與時鐘源進行同步和校正,它使用UDP 123端口通信。
NTP協議的monlist請求能夠獲取與目標NTP服務器進行同步的最近600個客戶端的IP地址等信息。
這意味著,只需要發送一個很小的請求包,就能夠觸發大量連續的UDP響應數據包。
使用該方式進行放大攻擊能夠達到700倍以上的放大效果。
發動NTP放大攻擊需要先進行掃描,獲得大量的NTP服務器,并向這些NTP服務器發送偽造源地址的請求來放大攻擊流量。
1.2.4 SNMP放大攻擊
簡單網絡管理協議SNMP是目前網絡中應用最為廣泛的網絡管理協議,它使用UDP 161端口通信。
攻擊者向廣泛存在并開啟了SNMP服務的網絡設備發送GetBulk請求,使用默認通信字符串作為認證憑據,并將源IP地址偽造成攻擊目標的IP地址。
設備收到GetBulk請求后,會將響應結果發送給攻擊目標。當大量的響應結果涌向攻擊目標時,就會導致攻擊目標網絡擁堵和緩慢,造成拒絕服務。
使用該方式進行放大攻擊能夠達到25倍以上的放大效果。
在發動SNMP放大攻擊時,需要先進行掃描,獲得開放SNMP協議的網絡設備,雖然開放SNMP協議的網絡設備很多,但是還需要猜測它們使用的默認通信字符串,因此該方式更復雜一些。
2.攻擊系統資源
終端設備在與服務器進行通信時,經常需要創建會話連接,在此過程中通常會使用TCP和SSL等協議。
會話連接一旦被占滿,新進入的會話請求就必須等待前面的會話完成。
消耗系統資源的DDoS攻擊的主要目的就是對系統維護的連接資源進行消耗和占用,阻止正常連接的建立,從而達到拒絕服務的目的。
2.1 攻擊TCP連接
2.1.1 TCP連接洪水攻擊
在TCP三次握手的過程中,服務器會創建并保存TCP連接的信息到連接表中。連接表的大小是有限的,一旦服務器接收到的連接數量超過了連接表能存儲的數量,服務器就無法創建新的TCP連接了。
攻擊者可以利用大量受控主機,通過快速建立大量惡意的TCP連接占滿被攻擊目標的連接表,使目標無法接受新的TCP連接請求,從而達到拒絕服務攻擊的目的。
2.1.2 SYN洪水攻擊
在建立TCP連接的過程中,如果在服務器返回SYN+ACK報文后,客戶端沒有對其進行確認,服務器就需要重傳SYN+ACK報文,并等待客戶端的確認報文直到TCP連接超時。
這種等待客戶端確認的連接狀態通常被稱為半開連接。在連接超時之前,半開連接會一直保存在服務器的連接表中。
由于連接表的大小是有限的,如果在短時間內產生大量的半開連接,而這些連接又無法很快地結束,連接表就會迅速被占滿,導致新的TCP連接無法建立。
SYN洪水攻擊就是攻擊者利用受控主機發送大量的SYN報文,使服務器打開大量的半開連接,占滿服務器的連接表,從而影響正常用戶與服務器建立會話,造成拒絕服務。
這種攻擊方式會很明顯地暴露出攻擊者的IP地址,同時響應報文會作為反射流量占用攻擊者的帶寬資源。
更好的方式是將SYN報文的源IP地址隨機偽造成其他地址,這樣攻擊目標會將應答發送給偽造地址,從而占用連接資源并隱藏攻擊來源。
2.1.3 PSH+ACK洪水攻擊
由于帶有PSH標志位的TCP數據包會強制要求接收端將接收緩沖區清空并將數據提交給應用服務進行處理,因此當攻擊者利用受控主機向攻擊目標發送大量的PSH+ACK數據包時,被攻擊目標就會消耗大量的系統資源不斷地進行接收緩沖區的清空處理,導致無法正常處理數據,從而造成拒絕服務。
單獨使用PSH+ACK洪水攻擊對服務器產生的影響并不十分明顯,更有效的方式是SYN洪水攻擊與ACK洪水攻擊相結合,這樣能夠繞過一部分防護設備,增強攻擊效果。
2.1.4 Sockstress慢速攻擊
在TCP傳輸數據時,會將數據臨時存儲在接收緩沖區中,該接收緩沖區的大小是由TCP窗口表示的。
如果TCP窗口大小為0則表示接收緩沖區已滿,發送端應該停止發送數據,直到接收端窗口更新。
Sockstress慢速攻擊就是利用該原理長時間地維持TCP連接,以達到拒絕服務的目的。
Sockstress慢速攻擊首先會完成TCP三次握手以建立TCP連接,在最后的ACK應答中,攻擊者將其TCP窗口設置為0后再進行一次數據請求。
攻擊目標在傳輸數據時,發現接收端的TCP窗口大小為0就會停止傳輸數據,并發出TCP窗口探測包,詢問攻擊者其TCP窗口是否更新。
由于攻擊者沒有更新TCP窗口大小,攻擊目標會一直維持TCP連接等待數據發送,并不斷進行窗口更新探測。
攻擊目標的TCP連接表將逐漸耗盡,無法接受新的連接而導致拒絕服務。
Sockstress慢速攻擊的另一種方式是將TCP窗口設置為一個非常小的值,這樣攻擊目標將不得不把需要發送的數據切分成大量很小的分片,這會極大地消耗目標的內存和處理器資源,造成系統響應緩慢和拒絕服務。
2.2 攻擊SSL連接
2.2.1 THC SSL DoS攻擊
在進行SSL數據傳輸之前,通信雙方首先要進行SSL握手,以協商加密算法交換加密密鑰,進行身份認證。
通常情況下,這樣的SSL握手過程只需要進行一次即可,但是在SSL協議中有一個Renegotiation選項,通過它可以進行密鑰的重新協商以建立新的密鑰。
THC SSL DoS攻擊就是這樣反復不斷地進行密鑰重新協商過程,該過程需要服務器投入比客戶端多15倍的CPU計算資源。
攻擊者只需要一臺普通PC就能夠拖慢一臺高性能服務器,如果有大量主機同時進行攻擊,就會使服務器忙于協商密鑰而完全停止響應。
2.2.2 SSL洪水攻擊
在SSL握手的過程中,服務器會消耗較多的CPU計算資源對數據先進行解密再進行有效性檢驗。
攻擊者可以利用這個特性進行SSL洪水攻擊。
3.攻擊應用資源
網絡應用和服務在處理數據時,通常需要消耗一定的網絡連接、計算和存儲資源,這些資源是由應用程序向系統進行申請并自行管理和維護的。
消耗應用資源的DDoS攻擊就是通過向應用提交大量消耗資源的請求,從而達到拒絕服務的目的。
3.1 攻擊DNS服務
3.1.1 DNS QUERY洪水攻擊
DNS QUERY洪水攻擊是指向DNS服務器發送大量查詢請求以達到拒絕服務效果的一種攻擊方法。
在DNS解析的過程中,客戶端發起一次查詢請求,DNS服務器可能需要進行額外的多次查詢才能完成解析的過程并給出應答,在這個過程中會消耗一定的計算和網絡資源。
如果攻擊者利用大量受控主機不斷發送不同域名的解析請求,那么DNS服務器的緩存會被不斷刷新,而大量解析請求不能命中緩存又導致DNS服務器必須消耗額外的資源進行迭代查詢,這會極大地增加DNS服務器的資源消耗,導致DNS響應緩慢甚至完全拒絕服務。
進行DNS QUERY洪水攻擊的要點在于每一個DNS解析請求所查詢的域名應是不同的,這樣可以比較有效地避開DNS服務器緩存中的解析記錄,達到更好的資源消耗效果。
3.1.2 DNS NXDOMAIN洪水攻擊
DNS NXDOMAIN洪水攻擊是DNS QUERY洪水攻擊的一個變種,它向DNS服務器查詢不存在的域名。
在進行DNS NXDOMAIN洪水攻擊時,DNS服務器會進行多次域名查詢,其緩存會被大量NXDOMAIN記錄所填滿,導致響應正常用戶的DNS解析請求的速度變慢。
與DNS QUERY洪水攻擊所達到的效果類似。
3.2 攻擊Web服務
3.2.1 HTTP洪水攻擊
在處理HTTP請求的過程中,Web服務器通常需要解析請求、處理和執行服務端腳本、驗證用戶權限并多次訪問數據庫,這會消耗大量的計算資源和I/O訪問資源。
如果攻擊者利用大量受控主機不斷地向Web服務器惡意發送大量HTTP請求,要求Web服務器處理,就會完全占用服務器的資源,造成其他正常用戶的Web訪問請求處理緩慢甚至得不到處理,造成拒絕服務。
由于HTTP協議是基于TCP協議的,需要完成三次握手建立TCP連接才能開始HTTP通信,因此進行HTTP洪水攻擊時無法使用偽造源IP地址的方式發動攻擊。
這時,攻擊者通常會使用HTTP代理服務器,這樣不僅可以隱藏來源以避免被追查,還能夠提高攻擊的效率,攻擊者連接代理服務器并發送完請求后,可以直接切斷與該代理服務器的連接并開始連接下一個代理服務器。
這時代理服務器與目標Web服務器的HTTP連接依然保持,Web服務器需要繼續接收數據并處理HTTP請求。
Web服務也存在緩存機制,如果攻擊者的大量請求都命中了服務器緩存,那么這種攻擊的主要作用僅體現在消耗網絡帶寬資源上,對于計算和I/O資源的消耗是非常有限的。
因此,高效的HTTP洪水攻擊應不斷發出針對不同資源和頁面的HTTP請求,并盡可能請求無法被緩存的資源,從而加重服務器的負擔,增強攻擊效果。
3.2.2 Slowloris慢速攻擊
HTTP首部以連續的"\r\n\r\n"作為結束標志。許多Web服務器在處理HTTP請求的首部信息時,會等待首部傳輸結束后再進行處理。
如果Web服務器沒有接收到連續的"\r\n\r\n"標志,就會一直接收數據并保持與客戶端的連接。
利用這個特性,攻擊者能夠長時間與Web服務器保持連接,并逐漸耗盡Web服務器的連接資源,導致其他用戶的HTTP請求無法被處理,造成拒絕服務。
3.2.3 POST慢速攻擊
在HTTP首部信息中,可以使用Content-Length字段來指定HTTP消息實體的傳輸長度。
當Web服務器接收到的請求首部中含有Content-Length字段時,服務器會將該字段的值作為POST實體的長度,持續接收數據并在到達Content-Length值時對POST實體的數據內容進行處理。
攻擊者在發送HTTP POST請求時,在請求首部中將Content-Length設置為一個很大的值,并將POST實體以非常緩慢的速度一個字節一個字節的向Web服務器發送。
通過間隔性地發送單字節的POST實體內容,攻擊者能夠確保連接不因超時而中斷。
利用這個特性,攻擊者能夠長時間與Web服務器保持連接,并逐漸耗盡Web服務器的連接資源,導致其他用戶的HTTP請求無法被處理,造成拒絕服務。
(三)攻擊現象
(1)被攻擊主機上有大量等待的TCP連接;
(2)網絡中充斥著大量的無用的數據包;
(3)源地址為假 制造高流量無用數據,造成網絡擁塞,使受害主機無法正常和外界通訊;
(4)利用受害主機提供的傳輸協議上的缺陷反復高速的發出特定的服務請求,使主機無法處理所有正常請求;
(5)嚴重時會造成系統死機。
(四)防御方法
在發生DDoS攻擊的情況下,可以通過一些緩解技術來減少攻擊對自身業務和服務的影響,從而在一定程度上保障業務正常運行。
緩解DDoS攻擊的主要方法是對網絡流量先進行稀釋再進行清洗。
4.1 攻擊流量的稀釋
4.1.1 內容分發網絡 CDN
CDN技術的初衷是提高互聯網用戶對網站靜態資源的訪問速度,由于分布式多節點的特點,它也能夠對DDoS攻擊的流量產生稀釋的效果。
CDN在互聯網范圍內廣泛設置多個節點作為代理緩存,并將用戶的訪問請求導向最近的緩存節點,以加快訪問速度。
CDN使用智能DNS系統,一個域名對應一張IP地址表,當收到域名解析請求時,智能DNS會查看解析請求的來源,并給出地址表中距離請求來源最近的IP地址。
用戶收到域名解析應答時,認為該CDN節點就是他請求的域名所對應的IP地址,并向該節點發起服務或資源請求。
CDN節點在收到用戶的請求時,會在其存儲的緩存內容中尋找用戶請求的資源,如果找到,就直接將資源響應給用戶,如果找不到,則作為代理服務器向源站請求資源并將結果緩存并返回給用戶。
對于有大量靜態資源的網站,使用CDN進行代理緩存能夠大大減少源站的訪問流量。
在發生DDoS攻擊時,智能DNS會將來自不同位置的攻擊流量分散到對應位置的CDN節點上,從而達到流量稀釋的效果。
利用CDN技術只能稀釋通過域名發起的DDoS攻擊的流量,如果攻擊者直接通過IP地址進行攻擊,就不會經過智能DNS解析,也就無法稀釋流量了。
4.1.2 任播 Anycast
Anycast技術是一種網絡尋址和路由方法。通過使用它,多臺提供特定服務的服務器可以使用相同的IP地址,客戶端訪問請求報文將會被IP網絡路由到這一組服務器中最近的一臺之上。
Anycast技術通常是通過在不同的節點處同時使用BGP協議向外聲明同樣的目的IP地址的方式實現的。
使用Anycast技術能夠稀釋DDoS攻擊流量,在Anycast尋址過程中,流量會被導向最近的節點,攻擊者不能對流量路徑進行操控。
由于Anycast技術的高度可靠性,即使少數節點被DDoS攻擊打垮,其周圍客戶端的請求也能夠被快速地引導向其他可用的服務器,從而保證服務的高可用性。
4.2.攻擊流量的清洗
4.2.1 IP信譽檢查
IP信譽機制是指為互聯網上的IP地址賦予一定的信譽值,那些過去或現在經常被作為僵尸主機發動DDoS攻擊的IP地址會被賦予較低的信譽值。
當發生DDoS攻擊時,流量清洗設備會對通過的網絡流量進行IP信譽檢查,優先丟棄信譽值低的IP地址所發來的數據包或建立的會話連接。
IP信譽檢查的極端情況就是IP黑名單機制,如果數據包的來源存在于黑名單之中,則直接丟棄。
這種方式一般會造成較多的誤報。
4.2.2 攻擊特征匹配
多數情況下,發動DDoS攻擊需要借助工具,為了提高發送請求的效率,攻擊工具發出的數據包通常是由編寫者偽造并固化到工具中的,因此一種攻擊工具所發出的數據包載荷會具有一定的特征。
流量清洗設備可以將這些數據包載荷中的特征作為指紋,來識別工具所發出的攻擊流量。
命中指紋特征的數據包會被丟棄。
4.2.3 速度檢查與限制
一些攻擊方法在數據包載荷上可能并不存在明顯的特征,沒有辦法進行攻擊特征匹配,但卻在請求數據包發送的頻率和速度上有著明顯的異常。
這些攻擊方法可以通過速度與限制來進行清洗。
例如在受到THC SSL DoS攻擊時,會在同一個SSL會話中多次進行密鑰協商,而正常情況下是不會這樣的,因此當流量清洗設備發現SSL會話中密鑰協商的次數超過了特定的值,就可以中斷這個會話并將來源IP加入黑名單中。
再如受到Slowloris和POST慢速攻擊時,客戶端和服務器之間會以非常低的速率進行交互和數據傳輸,流量清洗設備在發現HTTP請求長時間沒有完成傳輸時,就可以將會話中斷。
4.2.4 TCP代理和驗證
在一個TCP SYN請求到達流量清洗設備后,設備并不將它交給服務器,而是回復一個SYN+ACK響應,并等待客戶端回復。
如果SYN請求來自合法用戶,那么它會對SYN+ACK進行響應,這時流量清洗設備會代替用戶與服務器建立TCP連接,之后合法用戶和服務器之間就通過流量清洗設備進行通信。
而如果SYN請求來自攻擊者,它通常不會對SYN+ACK進行響應,從而形成半開連接。流量清洗設備會暫時保留半開連接,在經過短暫超時后丟棄它。
相比于服務器,流量清洗設備對連接表進行了優化,能夠處理極其龐大的連接請求,因此即使有非常多的SYN請求同時涌向清洗設備,它也能夠處理。
在此過程中,服務器并沒有消耗任何連接資源,因此保證了服務器的性能不受影響。
4.2.5 協議完整性驗證
為了提高發送攻擊請求的效率,大多數的攻擊方法都只會發送攻擊請求,而不接收和處理服務器的響應數據。
因此,如果能夠對請求來源進行交互式驗證,就可以檢查請求來源協議實現的完整性。對于協議實現不完整的請求來源,通常可以丟棄其數據包。
例如對于提供HTTP服務的Web服務器,可以使用302重定向來驗證請求來源是否完整實現了HTTP協議。
HTTP狀態碼302表示請求的資源被臨時轉移,并會給出一個轉移后的地址。合法用戶在接收到302重定向響應碼后會順著跳轉地址尋找對應的資源,而攻擊工具則不會進行跳轉。
因此,攻擊請求將會被流量清洗設備攔截并丟棄,Web服務器不會受到影響。
4.2.6 客戶端真實性驗證
一些攻擊工具在開發過程中使用了第三方庫,完整實現了協議交互功能。對于這些攻擊工具,需要使用客戶端真實性驗證技術進行攻擊流量清洗。
例如對于Web服務,可以通過檢查客戶端是否支持JavaScript來驗證請求是否來自合法用戶。
對于加入了JavaScript解析和執行功能的攻擊工具,則需要使用驗證碼來進行識別。
對于無法解析JavaScript或無法識別驗證碼的請求,流量清洗設備可以丟棄它,從而保護Web服務器不受影響。
總而言之,DDos防御的主要方法
(1)盡可能對系統加載最新補丁,并采取有效的合規性配置,降低漏洞利用風險;
(2)采取合適的安全域劃分,配置防火墻、入侵檢測和防范系統,減緩攻擊。
(3)采用分布式組網、負載均衡、提升系統容量等可靠性措施,增強總體服務能力。
(4)隱藏服務器的真實IP地址