DDOS攻擊攻擊種類和原理
DoS攻擊、DDoS攻擊和DRDoS攻擊相信大家已經(jīng)早有耳聞了吧!DoS是Denial of Service的簡寫,就是拒絕服務(wù),而DDoS就是Distributed Denial of Service的簡寫,就是分布式拒絕服務(wù),而DRDoS就是Distributed Reflection Denial of Service的簡寫,這是分布反射式拒絕服務(wù)的意思。
不過這3種攻擊方法最厲害的還是DDoS,那個(gè)DRDoS攻擊雖然是新近出的一種攻擊方法,但它只是DDoS攻擊的變形,它的唯一不同就是不用占領(lǐng)大量的“肉雞”。這三種方法都是利用TCP三次握手的漏洞進(jìn)行攻擊的。
SYN攻擊是當(dāng)前網(wǎng)絡(luò)上最為常見DDos攻擊,也是最為經(jīng)典的拒絕服務(wù)攻擊,它利用了TCP協(xié)議實(shí)現(xiàn)上的一個(gè)缺陷,通過向網(wǎng)絡(luò)服務(wù)所在端口發(fā)送大量的偽造源地址的攻擊報(bào)文,就可能造成目標(biāo)服務(wù)器中的半開連接隊(duì)列被占滿,從而阻止其它合法用戶進(jìn)行訪問。這種攻擊早在1996年就被發(fā)現(xiàn),但至今仍然顯示出強(qiáng)大的生命力。很多操作系統(tǒng),甚至防火墻、路由器都無法有效地防御這種攻擊,而且由于它可以方便地偽造源地址,追查起來非常困難。它的數(shù)據(jù)包特征通常是,源發(fā)送了大量的SYN包,并且缺少三次握手的最后一步握手ACK回復(fù)。
DDoS攻擊它的原理說白了就是群毆,用好多的機(jī)器對(duì)目標(biāo)機(jī)器一起發(fā)動(dòng)DoS攻擊,但這不是很多黑客一起參與的,這種攻擊只是由一名黑客來操作的。這名黑客不是擁有很多機(jī)器,他是通過他的機(jī)器在網(wǎng)絡(luò)上占領(lǐng)很多的"肉雞",并且控制這些"肉雞"來發(fā)動(dòng)DDoS攻擊,要不然怎么叫做分布式呢。還是剛才的那個(gè)例子,你的機(jī)器每秒能發(fā)送10個(gè)攻擊數(shù)據(jù)包,而被攻擊的機(jī)器每秒能夠接受100的數(shù)據(jù)包,這樣你的攻擊肯定不會(huì)起作用,而你再用10臺(tái)或更多的機(jī)器來對(duì)被攻擊目標(biāo)的機(jī)器進(jìn)行攻擊的話,那結(jié)果就可想而知了。
DRDoS分布反射式拒絕服務(wù)攻擊這是DDoS攻擊的變形,它與DDoS的不同之處就是DrDoS不需要在攻擊之前占領(lǐng)大量的"肉雞"。它的攻擊原理和Smurf攻擊原理相近,不過DRDoS是可以在廣域網(wǎng)上進(jìn)行的,而Smurf攻擊是在局域網(wǎng)進(jìn)行的。它的作用原理是基于廣播地址與回應(yīng)請(qǐng)求的。一臺(tái)計(jì)算機(jī)向另一臺(tái)計(jì)算機(jī)發(fā)送一些特殊的數(shù)據(jù)包如ping請(qǐng)求時(shí),會(huì)接到它的回應(yīng);如果向本網(wǎng)絡(luò)的廣播地址發(fā)送請(qǐng)求包,實(shí)際上會(huì)到達(dá)網(wǎng)絡(luò)上所有的計(jì)算機(jī),這時(shí)就會(huì)得到所有計(jì)算機(jī)的回應(yīng)。這些回應(yīng)是需要被接收的計(jì)算機(jī)處理的,每處理一個(gè)就要占用一份系統(tǒng)資源,如果同時(shí)接到網(wǎng)絡(luò)上所有計(jì)算機(jī)的回應(yīng),接收方的系統(tǒng)是有可能吃不消的,就象遭到了DDoS攻擊一樣。不過是沒有人笨到自己攻擊自己,不過這種方法被黑客加以改進(jìn)就具有很大的威力了。黑客向廣播地址發(fā)送請(qǐng)求包,所有的計(jì)算機(jī)得到請(qǐng)求后,卻不會(huì)把回應(yīng)發(fā)到黑客那里,而是發(fā)到被攻擊主機(jī)。這是因?yàn)楹诳兔俺淞吮还糁鳈C(jī)。黑客發(fā)送請(qǐng)求包所用的軟件是可以偽造源地址的,接到偽造數(shù)據(jù)包的主機(jī)會(huì)根據(jù)源地址把回應(yīng)發(fā)出去,這當(dāng)然就是被攻擊主機(jī)的地址。黑客同時(shí)還會(huì)把發(fā)送請(qǐng)求包的時(shí)間間隔減小,這樣在短時(shí)間能發(fā)出大量的請(qǐng)求包,使被攻擊主機(jī)接到從被欺騙計(jì)算機(jī)那里傳來的洪水般的回應(yīng),就像遭到了DDoS攻擊導(dǎo)致系統(tǒng)崩潰。駭客借助了網(wǎng)絡(luò)中所有計(jì)算機(jī)來攻擊受害者,而不需要事先去占領(lǐng)這些被欺騙的主機(jī),這就是Smurf攻擊。而DRDoS攻擊正是這個(gè)原理,黑客同樣利用特殊的發(fā)包工具,首先把偽造了源地址的SYN連接請(qǐng)求包發(fā)送到那些被欺騙的計(jì)算機(jī)上,根據(jù)TCP三次握手的規(guī)則,這些計(jì)算機(jī)會(huì)向源IP發(fā)出SYN+ACK或RST包來響應(yīng)這個(gè)請(qǐng)求。同Smurf攻擊一樣,黑客所發(fā)送的請(qǐng)求包的源IP地址是被攻擊主機(jī)的地址,這樣受欺騙的主機(jī)就都會(huì)把回應(yīng)發(fā)到被攻擊主機(jī)處,造成被攻擊主機(jī)忙于處理這些回應(yīng)而癱瘓。
DDoS究竟如何攻擊?目前最流行也是最好用的攻擊方法就是使用SYN-Flood進(jìn)行攻擊,SYN-Flood也就是SYN洪水攻擊。SYN-Flood不會(huì)完成TCP三次握手的第三步,也就是不發(fā)送確認(rèn)連接的信息給服務(wù)器。這樣,服務(wù)器無法完成第三次握手,但服務(wù)器不會(huì)立即放棄,服務(wù)器會(huì)不停的重試并等待一定的時(shí)間后放棄這個(gè)未完成的連接,這段時(shí)間叫做SYN timeout,這段時(shí)間大約30秒-2分鐘左右。若是一個(gè)用戶在連接時(shí)出現(xiàn)問題導(dǎo)致服務(wù)器的一個(gè)線程等待1分鐘并不是什么大不了的問題,但是若有人用特殊的軟件大量模擬這種情況,那后果就可想而知了。一個(gè)服務(wù)器若是處理這些大量的半連接信息而消耗大量的系統(tǒng)資源和網(wǎng)絡(luò)帶寬,這樣服務(wù)器就不會(huì)再有空余去處理普通用戶的正常請(qǐng)求(因?yàn)榭蛻舻恼U?qǐng)求比率很小)。這樣這個(gè)服務(wù)器就無法工作了,這種攻擊就叫做:SYN-Flood攻擊。
到目前為止,進(jìn)行DDoS攻擊的防御還是比較困難的。首先,這種攻擊的特點(diǎn)是它利用了TCP/IP協(xié)議的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻擊。不過這不等于我們就沒有辦法阻擋DDoS攻擊,我們可以盡力來減少DDoS的攻擊。下面就是一些防御方法:
1. 確保服務(wù)器的系統(tǒng)文件是最新的版本,并及時(shí)更新系統(tǒng)補(bǔ)丁。
2. 關(guān)閉不必要的服務(wù)。
3. 限制同時(shí)打開的SYN半連接數(shù)目。
4. 縮短SYN半連接的time out 時(shí)間。
5. 正確設(shè)置防火墻
- 禁止對(duì)主機(jī)的非開放服務(wù)的訪問
- 限制特定IP地址的訪問
- 啟用防火墻的防DDoS的屬性
- 嚴(yán)格限制對(duì)外開放的服務(wù)器的向外訪問
- 運(yùn)行端口映射程序禍端口掃描程序,要認(rèn)真檢查特權(quán)端口和非特權(quán)端口。
6. 認(rèn)真檢查網(wǎng)絡(luò)設(shè)備和主機(jī)/服務(wù)器系統(tǒng)的日志。只要日志出現(xiàn)漏洞或是時(shí)間變更,那這臺(tái)機(jī)器就可 能遭到了攻擊。
7. 限制在防火墻外與網(wǎng)絡(luò)文件共享。這樣會(huì)給黑客截取系統(tǒng)文件的機(jī)會(huì),主機(jī)的信息暴露給黑客, 無疑是給了對(duì)方入侵的機(jī)會(huì)。
8. 路由器
以Cisco路由器為例
- Cisco Express Forwarding(CEF)
- 使用 unicast reverse-path
- 訪問控制列表(ACL)過濾
- 設(shè)置SYN數(shù)據(jù)包流量速率
- 升級(jí)版本過低的ISO
- 為路由器建立log server
能夠了解DDoS攻擊的原理,對(duì)我們防御的措施在加以改進(jìn),我們就可以擋住一部分的DDoS攻擊。
ACK Flood攻擊
ACK Flood攻擊是在TCP連接建立之后,所有的數(shù)據(jù)傳輸TCP報(bào)文都是帶有ACK標(biāo)志位的,主機(jī)在接收到一個(gè)帶有ACK標(biāo)志位的數(shù)據(jù)包的時(shí)候,需要檢查該數(shù)據(jù)包所表示的連接四元組是否存在,如果存在則檢查該數(shù)據(jù)包所表示的狀態(tài)是否合法,然后再向應(yīng)用層傳遞該數(shù)據(jù)包。如果在檢查中發(fā)現(xiàn)該數(shù)據(jù)包不合法,例如該數(shù)據(jù)包所指向的目的端口在本機(jī)并未開放,則主機(jī)操作系統(tǒng)協(xié)議棧會(huì)回應(yīng)RST包告訴對(duì)方此端口不存在。
UDP Flood攻擊
UDP Flood是日漸猖厥的流量型DoS攻擊,原理也很簡單。常見的情況是利用大量UDP小包沖擊DNS服務(wù)器或Radius認(rèn)證服務(wù)器、流媒體視頻服務(wù)器。 100k pps的UDP Flood經(jīng)常將線路上的骨干設(shè)備例如防火墻打癱,造成整個(gè)網(wǎng)段的癱瘓。由于UDP協(xié)議是一種無連接的服務(wù),在UDP FLOOD攻擊中,攻擊者可發(fā)送大量偽造源IP地址的小UDP包。但是,由于UDP協(xié)議是無連接性的,所以只要開了一個(gè)UDP的端口提供相關(guān)服務(wù)的話,那么就可針對(duì)相關(guān)的服務(wù)進(jìn)行攻擊。
ICMP Flood攻擊
ICMP Flood 的攻擊原理和ACK Flood原理類似,屬于流量型的攻擊方式,也是利用大的流量給服務(wù)器帶來較大的負(fù)載,影響服務(wù)器的正常服務(wù)。由于目前很多防火墻直接過濾ICMP報(bào)文,因此ICMP Flood出現(xiàn)的頻度較低。
Connection Flood攻擊
Connection Flood是典型的并且非常有效的利用小流量沖擊大帶寬網(wǎng)絡(luò)服務(wù)的攻擊方式,,這種攻擊方式目前已經(jīng)越來越猖獗。這種攻擊的原理是利用真實(shí)的IP地址向服務(wù)器發(fā)起大量的連接,并且建立連接之后很長時(shí)間不釋放,占用服務(wù)器的資源,造成服務(wù)器服務(wù)器上殘余連接(WAIT狀態(tài))過多,效率降低,甚至資源耗盡,無法響應(yīng)其他客戶所發(fā)起的連接。
其中一種攻擊方法是每秒鐘向服務(wù)器發(fā)起大量的連接請(qǐng)求,這類似于固定源IP的SYN Flood攻擊,不同的是采用了真實(shí)的源IP地址。通常這可以在防火墻上限制每個(gè)源IP地址每秒鐘的連接數(shù)來達(dá)到防護(hù)目的。但現(xiàn)在已有工具采用慢速連接的方式,也即幾秒鐘才和服務(wù)器建立一個(gè)連接,連接建立成功之后并不釋放并定時(shí)發(fā)送垃圾數(shù)據(jù)包給服務(wù)器使連接得以長時(shí)間保持。這樣一個(gè)IP地址就可以和服務(wù)器建立成百上千的連接,而服務(wù)器可以承受的連接數(shù)是有限的,這就達(dá)到了拒絕服務(wù)的效果。
HTTP Get攻擊
用MSSQLServer、MySQLServer、Oracle等數(shù)據(jù)庫的網(wǎng)站系統(tǒng)而設(shè)計(jì)的,特征是和服務(wù)器建立正常的TCP連接,并不斷的向腳本程序提交查詢、列表等大量耗費(fèi)數(shù)據(jù)庫資源的調(diào)用,典型的以小博大的攻擊方法。一般來說,提交一個(gè)GET或POST指令對(duì)客戶端的耗費(fèi)和帶寬的占用是幾乎可以忽略的,而服務(wù)器為處理此請(qǐng)求卻可能要從上萬條記錄中去查出某個(gè)記錄,這種處理過程對(duì)資源的耗費(fèi)是很大的,常見的數(shù)據(jù)庫服務(wù)器很少能支持?jǐn)?shù)百個(gè)查詢指令同時(shí)執(zhí)行,而這對(duì)于客戶端來說卻是輕而易舉的,因此攻擊者只需通過Proxy代理向主機(jī)服務(wù)器大量遞交查詢指令,只需數(shù)分鐘就會(huì)把服務(wù)器資源消耗掉而導(dǎo)致拒絕服務(wù),常見的現(xiàn)象就是網(wǎng)站慢如蝸牛、ASP程序失效、PHP連接數(shù)據(jù)庫失敗、數(shù)據(jù)庫主程序占用CPU偏高。這種攻擊的特點(diǎn)是可以完全繞過普通的防火墻防護(hù),輕松找一些Proxy代理就可實(shí)施攻擊,缺點(diǎn)是對(duì)付只有靜態(tài)頁面的網(wǎng)站效果會(huì)大打折扣,并且有些Proxy會(huì)暴露攻擊者的IP地址。
UDP DNS Query Flood攻擊
UDP DNS Query Flood攻擊采用的方法是向被攻擊的服務(wù)器發(fā)送大量的域名解析請(qǐng)求,通常請(qǐng)求解析的域名是隨機(jī)生成或者是網(wǎng)絡(luò)世界上根本不存在的域名,被攻擊的DNS 服務(wù)器在接收到域名解析請(qǐng)求的時(shí)候首先會(huì)在服務(wù)器上查找是否有對(duì)應(yīng)的緩存,如果查找不到并且該域名無法直接由服務(wù)器解析的時(shí)候,DNS 服務(wù)器會(huì)向其上層DNS服務(wù)器遞歸查詢域名信息。域名解析的過程給服務(wù)器帶來了很大的負(fù)載,每秒鐘域名解析請(qǐng)求超過一定的數(shù)量就會(huì)造成DNS服務(wù)器解析域名超時(shí)。
根據(jù)微軟的統(tǒng)計(jì)數(shù)據(jù),一臺(tái)DNS服務(wù)器所能承受的動(dòng)態(tài)域名查詢的上限是每秒鐘9000個(gè)請(qǐng)求。而我們知道,在一臺(tái)P3的PC機(jī)上可以輕易地構(gòu)造出每秒鐘幾萬個(gè)域名解析請(qǐng)求,足以使一臺(tái)硬件配置極高的DNS服務(wù)器癱瘓,由此可見DNS 服務(wù)器的脆弱性。同時(shí)需要注意的是,蠕蟲擴(kuò)散也會(huì)帶來大量的域名解析請(qǐng)求。