DDos又叫分布式拒絕服務(wù),全稱Distributed Denial of Service,利用DDos造成的攻擊稱為拒絕服務(wù)攻擊,其原理就是利用大量的請求造成資源過載,導(dǎo)致服務(wù)不可用。
DDos攻擊從層次上可分為網(wǎng)絡(luò)層攻擊與應(yīng)用層攻擊,從攻擊手法上可分為快型流量攻擊與慢型流量攻擊,但其原理都是造成資源過載,導(dǎo)致服務(wù)不可用。
網(wǎng)絡(luò)層DDos攻擊
網(wǎng)絡(luò)層DDos攻擊包括SYN flood、UDP flood、ICMP flood等。
SYN flood攻擊
SYN flood攻擊主要利用了TCP三次握手過程中的bug,我們知道TCP三次握手過程是要建立連接的雙方發(fā)送SYN,SYN+ACK,ACK數(shù)據(jù)包,而當(dāng)攻擊方隨意構(gòu)造源ip去發(fā)送SYN包時,服務(wù)器返回的SYN+ACK就不能得到應(yīng)答(因為ip是隨意構(gòu)造的),此時服務(wù)器就會嘗試重新發(fā)送,并且會有至少30s的等待時間,導(dǎo)致資源飽和服務(wù)不可用,此攻擊屬于慢型dos攻擊。
UDP flood攻擊
由于udp是一種無連接的協(xié)議,因此攻擊者可以偽造大量的源IP地址去發(fā)送udp包,此種攻擊屬于大流量攻擊。正常應(yīng)用情況下,UDP包雙向流量會基本相等,因此在消耗對方資源的時候也在消耗自己的資源。
ICMP flood攻擊
此攻擊屬于大流量攻擊,其原理就是不斷發(fā)送不正常的ICMP包(所謂不正常就是ICMP包內(nèi)容很大),導(dǎo)致目標(biāo)帶寬被占用,但其本身資源也會被消耗。并且目前很多服務(wù)器都是禁ping的(在防火墻在可以屏蔽icmp包),因此這種方式已經(jīng)落伍。
網(wǎng)絡(luò)層DDos防御
網(wǎng)絡(luò)層的DDos攻擊究其本質(zhì)其實是無法防御的,我們能做得就是不斷優(yōu)化自身的網(wǎng)絡(luò)架構(gòu),以及提升網(wǎng)絡(luò)帶寬。
應(yīng)用層DDos攻擊
應(yīng)用層DDos攻擊不是發(fā)生在網(wǎng)絡(luò)層,是發(fā)生在TCP建立握手成功之后,應(yīng)用程序處理請求的時候。
CC攻擊
CC攻擊還有一段比較有趣的來歷,據(jù)說當(dāng)時綠盟為了防御DDos攻擊研發(fā)了一款產(chǎn)品,叫做“Collapasar”,能夠有效的防御SYN flood攻擊。然而黑客為了挑釁,研發(fā)了一款Challenge Collapasar工具(簡稱CC)。
CC攻擊的原理,就是針對消耗資源比較大的頁面不斷發(fā)起不正常的請求,導(dǎo)致資源耗盡。因此在發(fā)送CC攻擊前,我們需要尋找加載比較慢,消耗資源比較多的網(wǎng)頁,比如需要查詢數(shù)據(jù)庫的頁面、讀寫硬盤文件的等。通過cc攻擊,使用爬蟲對某些加載需要消耗大量資源的頁面發(fā)起http請求。
slowloris
這是由于webserver中間件漏洞引發(fā)的拒絕服務(wù)攻擊,其原理是以極低的速度往服務(wù)器發(fā)送HTTP請求。apache等中間件默認(rèn)會設(shè)置最大并發(fā)鏈接數(shù),而這種攻擊就是會持續(xù)保持連接,導(dǎo)致服務(wù)飽和不可用。slowloris有點類似基于HTTP協(xié)議的SYN flood攻擊。
poc
構(gòu)造以下畸形http請求包
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
完整的http請求頭結(jié)尾應(yīng)該是兩次的\r\n\r\n,這里少了一次,因此服務(wù)器將會一直等待。
HTTP POST DOS
其原理是在發(fā)送HTTP POST包時,指定一個非常大的Content-Length值,然后以極低的速度發(fā)包,保持連接不斷,導(dǎo)致服務(wù)飽和不可用。
poc
構(gòu)造以下畸形http請求包
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
Content-Length: 9999999999\r\n\r\n
Slow Read attack
Slow Read attack攻擊方式是采用調(diào)整TCP協(xié)議中的滑動窗口大小,來對服務(wù)器單次發(fā)送發(fā)送的數(shù)據(jù)大小進(jìn)行控制,使得服務(wù)器需要對一個回應(yīng)分成很多個包來發(fā)送。
Server Limit Dos
這是由于cookie導(dǎo)致的dos攻擊,當(dāng)然其原理還是基于webserver的特性。apache默認(rèn)最大的http包頭長度為8192字節(jié),如果超出此長度,則會返回4xx錯誤。如果我們利用存儲型xss漏洞,將一個超長的cookie寫入客戶端頁面,則用戶再訪問此頁面后,由于請求頭加載了惡意的超長cookie,導(dǎo)致其不能訪問該站的頁面(除非清空cookie)
ReDos
這是由于代碼寫得有缺陷,導(dǎo)致使用正則時,會出現(xiàn)大量占用資源的情況,導(dǎo)致服務(wù)不可用,這是利用了正則表達(dá)式在匹配時的某些特性決定的。
應(yīng)用層DDos防御
判斷User-Agent字段(不可靠,因為可以隨意構(gòu)造)
網(wǎng)頁中鑲嵌js代碼(不可靠,因為爬蟲也可攜帶瀏覽器引擎,或者執(zhí)行js代碼)
針對ip+cookie,限制訪問頻率(由于cookie可以更改,ip可以使用代理,或者肉雞,也不可靠)
關(guān)閉apache最大連接數(shù)等,合理配置中間件,緩解ddos攻擊。
頁面中添加驗證碼,比如搜索數(shù)據(jù)庫時。
編寫代碼時,盡量實現(xiàn)優(yōu)化,并合理使用緩存技術(shù),減少數(shù)據(jù)庫的讀取操作。
應(yīng)用層的防御有時比網(wǎng)絡(luò)層的更難,因為導(dǎo)致應(yīng)用層被dos攻擊的因素非常多,有時往往是因為程序員的失誤,導(dǎo)致某個頁面加載需要消耗大量資源,有時是因為中間件配置不當(dāng)?shù)鹊。而?yīng)用層DDos防御的核心就是區(qū)分人與機器(爬蟲),因為大量的請求不可能是人為的,肯定是機器構(gòu)造的。因此如果能有效的區(qū)分人與爬蟲行為,則可以很好地防御此攻擊。
Auth Flood攻擊
Auth Flood攻擊:即身份驗證洪水攻擊。該攻擊目標(biāo)主要針對那些處于通過驗證、和AP建立關(guān)聯(lián)的關(guān)聯(lián)客戶端,攻擊者將向AP發(fā)送大量偽造的身份驗證請求幀(偽造的身份驗證服務(wù)和狀態(tài)代碼),當(dāng)收到大量偽造的身份驗證請求超過所能承受的能力時,AP將斷開其他無線服務(wù)連接。
Deauth Flood攻擊
Deauth Flood攻擊即為取消驗證洪水攻擊,它旨在通過欺騙從AP到客戶端單播地址的取消身份驗證幀來將客戶端轉(zhuǎn)為未關(guān)聯(lián)/未認(rèn)證的狀態(tài)。對于目前的工具來說,這種形式的攻擊在打斷客戶無線服務(wù)方面非常有效和快捷。一般來說,在攻擊者發(fā)送另一個取消身份驗證幀之前,客戶端會重新關(guān)聯(lián)和認(rèn)證以再次獲取服務(wù)。攻擊者反復(fù)欺騙取消身份驗證幀才能使所有客戶端持續(xù)拒絕服務(wù)。
Association Flood攻擊
Association Flood攻擊即為關(guān)聯(lián)洪水攻擊。在無線路由器或者接入點內(nèi)置一個列表即為連接狀態(tài)表,里面可顯示出所有與該AP建立連接的無線客戶端狀態(tài)。它試圖通過利用大量模仿和偽造的無線客戶端關(guān)聯(lián)來填充AP的客戶端關(guān)聯(lián)表,從而達(dá)到淹沒AP的目的。
由于開放身份驗證(空身份驗證)允許任何客戶端通過身份驗證后關(guān)聯(lián)。利用這種漏洞的攻擊者可以通過創(chuàng)建多個到達(dá)已連接或已關(guān)聯(lián)的客戶端來模仿很多客戶端,從而淹沒目標(biāo)AP的客戶端關(guān)聯(lián)表。
Disassociation Flood攻擊
Disassociation Flood攻擊即為取消關(guān)聯(lián)洪水攻擊,和deauthenticaiton flood攻擊表現(xiàn)方式很相似。它通過欺騙從AP到客戶端的取消關(guān)聯(lián)幀來強制客戶端成為未關(guān)聯(lián)/未認(rèn)證的狀態(tài)。一般來說,在攻擊者發(fā)送另一個取消關(guān)聯(lián)幀之前,客戶端會重新關(guān)聯(lián)以再次獲取服務(wù)。攻擊者反復(fù)欺騙取消關(guān)聯(lián)幀才能使客戶端持續(xù)拒絕服務(wù)。
Disassociation Broadcast攻擊和Disassociation Flood攻擊原理基本一致,只是在發(fā)送程度及使用工具上有所區(qū)別,前者很多時候用于配合進(jìn)行無線中間人攻擊,而后者常用于目標(biāo)確定的點對點無線DOS,比如破壞或干擾指定機構(gòu)或部門的無線接入點等。
RF Jamming攻擊
RF Jamming攻擊即為RF干擾攻擊。該攻擊是通過發(fā)出干擾射頻達(dá)到破壞正常無線通信的目的。而前面幾種攻擊主要是基于無線通信過程及協(xié)議的。RF為射頻,主要包括無線信號發(fā)射機及收信機等。