本人從事網(wǎng)絡(luò)安全行業(yè)十余年年。有十年被騙經(jīng)驗(yàn)。被騙了不少回(都說能防300G,500G,買完就防不住了),本文固然重點(diǎn)給你們說明,ddos攻擊是什么,中小企業(yè)如何防御,用到成本等。前端
言歸正傳web
首先咱們說說ddos攻擊方式,記住一句話,這是一個(gè)世界級(jí)的難題并無解決辦法只能緩解算法
DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊的主要目的是讓指定目標(biāo)沒法提供正常服務(wù),甚至從互聯(lián)網(wǎng)上消失,是目前最強(qiáng)大、最難防護(hù)的攻擊之一。這是一個(gè)世界級(jí)的難題并無解決辦法只能緩解.數(shù)據(jù)庫
按照發(fā)起的方式,DDoS能夠簡單分為三類。后端
第一類以力取勝,海量數(shù)據(jù)包從互聯(lián)網(wǎng)的各個(gè)角落蜂擁而來,堵塞IDC入口,讓各類強(qiáng)大的硬件防護(hù)系統(tǒng)、快速高效的應(yīng)急流程無用武之地。這種類型的攻擊典型表明是ICMP Flood和UDP Flood,如今已不常見。瀏覽器
第二類以巧取勝,靈動(dòng)而難以察覺,每隔幾分鐘發(fā)一個(gè)包甚至只須要一個(gè)包,就可讓豪華配置的服務(wù)器再也不響應(yīng)。這類攻擊主要是利用協(xié)議或者軟件的漏洞發(fā)起,例如Slowloris攻擊、Hash沖突攻擊等,須要特定環(huán)境機(jī)緣巧合下才能出現(xiàn)。緩存
第三類是上述兩種的混合,輕靈渾厚兼而有之,既利用了協(xié)議、系統(tǒng)的缺陷,又具有了海量的流量,例如SYN Flood攻擊、DNS Query Flood攻擊,是當(dāng)前的主流攻擊方式。安全
本文將一一描述這些最多見、最具表明性攻擊方式,并介紹它們的防護(hù)方案。性能優(yōu)化
SYN Flood服務(wù)器
SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最先出現(xiàn)于1999年左右,雅虎是當(dāng)時(shí)最著名的受害者。SYN Flood攻擊利用了TCP三次握手的缺陷,可以以較小代價(jià)使目標(biāo)服務(wù)器沒法響應(yīng),且難以追查。
標(biāo)準(zhǔn)的TCP三次握手過程以下:
客戶端發(fā)送一個(gè)包含SYN標(biāo)志的TCP報(bào)文,SYN即同步(Synchronize),同步報(bào)文會(huì)指明客戶端使用的端口以及TCP鏈接的初始序號(hào);
服務(wù)器在收到客戶端的SYN報(bào)文后,將返回一個(gè)SYN+ACK(即確認(rèn)Acknowledgement)的報(bào)文,表示客戶端的請(qǐng)求被接受,同時(shí)TCP初始序號(hào)自動(dòng)加1;
客戶端也返回一個(gè)確認(rèn)報(bào)文ACK給服務(wù)器端,一樣TCP序列號(hào)被加1。
通過這三步,TCP鏈接就創(chuàng)建完成。TCP協(xié)議為了實(shí)現(xiàn)可靠傳輸,在三次握手的過程當(dāng)中設(shè)置了一些異常處理機(jī)制。第三步中若是服務(wù)器沒有收到客戶端的最終ACK確認(rèn)報(bào)文,會(huì)一直處于SYN_RECV狀態(tài),將客戶端IP加入等待列表,并重發(fā)第二步的SYN+ACK報(bào)文。重發(fā)通常進(jìn)行3-5次,大約間隔30秒左右輪詢一次等待列表重試全部客戶端。另外一方面,服務(wù)器在本身發(fā)出了SYN+ACK報(bào)文后,會(huì)預(yù)分配資源為即將創(chuàng)建的TCP鏈接儲(chǔ)存信息作準(zhǔn)備,這個(gè)資源在等待重試期間一直保留。更為重要的是,服務(wù)器資源有限,能夠維護(hù)的SYN_RECV狀態(tài)超過極限后就再也不接受新的SYN報(bào)文,也就是拒絕新的TCP鏈接創(chuàng)建。
SYN Flood正是利用了上文中TCP協(xié)議的設(shè)定,達(dá)到攻擊的目的。攻擊者假裝大量的IP地址給服務(wù)器發(fā)送SYN報(bào)文,因?yàn)閭卧斓腎P地址幾乎不可能存在,也就幾乎沒有設(shè)備會(huì)給服務(wù)器返回任何應(yīng)答了。所以,服務(wù)器將會(huì)維持一個(gè)龐大的等待列表,不停地重試發(fā)送SYN+ACK報(bào)文,同時(shí)占用著大量的資源沒法釋放。更為關(guān)鍵的是,被攻擊服務(wù)器的SYN_RECV隊(duì)列被惡意的數(shù)據(jù)包占滿,再也不接受新的SYN請(qǐng)求,合法用戶沒法完成三次握手創(chuàng)建起TCP鏈接。也就是說,這個(gè)服務(wù)器被SYN Flood拒絕服務(wù)了。
DNS Query Flood
做為互聯(lián)網(wǎng)最基礎(chǔ)、最核心的服務(wù),DNS天然也是DDoS攻擊的重要目標(biāo)之一。打垮DNS服務(wù)可以間接打垮一家公司的所有業(yè)務(wù),或者打垮一個(gè)地區(qū)的網(wǎng)絡(luò)服務(wù)。前些時(shí)候風(fēng)頭正盛的黑客組織anonymous也曾經(jīng)宣布要攻擊全球互聯(lián)網(wǎng)的13臺(tái)根DNS服務(wù)器,不過最終沒有得手。
UDP攻擊是最容易發(fā)起海量流量的攻擊手段,并且源IP隨機(jī)偽造難以追查。但過濾比較容易,由于大多數(shù)IP并不提供UDP服務(wù),直接丟棄UDP流量便可。因此如今純粹的UDP流量攻擊比較少見了,取而代之的是UDP協(xié)議承載的DNS Query Flood攻擊。簡單地說,越上層協(xié)議上發(fā)動(dòng)的DDoS攻擊越難以防護(hù),由于協(xié)議越上層,與業(yè)務(wù)關(guān)聯(lián)越大,防護(hù)系統(tǒng)面臨的狀況越復(fù)雜。
DNS Query Flood就是攻擊者操縱大量傀儡機(jī)器,對(duì)目標(biāo)發(fā)起海量的查詢請(qǐng)求。為了防止基于ACL的過濾,必須提升數(shù)據(jù)包的隨機(jī)性。經(jīng)常使用的作法是UDP層隨機(jī)偽造源IP地址、隨機(jī)偽造源端口等參數(shù)。在DNS協(xié)議層,隨機(jī)偽造查詢ID以及待解析域名。隨機(jī)偽造待解析域名除了防止過濾外,還能夠下降命中DNS緩存的可能性,盡量多地消耗DNS服務(wù)器的CPU資源。
關(guān)于DNS Query Flood的代碼,我在2011年7月為了測(cè)試服務(wù)器性能曾經(jīng)寫過一份代碼,連接是DNS Query Flood攻擊。一樣的,這份代碼人為下降了攻擊性,只作測(cè)試用途。
HTTP Flood
上文描述的SYN Flood、DNS Query Flood在現(xiàn)階段已經(jīng)能作到有效防護(hù)了,真正令各大廠商以及互聯(lián)網(wǎng)企業(yè)頭疼的是HTTP Flood攻擊。HTTP Flood是針對(duì)Web服務(wù)在第七層協(xié)議發(fā)起的攻擊。它的巨大危害性主要表如今三個(gè)方面:發(fā)起方便、過濾困難、影響深遠(yuǎn)。
SYN Flood和DNS Query Flood都須要攻擊者以root權(quán)限控制大批量的傀儡機(jī)。收集大量root權(quán)限的傀儡機(jī)很花費(fèi)時(shí)間和精力,并且在攻擊過程當(dāng)中傀儡機(jī)會(huì)因?yàn)榱髁慨惓1还芾韱T發(fā)現(xiàn),攻擊者的資源快速損耗而補(bǔ)充緩慢,致使攻擊強(qiáng)度明顯下降并且不可長期持續(xù)。HTTP Flood攻擊則不一樣,攻擊者并不須要控制大批的傀儡機(jī),取而代之的是經(jīng)過端口掃描程序在互聯(lián)網(wǎng)上尋找匿名的HTTP代理或者SOCKS代理,攻擊者經(jīng)過匿名代理對(duì)攻擊目標(biāo)發(fā)起HTTP請(qǐng)求。匿名代理是一種比較豐富的資源,花幾天時(shí)間獲取代理并非難事,所以攻擊容易發(fā)起并且能夠長期高強(qiáng)度的持續(xù)。
另外一方面,HTTP Flood攻擊在HTTP層發(fā)起,極力模仿正經(jīng)常使用戶的網(wǎng)頁請(qǐng)求行為,與網(wǎng)站業(yè)務(wù)緊密相關(guān),安全廠商很難提供一套通用的且不影響用戶體驗(yàn)的方案。在一個(gè)地方工做得很好的規(guī)則,換一個(gè)場(chǎng)景可能帶來大量的誤殺。
最后,HTTP Flood攻擊會(huì)引發(fā)嚴(yán)重的連鎖反應(yīng),不只僅是直接致使被攻擊的Web前端響應(yīng)緩慢,還間接攻擊到后端的Java等業(yè)務(wù)層邏輯以及更后端的數(shù)據(jù)庫服務(wù),增大它們的壓力,甚至對(duì)日志存儲(chǔ)服務(wù)器都帶來影響。
有意思的是,HTTP Flood還有個(gè)很有歷史淵源的昵稱叫作CC攻擊。CC是Challenge Collapsar的縮寫,而Collapsar是國內(nèi)一家著名安全公司的DDoS防護(hù)設(shè)備。從目前的狀況來看,不只僅是Collapsar,全部的硬件防護(hù)設(shè)備都還在被挑戰(zhàn)著,風(fēng)險(xiǎn)并未解除。
慢速鏈接攻擊
提起攻擊,第一反應(yīng)就是海量的流量、海量的報(bào)文。但有一種攻擊卻反其道而行之,以慢著稱,以致于有些攻擊目標(biāo)被打死了都不知道是怎么死的,這就是慢速鏈接攻擊,最具表明性的是rsnake發(fā)明的Slowloris。
HTTP協(xié)議規(guī)定,HTTP Request以rnrn結(jié)尾表示客戶端發(fā)送結(jié)束,服務(wù)端開始處理。那么,若是永遠(yuǎn)不發(fā)送rnrn會(huì)如何?Slowloris就是利用這一點(diǎn)來作DDoS攻擊的。攻擊者在HTTP請(qǐng)求頭中將Connection設(shè)置為Keep-Alive,要求Web Server保持TCP鏈接不要斷開,隨后緩慢地每隔幾分鐘發(fā)送一個(gè)key-value格式的數(shù)據(jù)到服務(wù)端,如a:brn,致使服務(wù)端認(rèn)為HTTP頭部沒有接收完成而一直等待。若是攻擊者使用多線程或者傀儡機(jī)來作一樣的操做,服務(wù)器的Web容器很快就被攻擊者占滿了TCP鏈接而再也不接受新的請(qǐng)求。
很快的,Slowloris開始出現(xiàn)各類變種。好比POST方法向Web Server提交數(shù)據(jù)、填充一大大Content-Length但緩慢的一個(gè)字節(jié)一個(gè)字節(jié)的POST真正數(shù)據(jù)內(nèi)容等等。關(guān)于Slowloris攻擊,rsnake也給出了一個(gè)測(cè)試代碼,參見hackers.org/slowloris/。
DDoS攻擊進(jìn)階
混合攻擊
以上介紹了幾種基礎(chǔ)的攻擊手段,其中任意一種均可以用來攻擊網(wǎng)絡(luò),甚至擊垮阿里、百度、騰訊這種巨型網(wǎng)站。但這些并非所有,不一樣層次的攻擊者可以發(fā)起徹底不一樣的DDoS攻擊,運(yùn)用之妙,存乎一心。
高級(jí)攻擊者歷來不會(huì)使用單一的手段進(jìn)行攻擊,而是根據(jù)目標(biāo)環(huán)境靈活組合。普通的SYN Flood容易被流量清洗設(shè)備經(jīng)過反向探測(cè)、SYN Cookie等技術(shù)手段過濾掉,但若是在SYN Flood中混入SYN+ACK數(shù)據(jù)包,使每個(gè)偽造的SYN數(shù)據(jù)包都有一個(gè)與之對(duì)應(yīng)的偽造的客戶端確認(rèn)報(bào)文,這里的對(duì)應(yīng)是指源IP地址、源端口、目的IP、目的端口、TCP窗口大小、TTL等都符合同一個(gè)主機(jī)同一個(gè)TCP Flow的特征,流量清洗設(shè)備的反向探測(cè)和SYN Cookie性能壓力將會(huì)顯著增大。其實(shí)SYN數(shù)據(jù)報(bào)文配合其余各類標(biāo)志位,都有特殊的攻擊效果,這里不一一介紹。對(duì)DNS Query Flood而言,也有獨(dú)特的技巧。
首先,DNS能夠分為普通DNS和受權(quán)域DNS,攻擊普通DNS,IP地址須要隨機(jī)偽造,而且指明服務(wù)器要求作遞歸解析;但攻擊受權(quán)域DNS,偽造的源IP地址則不該該是純隨機(jī)的,而應(yīng)該是事先收集的全球各地ISP的DNS地址,這樣才能達(dá)到最大攻擊效果,使流量清洗設(shè)備處于添加IP黑名單仍是不添加IP黑名單的尷尬處境。添加會(huì)致使大量誤殺,不添加黑名單則每一個(gè)報(bào)文都須要反向探測(cè)從而加大性能壓力。
另外一方面,前面提到,為了加大清洗設(shè)備的壓力不命中緩存而須要隨機(jī)化請(qǐng)求的域名,但須要注意的是,待解析域名必須在偽造中帶有必定的規(guī)律性,好比說只偽造域名的某一部分而固化一部分,用來突破清洗設(shè)備設(shè)置的白名單。道理很簡單,騰訊的服務(wù)器能夠只解析騰訊的域名,徹底隨機(jī)的域名可能會(huì)直接被丟棄,須要固化。但若是徹底固定,也很容易直接被丟棄,所以又須要偽造一部分。
其次,對(duì)DNS的攻擊不該該只著重于UDP端口,根據(jù)DNS協(xié)議,TCP端口也是標(biāo)準(zhǔn)服務(wù)。在攻擊時(shí),能夠UDP和TCP攻擊同時(shí)進(jìn)行。
HTTP Flood的著重點(diǎn),在于突破前端的cache,經(jīng)過HTTP頭中的字段設(shè)置直接到達(dá)Web Server自己。另外,HTTP Flood對(duì)目標(biāo)的選取也很是關(guān)鍵,通常的攻擊者會(huì)選擇搜索之類須要作大量數(shù)據(jù)查詢的頁面做為攻擊目標(biāo),這是很是正確的,能夠消耗服務(wù)器盡量多的資源。但這種攻擊容易被清洗設(shè)備經(jīng)過人機(jī)識(shí)別的方式識(shí)別出來,那么如何解決這個(gè)問題?很簡單,盡可能選擇正經(jīng)常使用戶也經(jīng)過APP訪問的頁面,通常來講就是各類Web API。正經(jīng)常使用戶和惡意流量都是來源于APP,人機(jī)差異很小,基本融為一體難以區(qū)分。
之類的慢速攻擊,是經(jīng)過巧妙的手段占住鏈接不釋放達(dá)到攻擊的目的,但這也是雙刃劍,每個(gè)TCP鏈接既存在于服務(wù)端也存在于自身,自身也須要消耗資源維持TCP狀態(tài),所以鏈接不能保持太多。若是能夠解決這一點(diǎn),攻擊性會(huì)獲得極大加強(qiáng),也就是說Slowloris能夠經(jīng)過stateless的方式發(fā)動(dòng)攻擊,在客戶端經(jīng)過嗅探捕獲TCP的序列號(hào)和確認(rèn)維護(hù)TCP鏈接,系統(tǒng)內(nèi)核無需關(guān)注TCP的各類狀態(tài)變遷,一臺(tái)筆記本便可產(chǎn)生多達(dá)65535個(gè)TCP鏈接。
前面描述的,都是技術(shù)層面的攻擊加強(qiáng)。在人的方面,還能夠有一些別的手段。若是SYN Flood發(fā)出大量數(shù)據(jù)包正面強(qiáng)攻,再輔之以Slowloris慢速鏈接,多少人可以發(fā)現(xiàn)其中的秘密?即便服務(wù)器宕機(jī)了也許還只發(fā)現(xiàn)了SYN攻擊想去增強(qiáng)TCP層清洗而忽視了應(yīng)用層的行為。種種攻擊均可以互相配合,達(dá)到最大的效果。攻擊時(shí)間的選擇,也是一大關(guān)鍵,好比說選擇維護(hù)人員吃午餐時(shí)、維護(hù)人員下班堵在路上或者在地鐵里無線上網(wǎng)卡都沒有信號(hào)時(shí)、目標(biāo)企業(yè)在舉行大規(guī);顒(dòng)流量飆升時(shí)等。
這里描述的只是純粹的攻擊行為,所以不提供代碼,也不作深刻介紹。
來自P2P網(wǎng)絡(luò)的攻擊
前面的攻擊方式,多多少少都須要一些傀儡機(jī),即便是HTTP Flood也須要搜索大量的匿名代理。若是有一種攻擊,只須要發(fā)出一些指令,就有機(jī)器自動(dòng)上來執(zhí)行,才是完美的方案。這種攻擊已經(jīng)出現(xiàn)了,那就是來自P2P網(wǎng)絡(luò)的攻擊。
你們都知道,互聯(lián)網(wǎng)上的P2P用戶和流量都是一個(gè)極為龐大的數(shù)字。若是他們都去一個(gè)指定的地方下載數(shù)據(jù),使成千上萬的真實(shí)IP地址鏈接過來,沒有哪一個(gè)設(shè)備可以支撐住。拿BT下載來講,偽造一些熱門視頻的種子,發(fā)布到搜索引擎,就足以騙到許多用戶和流量了,但這只是基礎(chǔ)攻擊。
高級(jí)P2P攻擊,是直接欺騙資源管理服務(wù)器。如迅雷客戶端會(huì)把本身發(fā)現(xiàn)的資源上傳到資源管理服務(wù)器,而后推送給其余須要下載相同資源的用戶,這樣,一個(gè)連接就發(fā)布出去。經(jīng)過協(xié)議逆向,攻擊者偽造出大批量的熱門資源信息經(jīng)過資源管理中心分發(fā)出去,瞬間就能夠傳遍整個(gè)P2P網(wǎng)絡(luò)。更為恐怖的是,這種攻擊是沒法中止的,即便是攻擊者自身也沒法中止,攻擊一直持續(xù)到P2P官方發(fā)現(xiàn)問題更新服務(wù)器且下載用戶重啟下載軟件時(shí)為止。
CC
ChallengeCollapsar的名字源于挑戰(zhàn)國內(nèi)知名安全廠商綠盟的抗DDOS設(shè)備-“黑洞”,經(jīng)過botnet的傀儡主機(jī)或?qū)ふ夷涿矸⻊?wù)器,向目標(biāo)發(fā)起大量真實(shí)的http請(qǐng)求,最終消耗掉大量的并發(fā)資源,拖慢整個(gè)網(wǎng)站甚至完全拒絕服務(wù)。
互聯(lián)網(wǎng)的架構(gòu)追求擴(kuò)展性本質(zhì)上是為了提升并發(fā)能力,各類SQL性能優(yōu)化措施:消除慢查詢、分表分庫、索引、優(yōu)化數(shù)據(jù)結(jié)構(gòu)、限制搜索頻率等本質(zhì)都是為了解決資源消耗,而CC大有反其道而行之的意味,占滿服務(wù)器并發(fā)鏈接數(shù),盡量使請(qǐng)求避開緩存而直接讀數(shù)據(jù)庫,讀數(shù)據(jù)庫要找最消耗資源的查詢,最好沒法利用索引,每一個(gè)查詢都全表掃描,這樣就能用最小的攻擊資源起到最大的拒絕服務(wù)效果。
互聯(lián)網(wǎng)產(chǎn)品和服務(wù)依靠數(shù)據(jù)分析來驅(qū)動(dòng)改進(jìn)和持續(xù)運(yùn)營,因此除了前端的APP、中間件和數(shù)據(jù)庫這類OLTP系統(tǒng),后面還有OLAP,從日志收集,存儲(chǔ)到數(shù)據(jù)處理和分析的大數(shù)據(jù)平臺(tái),當(dāng)CC攻擊發(fā)生時(shí),不只OLTP的部分受到了影響,實(shí)際上CC會(huì)產(chǎn)生大量日志,直接會(huì)對(duì)后面的OLAP產(chǎn)生影響,影響包括兩個(gè)層面,一個(gè)當(dāng)日的數(shù)據(jù)統(tǒng)計(jì)徹底是錯(cuò)誤的。第二個(gè)層面因CC期間訪問日志劇增也會(huì)加大后端數(shù)據(jù)處理的負(fù)擔(dān)。
CC是目前應(yīng)用層攻擊的主要手段之一,在防護(hù)上有一些方法,但不能完美解決這個(gè)問題。
反射型
2004年時(shí)DRDOS第一次披露,經(jīng)過將SYN包的源地址設(shè)置為目標(biāo)地址,而后向大量的真實(shí)TCP服務(wù)器發(fā)送TCP的SYN包,而這些收到SYN包的TCP server為了完成3次握手把SYN|ACK包“應(yīng)答”給目標(biāo)地址,完成了一次“反射”攻擊,攻擊者隱藏了自身,但有個(gè)問題是攻擊者制造的流量和目標(biāo)收到的攻擊流量是1:1,且SYN|ACK包到達(dá)目標(biāo)后立刻被回以RST包,整個(gè)攻擊的投資回報(bào)率不高。
反射型攻擊的本質(zhì)是利用“質(zhì)詢-應(yīng)答”式協(xié)議,將質(zhì)詢包的源地址經(jīng)過原始套接字偽造設(shè)置為目標(biāo)地址,則應(yīng)答的“回包”都被發(fā)送至目標(biāo),若是回包體積比較大或協(xié)議支持遞歸效果,攻擊流量會(huì)被放大,成為一種高性價(jià)比的流量型攻擊。
反射型攻擊利用的協(xié)議目前包括NTP、Chargen、SSDP、DNS、RPC portmap等等。
流量放大型
以上面提到的DRDOS中常見的SSDP協(xié)議為例,攻擊者將Searchtype設(shè)置為ALL,搜索全部可用的設(shè)備和服務(wù),這種遞歸效果產(chǎn)生的放大倍數(shù)是很是大的,攻擊者只須要以較小的偽造源地址的查詢流量就能夠制造出幾十甚至上百倍的應(yīng)答流量發(fā)送至目標(biāo)。
防護(hù)基礎(chǔ)
攻擊流量到底多大,這是一個(gè)關(guān)鍵問題。攻擊量的大小。用的防御方法不同。下面給你講一講,1G以內(nèi)的防御方式。費(fèi)用在,<1萬,每個(gè)月
談到DDoS防護(hù),首先就是要知道到底遭受了多大的攻擊。這個(gè)問題看似簡單,實(shí)際上卻有不少鮮為人知的細(xì)節(jié)在里面。
以SYN Flood為例,為了提升發(fā)送效率在服務(wù)端產(chǎn)生更多的SYN等待隊(duì)列,攻擊程序在填充包頭時(shí),IP首部和TCP首部都不填充可選的字段,所以IP首部長度剛好是20字節(jié),TCP首部也是20字節(jié),共40字節(jié)。
對(duì)于以太網(wǎng)來講,最小的包長度數(shù)據(jù)段必須達(dá)到46字節(jié),而攻擊報(bào)文只有40字節(jié),所以,網(wǎng)卡在發(fā)送時(shí),會(huì)作一些處理,在TCP首部的末尾,填充6個(gè)0來知足最小包的長度要求。這個(gè)時(shí)候,整個(gè)數(shù)據(jù)包的長度為14字節(jié)的以太網(wǎng)頭,20字節(jié)的IP頭,20字節(jié)的TCP頭,再加上由于最小包長度要求而填充的6個(gè)字節(jié)的0,一共是60字節(jié)。
但這尚未結(jié)束。以太網(wǎng)在傳輸數(shù)據(jù)時(shí),還有CRC檢驗(yàn)的要求。網(wǎng)卡會(huì)在發(fā)送數(shù)據(jù)以前對(duì)數(shù)據(jù)包進(jìn)行CRC檢驗(yàn),將4字節(jié)的CRC值附加到包頭的最后面。這個(gè)時(shí)候,數(shù)據(jù)包長度已再也不是40字節(jié),而是變成64字節(jié)了,這就是常說的SYN小包攻擊,數(shù)據(jù)包結(jié)構(gòu)以下:
|14字節(jié)以太網(wǎng)頭部|20字節(jié)IP頭部|20字節(jié)TCP|6字節(jié)填充|4字節(jié)檢驗(yàn)|
|目的MAC|源MAC|協(xié)議類型| IP頭 |TCP頭|以太網(wǎng)填充 | CRC檢驗(yàn) |
到64字節(jié)時(shí),SYN數(shù)據(jù)包已經(jīng)填充完成,準(zhǔn)備開始傳輸了。攻擊數(shù)據(jù)包很小,遠(yuǎn)遠(yuǎn)不夠最大傳輸單元(MTU)的1500字節(jié),所以不會(huì)被分片。那么這些數(shù)據(jù)包就像生產(chǎn)流水線上的罐頭同樣,一個(gè)包連著一個(gè)包緊密地?cái)D在一塊兒傳輸嗎?事實(shí)上不是這樣的。
以太網(wǎng)在傳輸時(shí),還有前導(dǎo)碼(preamble)和幀間距(inter-frame gap)。其中前導(dǎo)碼占8字節(jié)(byte),即64比特位。前導(dǎo)碼前面的7字節(jié)都是10101010,1和0間隔而成。但第八個(gè)字節(jié)就變成了10101011,當(dāng)主機(jī)監(jiān)測(cè)到連續(xù)的兩個(gè)1時(shí),就知道后面開始是數(shù)據(jù)了。在網(wǎng)絡(luò)傳輸時(shí),數(shù)據(jù)的結(jié)構(gòu)以下:
|8字節(jié)前導(dǎo)碼|6字節(jié)目的MAC地址|6字節(jié)源MAC地址|2字節(jié)上層協(xié)議類型|20字節(jié)IP頭|20字節(jié)TCP頭|6字節(jié)以太網(wǎng)填充|4字節(jié)CRC檢驗(yàn)|12字節(jié)幀間距|
也就是說,一個(gè)原本只有40字節(jié)的SYN包,在網(wǎng)絡(luò)上傳輸時(shí)占的帶寬,實(shí)際上是84字節(jié)。
有了上面的基礎(chǔ),如今能夠開始計(jì)算攻擊流量和網(wǎng)絡(luò)設(shè)備的線速問題了。當(dāng)只填充IP頭和TCP頭的最小SYN包跑在以太網(wǎng)絡(luò)上時(shí),100Mbit的網(wǎng)絡(luò),能支持的最大PPS(Packet Per Second)是100×106 / (8 * (64+8+12)) = 148809,1000Mbit的網(wǎng)絡(luò),能支持的最大PPS是1488090。
SYN Flood防護(hù)
前文描述過,SYN Flood攻擊大量消耗服務(wù)器的CPU、內(nèi)存資源,并占滿SYN等待隊(duì)列。相應(yīng)的,咱們修改內(nèi)核參數(shù)便可有效緩解。主要參數(shù)以下:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
分別為啟用SYN Cookie、設(shè)置SYN最大隊(duì)列長度以及設(shè)置SYN+ACK最大重試次數(shù)。
SYN Cookie的做用是緩解服務(wù)器資源壓力。啟用以前,服務(wù)器在接到SYN數(shù)據(jù)包后,當(dāng)即分配存儲(chǔ)空間,并隨機(jī)化一個(gè)數(shù)字做為SYN號(hào)發(fā)送SYN+ACK數(shù)據(jù)包。而后保存鏈接的狀態(tài)信息等待客戶端確認(rèn)。啟用SYN Cookie以后,服務(wù)器再也不分配存儲(chǔ)空間,并且經(jīng)過基于時(shí)間種子的隨機(jī)數(shù)算法設(shè)置一個(gè)SYN號(hào),替代徹底隨機(jī)的SYN號(hào)。發(fā)送完SYN+ACK確認(rèn)報(bào)文以后,清空資源不保存任何狀態(tài)信息。直到服務(wù)器接到客戶端的最終ACK包,經(jīng)過Cookie檢驗(yàn)算法鑒定是否與發(fā)出去的SYN+ACK報(bào)文序列號(hào)匹配,匹配則經(jīng)過完成握手,失敗則丟棄。固然,前文的高級(jí)攻擊中有SYN混合ACK的攻擊方法,則是對(duì)此種防護(hù)方法的反擊,其中優(yōu)劣由雙方的硬件配置決定
tcp_max_syn_backlog則是使用服務(wù)器的內(nèi)存資源,換取更大的等待隊(duì)列長度,讓攻擊數(shù)據(jù)包不至于占滿全部鏈接而致使正經(jīng)常使用戶沒法完成握手。net.ipv4.tcp_synack_retries是下降服務(wù)器SYN+ACK報(bào)文重試次數(shù),盡快釋放等待資源。這三種措施與攻擊的三種危害一一對(duì)應(yīng),完徹底全地對(duì)癥下藥。但這些措施也是雙刃劍,可能消耗服務(wù)器更多的內(nèi)存資源,甚至影響正經(jīng)常使用戶創(chuàng)建TCP鏈接,須要評(píng)估服務(wù)器硬件資源和攻擊大小謹(jǐn)慎設(shè)置。
除了定制TCP/IP協(xié)議棧以外,還有一種常見作法是TCP首包丟棄方案,利用TCP協(xié)議的重傳機(jī)制識(shí)別正經(jīng)常使用戶和攻擊報(bào)文。當(dāng)防護(hù)設(shè)備接到一個(gè)IP地址的SYN報(bào)文后,簡單比對(duì)該IP是否存在于白名單中,存在則轉(zhuǎn)發(fā)到后端。如不存在于白名單中,檢查是不是該IP在必定時(shí)間段內(nèi)的首次SYN報(bào)文,不是則檢查是否重傳報(bào)文,是重傳則轉(zhuǎn)發(fā)并加入白名單,不是則丟棄并加入黑名單。是首次SYN報(bào)文則丟棄并等待一段時(shí)間以試圖接受該IP的SYN重傳報(bào)文,等待超時(shí)則斷定為攻擊報(bào)文加入黑名單。
首包丟棄方案對(duì)用戶體驗(yàn)會(huì)略有影響,由于丟棄首包重傳會(huì)增大業(yè)務(wù)的響應(yīng)時(shí)間,有鑒于此發(fā)展出了一種更優(yōu)的TCP Proxy方案。全部的SYN數(shù)據(jù)報(bào)文由清洗設(shè)備接受,按照SYN Cookie方案處理。和設(shè)備成功創(chuàng)建了TCP三次握手的IP地址被斷定為合法用戶加入白名單,由設(shè)備假裝真實(shí)客戶端IP地址再與真實(shí)服務(wù)器完成三次握手,隨后轉(zhuǎn)發(fā)數(shù)據(jù)。而指定時(shí)間內(nèi)沒有和設(shè)備完成三次握手的IP地址,被斷定為惡意IP地址屏蔽必定時(shí)間。除了SYN Cookie結(jié)合TCP Proxy外,清洗設(shè)備還具有多種畸形TCP標(biāo)志位數(shù)據(jù)包探測(cè)的能力,經(jīng)過對(duì)SYN報(bào)文返回非預(yù)期應(yīng)答測(cè)試客戶端反應(yīng)的方式來鑒別正常訪問和惡意行為。
清洗設(shè)備的硬件具備特殊的網(wǎng)絡(luò)處理器芯片和特別優(yōu)化的操做系統(tǒng)、TCP/IP協(xié)議棧,能夠處理很是巨大的流量和SYN隊(duì)列。
HTTP Flood防護(hù)
HTTP Flood攻擊防護(hù)主要經(jīng)過緩存的方式進(jìn)行,盡可能由設(shè)備的緩存直接返回結(jié)果來保護(hù)后端業(yè)務(wù)。大型的互聯(lián)網(wǎng)企業(yè),會(huì)有龐大的CDN節(jié)點(diǎn)緩存內(nèi)容。
當(dāng)高級(jí)攻擊者穿透緩存時(shí),清洗設(shè)備會(huì)截獲HTTP請(qǐng)求作特殊處理。最簡單的方法就是對(duì)源IP的HTTP請(qǐng)求頻率作統(tǒng)計(jì),高于必定頻率的IP地址加入黑名單。這種方法過于簡單,容易帶來誤殺,而且沒法屏蔽來自代理服務(wù)器的攻擊,所以逐漸廢止,取而代之的是java script跳轉(zhuǎn)人機(jī)識(shí)別方案。
HTTP Flood是由程序模擬HTTP請(qǐng)求,通常來講不會(huì)解析服務(wù)端返回?cái)?shù)據(jù),更不會(huì)解析JS之類代碼。所以當(dāng)清洗設(shè)備截獲到HTTP請(qǐng)求時(shí),返回一段特殊java script代碼,正經(jīng)常使用戶的瀏覽器會(huì)處理并正常跳轉(zhuǎn)不影響使用,而攻擊程序會(huì)攻擊到空處。
DNS Flood防護(hù)
DNS攻擊防護(hù)也有相似HTTP的防護(hù)手段,第一方案是緩存。其次是重發(fā),能夠是直接丟棄DNS報(bào)文致使UDP層面的請(qǐng)求重發(fā),能夠是返回特殊響應(yīng)強(qiáng)制要求客戶端使用TCP協(xié)議重發(fā)DNS查詢請(qǐng)求。
特殊的,對(duì)于受權(quán)域DNS的保護(hù),設(shè)備會(huì)在業(yè)務(wù)正常時(shí)期提取收到的DNS域名列表和ISP DNS IP列表備用,在攻擊時(shí),非此列表的請(qǐng)求一概丟棄,大幅下降性能壓力。對(duì)于域名,實(shí)行一樣的域名白名單機(jī)制,非白名單中的域名解析請(qǐng)求,作丟棄處理。
慢速鏈接攻擊防護(hù)
Slowloris攻擊防護(hù)比較簡單,主要方案有兩個(gè)。
第一個(gè)是統(tǒng)計(jì)每一個(gè)TCP鏈接的時(shí)長并計(jì)算單位時(shí)間內(nèi)經(jīng)過的報(bào)文數(shù)量便可作精確識(shí)別。一個(gè)TCP鏈接中,HTTP報(bào)文太少和報(bào)文太多都是不正常的,過少多是慢速鏈接攻擊,過多多是使用HTTP 1.1協(xié)議進(jìn)行的HTTP Flood攻擊,在一個(gè)TCP鏈接中發(fā)送多個(gè)HTTP請(qǐng)求。
第二個(gè)是限制HTTP頭部傳輸?shù)淖畲笤S可時(shí)間。超過指定時(shí)間HTTP Header尚未傳輸完成,直接斷定源IP地址為慢速鏈接攻擊,中斷鏈接并加入黑名單。
~~~~~~~~~~~~~~~~~~~~~·
下面咱們細(xì)說一下,不一樣攻擊量對(duì)應(yīng)對(duì)方式
若是超過,>10G 攻擊,若是大于10G攻擊軟件防御就扯蛋,
下面記住一句話,防ddos攻擊大小于取決于你帶寬的大小,與軟件不要緊。
國內(nèi)如今100M帶寬一個(gè)月就,便宜的8000,貴的2萬多,1G帶寬,8萬,10G帶寬,80萬,你肯定要本身防御?
業(yè)務(wù)邏輯很不少種,每家都不太同樣,
WEB類型,這個(gè)是攻擊最多,防御方案更廣,能夠選擇國內(nèi),國外,cdn加速等,
游戲類型,這個(gè)必須得放在國內(nèi),放國外太卡,掉線,沒人玩了
解決辦法就是找第三方防ddos解決商,
10~50G防御,國內(nèi)不少機(jī)房均可以防御,問題你給的錢夠不夠idc機(jī)房有一個(gè)總帶寬,若是你攻擊帶寬太大就影響他正常客戶,他就會(huì)找各類借口給你ip屏蔽。
不少攻擊持續(xù)的時(shí)間很是短,一般5分鐘之內(nèi),流量圖上表現(xiàn)為突刺狀的脈沖。實(shí)際對(duì)機(jī)房沒有什么影響,可是機(jī)房就給你ip屏蔽了,這個(gè)用于攻擊游戲類網(wǎng)站,搞一會(huì)一掉線,用戶全掉光了,
50G之間,單機(jī)防御,浙江,江蘇,廣東,均可以防均可以防御,月成本,2萬左右.
還有支付類網(wǎng)站,
中小企業(yè),主要看攻擊量的大小選擇方案,若是大家公司不差錢,那就別向下看了,
下面我但是報(bào)行業(yè)內(nèi)幕,
<30G攻擊, 3000左右一個(gè)月,非連續(xù)攻擊,可用,單機(jī)防,
<50G攻擊,1萬左右一個(gè)月,非連續(xù)攻擊,可用,雙機(jī)防,
<100G攻擊,2~3萬,連續(xù)攻擊/日,須要用集群防,
<300G攻擊,5~8萬,連續(xù)攻擊/日,須要集群,加CDN,學(xué)習(xí)百度云加速,國外的防御讓CF幫著防,國內(nèi)的找云堤防,
因此,總結(jié)一下那些公司是騙人的,大家不白花錢去再測(cè)試了。我已經(jīng)測(cè)試過了。
時(shí)間緊不少點(diǎn)沒有寫全,寫透,從此找個(gè)時(shí)間再總結(jié)分類。