DDOS攻擊在TCP三次握手后插入偽造的TCP包
用 Socket的API Connect完成TCP建立連接的三次握手,同時(shí)子進(jìn)程抓包,抓完三次握手的包后,插入第四個(gè)包即可,從對端返回的第五個(gè)包來(lái)看插入成功了,但因為插入了一個(gè)TCP包,之后的連接將發(fā)生混亂??梢詫⒉迦氲哪莻€(gè)包Data設置為HTTP Request,向WEB服務(wù)器提交請求。又如果目標系統的TCP序列號是可預計算的,那么是否可以做帶偽源地址的Blind TCP three-time handshakes和插入,值得試驗!
作者所做的實(shí)驗其實(shí)什么也說(shuō)明不了,只是驗證了一下TCP協(xié)議序號和檢驗和計算函數而已。
我想作者八成是受了CC攻擊原理的啟發(fā),想不通過(guò)代理的方式以達到CC攻擊效果。但在序號預測這個(gè)步驟上,說(shuō)實(shí)話(huà)沒(méi)有可行性。正常TCP協(xié)議采用的同步序號是隨機值,在43億的可選空間中,以百兆帶寬的速度進(jìn)行預測也將是杯水車(chē)薪。但是……
為了防御ddos,不少廠(chǎng)商的安全設備中都實(shí)現了無(wú)狀態(tài)的syn cookie算法,這種算法在大量syn沖擊下利用cookie序號在ack包回傳的方式判斷連接請求的合法性。所以他們的TCP協(xié)議握手部分不是一個(gè)健康的實(shí)現,本思路經(jīng)修改后用于攻擊此類(lèi)設備將會(huì )取得不錯的效果。下面簡(jiǎn)單介紹攻擊者如何以64字節ACK包換取服務(wù)器1518大數據包重傳,如果源IP偽造成功,攻擊者從理論上將獲得20余倍的帶寬放大攻擊效果。如果有兩個(gè)目標網(wǎng)站,本方法將一箭雙雕。
攻擊原理:利用TCP協(xié)議收到ACK后的快速重傳機制
序號亂刀之一:攻擊正常TCP/IP協(xié)議棧示意圖
當我們獲得http response回應后,立即回復一個(gè)ack數據包,此ack數據包的seq值是http response數據包中的ack seq值,而ack seq值為http response數據包的seq序號值。這樣當server收到此ack數據包后,會(huì )認為是自己剛才發(fā)送的http response包在網(wǎng)絡(luò )中已丟失,會(huì )利用快速重傳機制加以重傳。如果我們拼命發(fā)送大量的ack包,則服務(wù)器就會(huì )不斷進(jìn)行重傳。Ack數據包的大小只需 64字節,但http response通常都在512字節左右,最長(cháng)可達1518字節。
因為正常tcp協(xié)議序號的不可預測性,所以我們在這次攻擊中暴露了自己的真實(shí)IP。

序號亂刀之二:攻擊采用靜態(tài)syn cookie的ddos設備防護下的服務(wù)器
所謂靜態(tài)syn cookie就是以客戶(hù)端請求之syn包為參數計算回復syn ack中的seq值,并在ack包回傳時(shí)判斷連接合法性的方法,這種方法被ddos廠(chǎng)商大量采用,并且獲得數量可觀(guān)的國家發(fā)明專(zhuān)利,呵呵….。你經(jīng)常會(huì )聽(tīng)到ddos廠(chǎng)商的人說(shuō)他們的設備比防火墻“牛”多了,可輕松達到百兆線(xiàn)速syn防御,但百兆防火墻30M攻擊流量就可以干掉,說(shuō)這種話(huà)的ddos廠(chǎng)商,我可以打賭他們的設備80%采用了這種syn cookie算法。
Syn cookie算法的好處是只在synflood攻擊時(shí)消耗CPU資源,這對于X86下強悍的通用CPU來(lái)說(shuō),正適用。
讀者可能會(huì )感到很奇怪,為什么如此成熟的技術(shù)防火墻不采用,而讓ddos廠(chǎng)商成天擠對?這有如下幾個(gè)方面的原因:
1: 防火墻也用syn cookie進(jìn)行synflood防御的,但大多不是靜態(tài)syn cookie,而是嚴格記錄連接狀態(tài)采用動(dòng)態(tài)syn cookie,所以當syn flood攻擊時(shí)不光消耗CPU,還要消耗大量?jì)却?。這也就是我本文開(kāi)頭提及的本方法可以攻擊大部分ddos廠(chǎng)商和小部分防火墻廠(chǎng)商的原因。
2:syn cookie/syn proxy是bsd系統內核源碼的一部分,在Linux最新版的2.6內核中syn proxy還沒(méi)有被包含。所以ddos設備也大多由bsd系統組成。當然bsd是開(kāi)源的,移植也不是什么大問(wèn)題嘍。
3:防火墻大多以L(fǎng)inux下的開(kāi)源軟件netfilter 為基礎,但netfilter中hash算法和連接表設計不是很優(yōu)秀,防火墻轉發(fā)性能的瓶頸就在于此,如果再加入syn proxy表項,會(huì )進(jìn)一步降低對數據包的處理能力或加大連接表體積。高端防火墻大都支持數百萬(wàn)的連接數,這百萬(wàn)的表項就夠防火墻喝一壺的了,再加一個(gè) syn proxy表項,性能還不得掉的稀里嘩拉的?
4:防火墻很重要的一個(gè)網(wǎng)絡(luò )功能就是DNAT,在沒(méi)有DNAT操作前,防火墻不知道這些 syn包的最終目的地是自身還是DMZ區的服務(wù)器,所以syn包必須DNAT后才知道是否要進(jìn)行syn cookie保護。但這時(shí)就已經(jīng)進(jìn)入到netfilter處理框架了,性能當然就跟不上了。你見(jiàn)過(guò)幾個(gè)ddos設備支持NAT的?如果支持了,他的性能也會(huì )下降不少。如果防火墻工作在橋模式下,不經(jīng)過(guò)netfilter處理框架,防火墻就可以搖身一變成為性能卓越的抗ddos設備了,嗎功能都沒(méi)有,當然一身輕松了。呵呵…但您買(mǎi)的是防火墻,會(huì )這么大材小用嗎?
言歸正傳,采用靜態(tài)syn cookie的ddos設備,我們只需要重放一個(gè)ack包就可以達到與服務(wù)器的三次握手效果,因此可以做到源IP地址偽裝。(這個(gè)偽裝的源IP地址是你以前用過(guò)的,并且與ddos設備通訊過(guò),并保存下來(lái)的,現在將它重放而己。如果你看不懂我在說(shuō)什么,參照我寫(xiě)的《對國內ddos廠(chǎng)商技術(shù)點(diǎn)評》一文,抓包分析一下就知道了)。第二步就是發(fā)送一個(gè)正常的http request請求,隨后就是大量的虛假ack請求重傳。
天知道,誰(shuí)在用我們偽裝的源IP地址,做為一個(gè)連帶的犧牲品。
你可能會(huì )認為受害服務(wù)器B會(huì )回復rst包給受害服務(wù)器A。這是有可能,但如果服務(wù)器B前面加裝了一個(gè)“狀態(tài)檢測”防火墻,就會(huì )直接丟棄這個(gè)反射的http response數據包。

本思路有價(jià)值的地方:
1. 利用一條合法連接,對服務(wù)器進(jìn)行下行帶寬攻擊,現在的“狀態(tài)檢測”設備不一定可以發(fā)現
2. 目標服務(wù)器應用層程序感知不到這種攻擊,可以逃避基于應用層流量統計的防御方式,因為重傳是TCP協(xié)議特性,TCP協(xié)議自動(dòng)完成。重傳的數據包,對應用層來(lái)說(shuō)是透明的。
3. 現在只是一種思路,不局限于TCP協(xié)議。UDP加入重傳機制后,也可以保證通訊可靠性。并且這是私人或公司獨立開(kāi)發(fā)的協(xié)議,漏洞會(huì )比TCP協(xié)議更大。
4. drdos的帶寬放大效果也只不過(guò)是6倍而己,并且消耗的是上行帶寬。
5. 真正的威脅不在現在,而是在對“長(cháng)肥管道”的攻擊效果。對方下行帶寬越寬,攻擊效果
1M對1G
1G對1T
明白?就是因為這點(diǎn),我才會(huì )提供本思路,否則1:25的消耗也是蠻力。
攻擊完善的TCP協(xié)議其實(shí)是很困難的:
1.具體可以參見(jiàn)RFC2581中關(guān)于Fast Retransmit/Fast Recovery的說(shuō)明部分。
2.你的ack包構造不好,服務(wù)器協(xié)議棧還是會(huì )利用超時(shí)重傳,而不是快速重傳。
聯(lián)系客服