技術(shù)篇純分享—支付平臺服務(wù)器被攻擊怎么應(yīng)對偏灿?

在商業(yè)部門,特別是在跨境電子商務(wù)中钝的,支付和付款是不可或缺的翁垂。第三方和第四方支付遍地開花,造成了狼多肉少的情況硝桩,為市場占有量沿猜,不少人動起了歪腦筋,利用互聯(lián)網(wǎng)攻擊同行業(yè)務(wù)服務(wù)器(常見DDOS,CC攻擊)碗脊,讓競爭對手業(yè)務(wù)癱瘓啼肩,從而坐收漁利,那么衙伶,被ddos疟游,cc攻擊后,該怎么應(yīng)對呢痕支???

? ? ? 需要一臺能承受你現(xiàn)在攻擊量的高防服務(wù)器,例如當(dāng)你遇到200G流量攻擊時蛮原,務(wù)必選擇300G以上的防御卧须,留下足夠的空間,預(yù)防發(fā)生緊急情況儒陨。

一花嘶、DDos簡介

DDoS(Distributed DenialofService,分布式拒絕服務(wù))攻擊的主要目的是讓指定目標(biāo)無法提供正常服務(wù)蹦漠,甚至從互聯(lián)網(wǎng)上消失椭员,是目前最強大、最難防御的攻擊之一笛园。這是一個世界級的難題并沒有解決辦法只能緩解.

按照發(fā)起的方式隘击,DDoS可以簡單分為三類。

第一類以力取勝研铆,海量數(shù)據(jù)包從互聯(lián)網(wǎng)的各個角落蜂擁而來埋同,堵塞IDC入口,讓各種強大的硬件防御系統(tǒng)棵红、快速高效的應(yīng)急流程無用武之地凶赁。這種類型的攻擊典型代表是ICMP Flood和UDP Flood,現(xiàn)在已不常見。

第二類以巧取勝虱肄,靈動而難以察覺致板,每隔幾分鐘發(fā)一個包甚至只需要一個包,就可以讓豪華配置的服務(wù)器不再響應(yīng)咏窿。這類攻擊主要是利用協(xié)議或者軟件的漏洞發(fā)起斟或,例如Slowloris攻擊、Hash沖突攻擊等翰灾,需要特定環(huán)境機緣巧合下才能出現(xiàn)缕粹。

第三類是上述兩種的混合,輕靈渾厚兼而有之纸淮,既利用了協(xié)議平斩、系統(tǒng)的缺陷,又具備了海量的流量咽块,例如SYN Flood攻擊绘面、DNS Query Flood攻擊,是當(dāng)前的主流攻擊方式侈沪。

本文將一一描述這些最常見揭璃、最具代表性攻擊方式,并介紹它們的防御方案亭罪。

二瘦馍、DDOS基礎(chǔ)攻擊

SYN Flood

SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最早出現(xiàn)于1999年左右应役,雅虎是當(dāng)時最著名的受害者情组。SYN Flood攻擊利用了TCP三次握手的缺陷,能夠以較小代價使目標(biāo)服務(wù)器無法響應(yīng)箩祥,且難以追查院崇。

標(biāo)準(zhǔn)的TCP三次握手過程如下:客戶端發(fā)送一個包含SYN標(biāo)志的TCP報文,SYN即同步(Synchronize)袍祖,同步報文會指明客戶端使用的端口以及TCP連接的初始序號底瓣;

服務(wù)器在收到客戶端的SYN報文后,將返回一個SYN+ACK(即確認(rèn)Acknowledgement)的報文蕉陋,表示客戶端的請求被接受捐凭,同時TCP初始序號自動加1;

客戶端也返回一個確認(rèn)報文ACK給服務(wù)器端凳鬓,同樣TCP序列號被加1柑营。

經(jīng)過這三步,TCP連接就建立完成村视。TCP協(xié)議為了實現(xiàn)可靠傳輸官套,在三次握手的過程中設(shè)置了一些異常處理機制。第三步中如果服務(wù)器沒有收到客戶端的最終ACK確認(rèn)報文,會一直處于SYN_RECV狀態(tài)奶赔,將客戶端IP加入等待列表惋嚎,并重發(fā)第二步的SYN+ACK報文。重發(fā)一般進行3-5次站刑,大約間隔30秒左右輪詢一次等待列表重試所有客戶端另伍。另一方面,服務(wù)器在自己發(fā)出了SYN+ACK報文后绞旅,會預(yù)分配資源為即將建立的TCP連接儲存信息做準(zhǔn)備摆尝,這個資源在等待重試期間一直保留。更為重要的是因悲,服務(wù)器資源有限堕汞,可以維護的SYN_RECV狀態(tài)超過極限后就不再接受新的SYN報文,也就是拒絕新的TCP連接建立晃琳。

SYN Flood正是利用了上文中TCP協(xié)議的設(shè)定讯检,達到攻擊的目的。攻擊者偽裝大量的IP地址給服務(wù)器發(fā)送SYN報文卫旱,由于偽造的IP地址幾乎不可能存在人灼,也就幾乎沒有設(shè)備會給服務(wù)器返回任何應(yīng)答了。因此顾翼,服務(wù)器將會維持一個龐大的等待列表投放,不停地重試發(fā)送SYN+ACK報文,同時占用著大量的資源無法釋放适贸。更為關(guān)鍵的是灸芳,被攻擊服務(wù)器的SYN_RECV隊列被惡意的數(shù)據(jù)包占滿,不再接受新的SYN請求取逾,合法用戶無法完成三次握手建立起TCP連接。也就是說苹支,這個服務(wù)器被SYN Flood拒絕服務(wù)了砾隅。

DNS Query Flood

? ? 作為互聯(lián)網(wǎng)最基礎(chǔ)、最核心的服務(wù)债蜜,DNS自然也是DDoS攻擊的重要目標(biāo)之一晴埂。打垮DNS服務(wù)能夠間接打垮一家公司的全部業(yè)務(wù),或者打垮一個地區(qū)的網(wǎng)絡(luò)服務(wù)寻定。前些時候風(fēng)頭正盛的黑客組織anonymous也曾經(jīng)宣布要攻擊全球互聯(lián)網(wǎng)的13臺根DNS服務(wù)器儒洛,不過最終沒有得手。

? ?UDP攻擊是最容易發(fā)起海量流量的攻擊手段狼速,而且源IP隨機偽造難以追查琅锻。但過濾比較容易,因為大多數(shù)IP并不提供UDP服務(wù),直接丟棄UDP流量即可恼蓬。所以現(xiàn)在純粹的UDP流量攻擊比較少見了惊完,取而代之的是UDP協(xié)議承載的DNS Query Flood攻擊。簡單地說处硬,越上層協(xié)議上發(fā)動的DDoS攻擊越難以防御小槐,因為協(xié)議越上層,與業(yè)務(wù)關(guān)聯(lián)越大荷辕,防御系統(tǒng)面臨的情況越復(fù)雜凿跳。

? ?DNS Query Flood就是攻擊者操縱大量傀儡機器,對目標(biāo)發(fā)起海量的域名查詢請求疮方。為了防止基于ACL的過濾控嗜,必須提高數(shù)據(jù)包的隨機性。常用的做法是UDP層隨機偽造源IP地址案站、隨機偽造源端口等參數(shù)躬审。在DNS協(xié)議層,隨機偽造查詢ID以及待解析域名蟆盐。隨機偽造待解析域名除了防止過濾外承边,還可以降低命中DNS緩存的可能性,盡可能多地消耗DNS服務(wù)器的CPU資源石挂。

關(guān)于DNS Query Flood的代碼博助,我在2011年7月為了測試服務(wù)器性能曾經(jīng)寫過一份代碼,鏈接是http://www.icylife.net/yunshu/show.php?id=832痹愚。同樣的富岳,這份代碼人為降低了攻擊性,只做測試用途拯腮。

HTTP Flood

? ?上文描述的SYN Flood窖式、DNS QueryFlood在現(xiàn)階段已經(jīng)能做到有效防御了,真正令各大廠商以及互聯(lián)網(wǎng)企業(yè)頭疼的是HTTP Flood攻擊动壤。HTTP Flood是針對Web服務(wù)在第七層協(xié)議發(fā)起的攻擊萝喘。它的巨大危害性主要表現(xiàn)在三個方面:發(fā)起方便、過濾困難琼懊、影響深遠阁簸。

? ?SYN Flood和DNS Query Flood都需要攻擊者以root權(quán)限控制大批量的傀儡機。收集大量root權(quán)限的傀儡機很花費時間和精力哼丈,而且在攻擊過程中傀儡機會由于流量異常被管理員發(fā)現(xiàn)启妹,攻擊者的資源快速損耗而補充緩慢,導(dǎo)致攻擊強度明顯降低而且不可長期持續(xù)醉旦。HTTP Flood攻擊則不同饶米,攻擊者并不需要控制大批的傀儡機桨啃,取而代之的是通過端口掃描程序在互聯(lián)網(wǎng)上尋找匿名的HTTP代理或者SOCKS代理,攻擊者通過匿名代理對攻擊目標(biāo)發(fā)起HTTP請求咙崎。匿名代理是一種比較豐富的資源优幸,花幾天時間獲取代理并不是難事,因此攻擊容易發(fā)起而且可以長期高強度的持續(xù)褪猛。

? ?另一方面网杆,HTTP Flood攻擊在HTTP層發(fā)起,極力模仿正常用戶的網(wǎng)頁請求行為伊滋,與網(wǎng)站業(yè)務(wù)緊密相關(guān)碳却,安全廠商很難提供一套通用的且不影響用戶體驗的方案。在一個地方工作得很好的規(guī)則笑旺,換一個場景可能帶來大量的誤殺昼浦。

最后,HTTP Flood攻擊會引起嚴(yán)重的連鎖反應(yīng)筒主,不僅僅是直接導(dǎo)致被攻擊的Web前端響應(yīng)緩慢关噪,還間接攻擊到后端的Java等業(yè)務(wù)層邏輯以及更后端的數(shù)據(jù)庫服務(wù),增大它們的壓力乌妙,甚至對日志存儲服務(wù)器都帶來影響使兔。

有意思的是,HTTP Flood還有個頗有歷史淵源的昵稱叫做CC攻擊藤韵。CC是Challenge Collapsar的縮寫虐沥,而Collapsar是國內(nèi)一家著名安全公司的DDoS防御設(shè)備。從目前的情況來看泽艘,不僅僅是Collapsar欲险,所有的硬件防御設(shè)備都還在被挑戰(zhàn)著,風(fēng)險并未解除匹涮。

慢速連接攻擊

提起攻擊天试,第一反應(yīng)就是海量的流量、海量的報文然低。但有一種攻擊卻反其道而行之喜每,以慢著稱,以至于有些攻擊目標(biāo)被打死了都不知道是怎么死的脚翘,這就是慢速連接攻擊灼卢,最具代表性的是rsnake發(fā)明的Slowloris绍哎。

HTTP協(xié)議規(guī)定来农,HTTP Request以\r\n\r\n結(jié)尾表示客戶端發(fā)送結(jié)束,服務(wù)端開始處理崇堰。那么沃于,如果永遠不發(fā)送\r\n\r\n會如何涩咖?Slowloris就是利用這一點來做DDoS攻擊的。攻擊者在HTTP請求頭中將Connection設(shè)置為Keep-Alive繁莹,要求Web Server保持TCP連接不要斷開檩互,隨后緩慢地每隔幾分鐘發(fā)送一個key-value格式的數(shù)據(jù)到服務(wù)端,如a:b\r\n咨演,導(dǎo)致服務(wù)端認(rèn)為HTTP頭部沒有接收完成而一直等待闸昨。如果攻擊者使用多線程或者傀儡機來做同樣的操作,服務(wù)器的Web容器很快就被攻擊者占滿了TCP連接而不再接受新的請求薄风。

很快的饵较,Slowloris開始出現(xiàn)各種變種。比如POST方法向Web Server提交數(shù)據(jù)遭赂、填充一大大Content-Length但緩慢的一個字節(jié)一個字節(jié)的POST真正數(shù)據(jù)內(nèi)容等等循诉。關(guān)于Slowloris攻擊,rsnake也給出了一個測試代碼撇他,參見http://ha.ckers.org/slowloris/slowloris.pl茄猫。

三、DDoS進階攻擊

混合攻擊

? ?以上介紹了幾種基礎(chǔ)的攻擊手段困肩,其中任意一種都可以用來攻擊網(wǎng)絡(luò)划纽,甚至擊垮阿里、百度僻弹、騰訊這種巨型網(wǎng)站阿浓。但這些并不是全部,不同層次的攻擊者能夠發(fā)起完全不同的DDoS攻擊蹋绽,運用之妙芭毙,存乎一心。

? ?高級攻擊者從來不會使用單一的手段進行攻擊卸耘,而是根據(jù)目標(biāo)環(huán)境靈活組合退敦。普通的SYN Flood容易被流量清洗設(shè)備通過反向探測、SYN Cookie等技術(shù)手段過濾掉蚣抗,但如果在SYN Flood中混入SYN+ACK數(shù)據(jù)包侈百,使每一個偽造的SYN數(shù)據(jù)包都有一個與之對應(yīng)的偽造的客戶端確認(rèn)報文,這里的對應(yīng)是指源IP地址翰铡、源端口钝域、目的IP、目的端口锭魔、TCP窗口大小例证、TTL等都符合同一個主機同一個TCP Flow的特征,流量清洗設(shè)備的反向探測和SYN Cookie性能壓力將會顯著增大迷捧。其實SYN數(shù)據(jù)報文配合其他各種標(biāo)志位织咧,都有特殊的攻擊效果胀葱,這里不一一介紹。對DNS Query Flood而言笙蒙,也有獨特的技巧抵屿。

首先,DNS可以分為普通DNS和授權(quán)域DNS捅位,攻擊普通DNS轧葛,IP地址需要隨機偽造,并且指明服務(wù)器要求做遞歸解析艇搀;但攻擊授權(quán)域DNS朝群,偽造的源IP地址則不應(yīng)該是純隨機的,而應(yīng)該是事先收集的全球各地ISP的DNS地址中符,這樣才能達到最大攻擊效果姜胖,使流量清洗設(shè)備處于添加IP黑名單還是不添加IP黑名單的尷尬處境。添加會導(dǎo)致大量誤殺淀散,不添加黑名單則每個報文都需要反向探測從而加大性能壓力右莱。

? ?另一方面,前面提到档插,為了加大清洗設(shè)備的壓力不命中緩存而需要隨機化請求的域名慢蜓,但需要注意的是,待解析域名必須在偽造中帶有一定的規(guī)律性郭膛,比如說只偽造域名的某一部分而固化一部分晨抡,用來突破清洗設(shè)備設(shè)置的白名單。道理很簡單则剃,騰訊的服務(wù)器可以只解析騰訊的域名耘柱,完全隨機的域名可能會直接被丟棄,需要固化棍现。但如果完全固定调煎,也很容易直接被丟棄,因此又需要偽造一部分己肮。

其次士袄,對DNS的攻擊不應(yīng)該只著重于UDP端口,根據(jù)DNS協(xié)議谎僻,TCP端口也是標(biāo)準(zhǔn)服務(wù)娄柳。在攻擊時,可以UDP和TCP攻擊同時進行艘绍。

? ?HTTP Flood的著重點赤拒,在于突破前端的cache,通過HTTP頭中的字段設(shè)置直接到達Web Server本身鞍盗。另外,HTTP Flood對目標(biāo)的選取也非常關(guān)鍵,一般的攻擊者會選擇搜索之類需要做大量數(shù)據(jù)查詢的頁面作為攻擊目標(biāo)瓣俯,這是非常正確的俊马,可以消耗服務(wù)器盡可能多的資源。但這種攻擊容易被清洗設(shè)備通過人機識別的方式識別出來敷存,那么如何解決這個問題墓造?很簡單,盡量選擇正常用戶也通過APP訪問的頁面锚烦,一般來說就是各種Web API觅闽。正常用戶和惡意流量都是來源于APP,人機差別很小涮俄,基本融為一體難以區(qū)分蛉拙。

之類的慢速攻擊,是通過巧妙的手段占住連接不釋放達到攻擊的目的彻亲,但這也是雙刃劍孕锄,每一個TCP連接既存在于服務(wù)端也存在于自身,自身也需要消耗資源維持TCP狀態(tài)苞尝,因此連接不能保持太多畸肆。如果可以解決這一點,攻擊性會得到極大增強宙址,也就是說Slowloris可以通過stateless的方式發(fā)動攻擊轴脐,在客戶端通過嗅探捕獲TCP的序列號和確認(rèn)維護TCP連接,系統(tǒng)內(nèi)核無需關(guān)注TCP的各種狀態(tài)變遷抡砂,一臺筆記本即可產(chǎn)生多達65535個TCP連接大咱。

前面描述的,都是技術(shù)層面的攻擊增強注益。在人的方面徽级,還可以有一些別的手段。如果SYN Flood發(fā)出大量數(shù)據(jù)包正面強攻聊浅,再輔之以Slowloris慢速連接餐抢,多少人能夠發(fā)現(xiàn)其中的秘密?即使服務(wù)器宕機了也許還只發(fā)現(xiàn)了SYN攻擊想去加強TCP層清洗而忽視了應(yīng)用層的行為低匙。種種攻擊都可以互相配合旷痕,達到最大的效果。攻擊時間的選擇顽冶,也是一大關(guān)鍵欺抗,比如說選擇維護人員吃午飯時、維護人員下班堵在路上或者在地鐵里無線上網(wǎng)卡都沒有信號時强重、目標(biāo)企業(yè)在舉行大規(guī)慕食剩活動流量飆升時等贸人。

? ?這里描述的只是純粹的攻擊行為,因此不提供代碼佃声,也不做深入介紹艺智。

來自P2P網(wǎng)絡(luò)的攻擊

前面的攻擊方式,多多少少都需要一些傀儡機圾亏,即使是HTTP Flood也需要搜索大量的匿名代理十拣。如果有一種攻擊,只需要發(fā)出一些指令志鹃,就有機器自動上來執(zhí)行夭问,才是完美的方案。這種攻擊已經(jīng)出現(xiàn)了曹铃,那就是來自P2P網(wǎng)絡(luò)的攻擊缰趋。

? ?大家都知道,互聯(lián)網(wǎng)上的P2P用戶和流量都是一個極為龐大的數(shù)字陕见。如果他們都去一個指定的地方下載數(shù)據(jù)埠胖,使成千上萬的真實IP地址連接過來,沒有哪個設(shè)備能夠支撐住淳玩。拿BT下載來說直撤,偽造一些熱門視頻的種子,發(fā)布到搜索引擎蜕着,就足以騙到許多用戶和流量了谋竖,但這只是基礎(chǔ)攻擊。

? ?高級P2P攻擊承匣,是直接欺騙資源管理服務(wù)器蓖乘。如迅雷客戶端會把自己發(fā)現(xiàn)的資源上傳到資源管理服務(wù)器,然后推送給其他需要下載相同資源的用戶韧骗,這樣嘉抒,一個鏈接就發(fā)布出去。通過協(xié)議逆向袍暴,攻擊者偽造出大批量的熱門資源信息通過資源管理中心分發(fā)出去些侍,瞬間就可以傳遍整個P2P網(wǎng)絡(luò)。更為恐怖的是政模,這種攻擊是無法停止的岗宣,即使是攻擊者自身也無法停止,攻擊一直持續(xù)到P2P官方發(fā)現(xiàn)問題更新服務(wù)器且下載用戶重啟下載軟件時為止淋样。

CC攻擊

ChallengeCollapsar的名字源于挑戰(zhàn)國內(nèi)知名安全廠商綠盟的抗DDOS設(shè)備-“黑洞”耗式,通過botnet的傀儡主機或?qū)ふ夷涿矸?wù)器,向目標(biāo)發(fā)起大量真實的http請求,最終消耗掉大量的并發(fā)資源刊咳,拖慢整個網(wǎng)站甚至徹底拒絕服務(wù)彪见。

互聯(lián)網(wǎng)的架構(gòu)追求擴展性本質(zhì)上是為了提高并發(fā)能力,各種SQL性能優(yōu)化措施:消除慢查詢娱挨、分表分庫余指、索引、優(yōu)化數(shù)據(jù)結(jié)構(gòu)让蕾、限制搜索頻率等本質(zhì)都是為了解決資源消耗,而CC大有反其道而行之的意味或听,占滿服務(wù)器并發(fā)連接數(shù)探孝,盡可能使請求避開緩存而直接讀數(shù)據(jù)庫,讀數(shù)據(jù)庫要找最消耗資源的查詢誉裆,最好無法利用索引顿颅,每個查詢都全表掃描,這樣就能用最小的攻擊資源起到最大的拒絕服務(wù)效果足丢。

互聯(lián)網(wǎng)產(chǎn)品和服務(wù)依靠數(shù)據(jù)分析來驅(qū)動改進和持續(xù)運營粱腻,所以除了前端的APP、中間件和數(shù)據(jù)庫這類OLTP系統(tǒng)斩跌,后面還有OLAP绍些,從日志收集,存儲到數(shù)據(jù)處理和分析的大數(shù)據(jù)平臺耀鸦,當(dāng)CC攻擊發(fā)生時柬批,不僅OLTP的部分受到了影響,實際上CC會產(chǎn)生大量日志袖订,直接會對后面的OLAP產(chǎn)生影響氮帐,影響包括兩個層面,一個當(dāng)日的數(shù)據(jù)統(tǒng)計完全是錯誤的洛姑。第二個層面因CC期間訪問日志劇增也會加大后端數(shù)據(jù)處理的負(fù)擔(dān)上沐。

CC是目前應(yīng)用層攻擊的主要手段之一,在防御上有一些方法楞艾,但不能完美解決這個問題参咙。

反射型攻擊

2004年時DRDOS第一次披露,通過將SYN包的源地址設(shè)置為目標(biāo)地址硫眯,然后向大量的真實TCP服務(wù)器發(fā)送TCP的SYN包昂勒,而這些收到SYN包的TCP server為了完成3次握手把SYN|ACK包“應(yīng)答”給目標(biāo)地址,完成了一次“反射”攻擊舟铜,攻擊者隱藏了自身戈盈,但有個問題是攻擊者制造的流量和目標(biāo)收到的攻擊流量是1:1,且SYN|ACK包到達目標(biāo)后馬上被回以RST包,整個攻擊的投資回報率不高塘娶。

反射型攻擊的本質(zhì)是利用“質(zhì)詢-應(yīng)答”式協(xié)議归斤,將質(zhì)詢包的源地址通過原始套接字偽造設(shè)置為目標(biāo)地址,則應(yīng)答的“回包”都被發(fā)送至目標(biāo)刁岸,如果回包體積比較大或協(xié)議支持遞歸效果脏里,攻擊流量會被放大,成為一種高性價比的流量型攻擊虹曙。

反射型攻擊利用的協(xié)議目前包括NTP迫横、Chargen、SSDP酝碳、DNS矾踱、RPC portmap等等。

四疏哗、DDOS 攻擊防御

? ? ?攻擊流量到底多大呛讲,這是一個關(guān)鍵問題。攻擊量的大小返奉。用的防護方法不一樣贝搁。下面給你講一講,1G之內(nèi)的防護方式芽偏。費用在雷逆,<1萬,每月

談到DDoS防御污尉,首先就是要知道到底遭受了多大的攻擊关面。這個問題看似簡單,實際上卻有很多不為人知的細節(jié)在里面十厢。

? ?以SYN Flood為例等太,為了提高發(fā)送效率在服務(wù)端產(chǎn)生更多的SYN等待隊列,攻擊程序在填充包頭時蛮放,IP首部和TCP首部都不填充可選的字段缩抡,因此IP首部長度恰好是20字節(jié),TCP首部也是20字節(jié)包颁,共40字節(jié)瞻想。

? ?對于以太網(wǎng)來說,最小的包長度數(shù)據(jù)段必須達到46字節(jié)娩嚼,而攻擊報文只有40字節(jié)蘑险,因此,網(wǎng)卡在發(fā)送時岳悟,會做一些處理佃迄,在TCP首部的末尾泼差,填充6個0來滿足最小包的長度要求。這個時候呵俏,整個數(shù)據(jù)包的長度為14字節(jié)的以太網(wǎng)頭堆缘,20字節(jié)的IP頭,20字節(jié)的TCP頭普碎,再加上因為最小包長度要求而填充的6個字節(jié)的0吼肥,一共是60字節(jié)。

? ?但這還沒有結(jié)束麻车。以太網(wǎng)在傳輸數(shù)據(jù)時缀皱,還有CRC檢驗的要求。網(wǎng)卡會在發(fā)送數(shù)據(jù)之前對數(shù)據(jù)包進行CRC檢驗动猬,將4字節(jié)的CRC值附加到包頭的最后面啤斗。這個時候,數(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é)檢驗|

|目的MAC|源MAC|協(xié)議類型| IP頭 |TCP頭|以太網(wǎng)填充 | CRC檢驗 |

? ?到64字節(jié)時序目,SYN數(shù)據(jù)包已經(jīng)填充完成,準(zhǔn)備開始傳輸了伯襟。攻擊數(shù)據(jù)包很小猿涨,遠遠不夠最大傳輸單元(MTU)的1500字節(jié),因此不會被分片姆怪。那么這些數(shù)據(jù)包就像生產(chǎn)流水線上的罐頭一樣叛赚,一個包連著一個包緊密地擠在一起傳輸嗎?事實上不是這樣的稽揭。

? ?以太網(wǎng)在傳輸時俺附,還有前導(dǎo)碼(preamble)和幀間距(inter-frame gap)。其中前導(dǎo)碼占8字節(jié)(byte)溪掀,即64比特位事镣。前導(dǎo)碼前面的7字節(jié)都是10101010,1和0間隔而成揪胃。但第八個字節(jié)就變成了10101011璃哟,當(dāng)主機監(jiān)測到連續(xù)的兩個1時,就知道后面開始是數(shù)據(jù)了喊递。在網(wǎng)絡(luò)傳輸時随闪,數(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檢驗|12字節(jié)幀間距|

? ?也就是說,一個本來只有40字節(jié)的SYN包骚勘,在網(wǎng)絡(luò)上傳輸時占的帶寬铐伴,其實是84字節(jié)。

? ?有了上面的基礎(chǔ),現(xiàn)在可以開始計算攻擊流量和網(wǎng)絡(luò)設(shè)備的線速問題了盛杰。當(dāng)只填充IP頭和TCP頭的最小SYN包跑在以太網(wǎng)絡(luò)上時挽荡,100Mbit的網(wǎng)絡(luò),能支持的最大PPS(Packet Per Second)是100×106 / (8 * (64+8+12)) = 148809即供,1000Mbit的網(wǎng)絡(luò)定拟,能支持的最大PPS是1488090。

SYN Flood防御

? ?前文描述過逗嫡,SYN Flood攻擊大量消耗服務(wù)器的CPU青自、內(nèi)存資源,并占滿SYN等待隊列驱证。相應(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最大隊列長度以及設(shè)置SYN+ACK最大重試次數(shù)逆瑞。

SYN Cookie的作用是緩解服務(wù)器資源壓力。啟用之前伙单,服務(wù)器在接到SYN數(shù)據(jù)包后获高,立即分配存儲空間,并隨機化一個數(shù)字作為SYN號發(fā)送SYN+ACK數(shù)據(jù)包吻育。然后保存連接的狀態(tài)信息等待客戶端確認(rèn)念秧。啟用SYN Cookie之后,服務(wù)器不再分配存儲空間布疼,而且通過基于時間種子的隨機數(shù)算法設(shè)置一個SYN號摊趾,替代完全隨機的SYN號。發(fā)送完SYN+ACK確認(rèn)報文之后游两,清空資源不保存任何狀態(tài)信息砾层。直到服務(wù)器接到客戶端的最終ACK包,通過Cookie檢驗算法鑒定是否與發(fā)出去的SYN+ACK報文序列號匹配贱案,匹配則通過完成握手肛炮,失敗則丟棄。當(dāng)然轰坊,前文的高級攻擊中有SYN混合ACK的攻擊方法铸董,則是對此種防御方法的反擊,其中優(yōu)劣由雙方的硬件配置決定

? ?tcp_max_syn_backlog則是使用服務(wù)器的內(nèi)存資源肴沫,換取更大的等待隊列長度粟害,讓攻擊數(shù)據(jù)包不至于占滿所有連接而導(dǎo)致正常用戶無法完成握手。net.ipv4.tcp_synack_retries是降低服務(wù)器SYN+ACK報文重試次數(shù)颤芬,盡快釋放等待資源悲幅。這三種措施與攻擊的三種危害一一對應(yīng)套鹅,完完全全地對癥下藥。但這些措施也是雙刃劍汰具,可能消耗服務(wù)器更多的內(nèi)存資源卓鹿,甚至影響正常用戶建立TCP連接,需要評估服務(wù)器硬件資源和攻擊大小謹(jǐn)慎設(shè)置留荔。

? ?除了定制TCP/IP協(xié)議棧之外吟孙,還有一種常見做法是TCP首包丟棄方案,利用TCP協(xié)議的重傳機制識別正常用戶和攻擊報文聚蝶。當(dāng)防御設(shè)備接到一個IP地址的SYN報文后杰妓,簡單比對該IP是否存在于白名單中,存在則轉(zhuǎn)發(fā)到后端碘勉。如不存在于白名單中巷挥,檢查是否是該IP在一定時間段內(nèi)的首次SYN報文,不是則檢查是否重傳報文验靡,是重傳則轉(zhuǎn)發(fā)并加入白名單倍宾,不是則丟棄并加入黑名單。是首次SYN報文則丟棄并等待一段時間以試圖接受該IP的SYN重傳報文胜嗓,等待超時則判定為攻擊報文加入黑名單高职。

? ?首包丟棄方案對用戶體驗會略有影響,因為丟棄首包重傳會增大業(yè)務(wù)的響應(yīng)時間兼蕊,有鑒于此發(fā)展出了一種更優(yōu)的TCP Proxy方案初厚。所有的SYN數(shù)據(jù)報文由清洗設(shè)備接受件蚕,按照SYN Cookie方案處理孙技。和設(shè)備成功建立了TCP三次握手的IP地址被判定為合法用戶加入白名單,由設(shè)備偽裝真實客戶端IP地址再與真實服務(wù)器完成三次握手排作,隨后轉(zhuǎn)發(fā)數(shù)據(jù)牵啦。而指定時間內(nèi)沒有和設(shè)備完成三次握手的IP地址,被判定為惡意IP地址屏蔽一定時間妄痪。除了SYN Cookie結(jié)合TCP Proxy外哈雏,清洗設(shè)備還具備多種畸形TCP標(biāo)志位數(shù)據(jù)包探測的能力,通過對SYN報文返回非預(yù)期應(yīng)答測試客戶端反應(yīng)的方式來鑒別正常訪問和惡意行為衫生。

? ?清洗設(shè)備的硬件具有特殊的網(wǎng)絡(luò)處理器芯片和特別優(yōu)化的操作系統(tǒng)裳瘪、TCP/IP協(xié)議棧,可以處理非常巨大的流量和SYN隊列罪针。

HTTP Flood防御

? ?HTTP Flood攻擊防御主要通過緩存的方式進行彭羹,盡量由設(shè)備的緩存直接返回結(jié)果來保護后端業(yè)務(wù)。大型的互聯(lián)網(wǎng)企業(yè)泪酱,會有龐大的CDN節(jié)點緩存內(nèi)容派殷。

? ?當(dāng)高級攻擊者穿透緩存時还最,清洗設(shè)備會截獲HTTP請求做特殊處理。最簡單的方法就是對源IP的HTTP請求頻率做統(tǒng)計毡惜,高于一定頻率的IP地址加入黑名單拓轻。這種方法過于簡單,容易帶來誤殺经伙,并且無法屏蔽來自代理服務(wù)器的攻擊扶叉,因此逐漸廢止,取而代之的是JavaScript跳轉(zhuǎn)人機識別方案帕膜。

? ?HTTP Flood是由程序模擬HTTP請求辜梳,一般來說不會解析服務(wù)端返回數(shù)據(jù),更不會解析JS之類代碼泳叠。因此當(dāng)清洗設(shè)備截獲到HTTP請求時作瞄,返回一段特殊JavaScript代碼,正常用戶的瀏覽器會處理并正常跳轉(zhuǎn)不影響使用危纫,而攻擊程序會攻擊到空處宗挥。

DNS Flood防御

? ?DNS攻擊防御也有類似HTTP的防御手段,第一方案是緩存种蝶。其次是重發(fā)契耿,可以是直接丟棄DNS報文導(dǎo)致UDP層面的請求重發(fā),可以是返回特殊響應(yīng)強制要求客戶端使用TCP協(xié)議重發(fā)DNS查詢請求螃征。

? ?特殊的搪桂,對于授權(quán)域DNS的保護,設(shè)備會在業(yè)務(wù)正常時期提取收到的DNS域名列表和ISP DNS IP列表備用盯滚,在攻擊時踢械,非此列表的請求一律丟棄,大幅降低性能壓力魄藕。對于域名内列,實行同樣的域名白名單機制,非白名單中的域名解析請求背率,做丟棄處理话瞧。

慢速連接攻擊防御

? ? Slowloris攻擊防御比較簡單,主要方案有兩個寝姿。

第一個是統(tǒng)計每個TCP連接的時長并計算單位時間內(nèi)通過的報文數(shù)量即可做精確識別交排。一個TCP連接中,HTTP報文太少和報文太多都是不正常的饵筑,過少可能是慢速連接攻擊埃篓,過多可能是使用HTTP 1.1協(xié)議進行的HTTP Flood攻擊,在一個TCP連接中發(fā)送多個HTTP請求翻翩。

第二個是限制HTTP頭部傳輸?shù)淖畲笤S可時間都许。超過指定時間HTTP Header還沒有傳輸完成稻薇,直接判定源IP地址為慢速連接攻擊,中斷連接并加入黑名單胶征。

五塞椎、總結(jié)

DDOS攻擊很難通過某一種手段做到完全防御,很多中小型企業(yè)睛低,沒有能力也沒有財力來對抗DDOS攻擊案狠。但通過下面的幾點,還是可以做到簡單的防御:

保證服務(wù)器系統(tǒng)的安全

首先要確保服務(wù)器軟件沒有任何漏洞钱雷,防止攻擊者入侵骂铁。確保服務(wù)器采用最新系統(tǒng),并打上安全補丁罩抗。在服務(wù)器上刪除未使用的服務(wù)拉庵,關(guān)閉未使用的端口。對于服務(wù)器上運行的網(wǎng)站套蒂,確保其打了最新的補丁钞支,沒有安全漏洞。

隱藏服務(wù)器真實IP

服務(wù)器前端加CDN中轉(zhuǎn)(免費的有百度云加速操刀、360網(wǎng)站衛(wèi)士烁挟、加速樂、安全寶等)骨坑,如果資金充裕的話撼嗓,可以購買高防的盾機,用于隱藏服務(wù)器真實IP欢唾,域名解析使用CDN的IP且警,所有解析的子域名都使用CDN的IP地址。此外匈辱,服務(wù)器上部署的其他域名也不能使用真實IP解析振湾,全部都使用CDN來解析杀迹。

另外亡脸,防止服務(wù)器對外傳送信息泄漏IP,最常見的是树酪,服務(wù)器不使用發(fā)送郵件功能浅碾,如果非要發(fā)送郵件,可以通過第三方代理(例如sendcloud)發(fā)送续语,這樣對外顯示的IP是代理的IP垂谢。

總之,只要服務(wù)器的真實IP不泄露疮茄,10G以下小流量DDOS的預(yù)防花不了多少錢滥朱,免費的CDN就可以應(yīng)付得了根暑。如果攻擊流量超過20G,那么免費的CDN可能就頂不住了徙邻,需要購買一個高防的盾機來應(yīng)付了排嫌,而服務(wù)器的真實IP同樣需要隱藏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缰犁,一起剝皮案震驚了整個濱河市淳地,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帅容,老刑警劉巖颇象,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異并徘,居然都是意外死亡遣钳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門麦乞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耍贾,“玉大人,你說我怎么就攤上這事路幸〖隹” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵简肴,是天一觀的道長晃听。 經(jīng)常有香客問我,道長砰识,這世上最難降的妖魔是什么能扒? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辫狼,結(jié)果婚禮上初斑,老公的妹妹穿的比我還像新娘。我一直安慰自己膨处,他們只是感情好见秤,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著真椿,像睡著了一般鹃答。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上突硝,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天测摔,我揣著相機與錄音,去河邊找鬼。 笑死锋八,一個胖子當(dāng)著我的面吹牛浙于,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挟纱,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼路媚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了樊销?” 一聲冷哼從身側(cè)響起整慎,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎围苫,沒想到半個月后裤园,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剂府,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年拧揽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腺占。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡淤袜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衰伯,到底是詐尸還是另有隱情铡羡,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布意鲸,位于F島的核電站烦周,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怎顾。R本人自食惡果不足惜焕参,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一屈留、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驳遵,春花似錦顷歌、人聲如沸搁进。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钻注,卻和暖如春蚂且,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幅恋。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泵肄,地道東北人捆交。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓淑翼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親品追。 傳聞我的和親對象是個殘疾皇子玄括,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容