一、為何要DDOS?
隨著Internet互聯(lián)網(wǎng)絡(luò)帶寬的增加和多種DDOS黑客工具的不斷發(fā)布,DDOS拒絕服務(wù)攻擊的實(shí)施越來(lái)越容易,DDOS攻擊事件正在成上升趨勢(shì)。出于商業(yè)競(jìng)爭(zhēng)、打擊報(bào)復(fù)和網(wǎng)絡(luò)敲詐等多種因素,導(dǎo)致很多IDC托管機(jī)房、商業(yè)站點(diǎn)、游戲服務(wù)器、聊天網(wǎng)絡(luò)等網(wǎng)絡(luò)服務(wù)商長(zhǎng)期以來(lái)一直被DDOS攻擊所困擾,隨之而來(lái)的是客戶(hù)投訴、同虛擬主機(jī)用戶(hù)受牽連、法律糾紛、商業(yè)損失等一系列問(wèn)題,因此,解決DDOS攻擊問(wèn)題成為網(wǎng)絡(luò)服務(wù)商必須考慮的頭等大事。
二、什么是DDOS?
DDOS是英文Distributed Denial of Service的縮寫(xiě),意即“分布式拒絕服務(wù)”,那么什么又是拒絕服務(wù)(Denial of Service)呢?可以這么理解,凡是能導(dǎo)致合法用戶(hù)不能夠訪問(wèn)正常網(wǎng)絡(luò)服務(wù)的行為都算是拒絕服務(wù)攻擊。也就是說(shuō)拒絕服務(wù)攻擊的目的非常明確,就是要阻止合法用戶(hù)對(duì)正常網(wǎng)絡(luò)資源的訪問(wèn),從而達(dá)成攻擊者不可告人的目的。雖然同樣是拒絕服務(wù)攻擊,但是DDOS和DOS還是有所不同,DDOS的攻擊策略側(cè)重于通過(guò)很多“僵尸主機(jī)”(被攻擊者入侵過(guò)或可間接利用的主機(jī))向受害主機(jī)發(fā)送大量看似合法的網(wǎng)絡(luò)包,從而造成網(wǎng)絡(luò)阻塞或服務(wù)器資源耗盡而導(dǎo)致拒絕服務(wù),分布式拒絕服務(wù)攻擊一旦被實(shí)施,攻擊網(wǎng)絡(luò)包就會(huì)猶如洪水般涌向受害主機(jī),從而把合法用戶(hù)的網(wǎng)絡(luò)包淹沒(méi),導(dǎo)致合法用戶(hù)無(wú)法正常訪問(wèn)服務(wù)器的網(wǎng)絡(luò)資源,因此,拒絕服務(wù)攻擊又被稱(chēng)之為“洪水式攻擊”,常見(jiàn)的DDOS攻擊手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood等;而DOS則側(cè)重于通過(guò)對(duì)主機(jī)特定漏洞的利用攻擊導(dǎo)致網(wǎng)絡(luò)棧失效、系統(tǒng)崩潰、主機(jī)死機(jī)而無(wú)法提供正常的網(wǎng)絡(luò)服務(wù)功能,從而造成拒絕服務(wù),常見(jiàn)的DOS攻擊手段有TearDrop、Land、Jolt、IGMP Nuker、Boink、Smurf、Bonk、OOB等。就這兩種拒絕服務(wù)攻擊而言,危害較大的主要是DDOS攻擊,原因是很難防范,至于DOS攻擊,通過(guò)給主機(jī)服務(wù)器打補(bǔ)丁或安裝防火墻軟件就可以很好地防范,后文會(huì)詳細(xì)介紹怎么對(duì)付DDOS攻擊。
三、被DDOS了嗎?
DDOS的表現(xiàn)形式主要有兩種,一種為流量攻擊,主要是針對(duì)網(wǎng)絡(luò)帶寬的攻擊,即大量攻擊包導(dǎo)致網(wǎng)絡(luò)帶寬被阻塞,合法網(wǎng)絡(luò)包被虛假的攻擊包淹沒(méi)而無(wú)法到達(dá)主機(jī);另一種為資源耗盡攻擊,主要是針對(duì)服務(wù)器主機(jī)的攻擊,即通過(guò)大量攻擊包導(dǎo)致主機(jī)的內(nèi)存被耗盡或CPU被內(nèi)核及應(yīng)用程序占完而造成無(wú)法提供網(wǎng)絡(luò)服務(wù)。
如何判斷網(wǎng)站是否遭受了流量攻擊呢?可通過(guò)Ping命令來(lái)測(cè)試,若發(fā)現(xiàn)Ping超時(shí)或丟包嚴(yán)重(假定平時(shí)是正常的),則可能遭受了流量攻擊,此時(shí)若發(fā)現(xiàn)和你的主機(jī)接在同一交換機(jī)上的服務(wù)器也訪問(wèn)不了了,基本可以確定是遭受了流量攻擊。當(dāng)然,這樣測(cè)試的前提是你到服務(wù)器主機(jī)之間的ICMP協(xié)議沒(méi)有被路由器和防火墻等設(shè)備屏蔽,否則可采取Telnet主機(jī)服務(wù)器的網(wǎng)絡(luò)服務(wù)端口來(lái)測(cè)試,效果是一樣的。不過(guò)有一點(diǎn)可以肯定,假如平時(shí)Ping你的主機(jī)服務(wù)器和接在同一交換機(jī)上的主機(jī)服務(wù)器都是正常的,突然都Ping不通了或者是嚴(yán)重丟包,那么假如可以排除網(wǎng)絡(luò)故障因素的話則肯定是遭受了流量攻擊,再一個(gè)流量攻擊的典型現(xiàn)象是,一旦遭受流量攻擊,會(huì)發(fā)現(xiàn)用遠(yuǎn)程終端連接網(wǎng)站服務(wù)器會(huì)失敗。
相對(duì)于流量攻擊而言,資源耗盡攻擊要容易判斷一些,假如平時(shí)Ping網(wǎng)站主機(jī)和訪問(wèn)網(wǎng)站都是正常的,發(fā)現(xiàn)突然網(wǎng)站訪問(wèn)非常緩慢或無(wú)法訪問(wèn)了,而Ping還可以Ping通,則很可能遭受了資源耗盡攻擊,此時(shí)若在服務(wù)器上用Netstat -na命令觀察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等狀態(tài)存在,而ESTABLISHED很少,則可判定肯定是遭受了資源耗盡攻擊。還有一種屬于資源耗盡攻擊的現(xiàn)象是,Ping自己的網(wǎng)站主機(jī)Ping不通或者是丟包嚴(yán)重,而Ping與自己的主機(jī)在同一交換機(jī)上的服務(wù)器則正常,造成這種原因是網(wǎng)站主機(jī)遭受攻擊后導(dǎo)致系統(tǒng)內(nèi)核或某些應(yīng)用程序CPU利用率達(dá)到100%無(wú)法回應(yīng)Ping命令,其實(shí)帶寬還是有的,否則就Ping不通接在同一交換機(jī)上的主機(jī)了。
當(dāng)前主要有三種流行的DDOS攻擊:
1、SYN/ACK Flood攻擊:這種攻擊方法是經(jīng)典最有效的DDOS方法,可通殺各種系統(tǒng)的網(wǎng)絡(luò)服務(wù),主要是通過(guò)向受害主機(jī)發(fā)送大量偽造源IP和源端口的SYN或ACK包,導(dǎo)致主機(jī)的緩存資源被耗盡或忙于發(fā)送回應(yīng)包而造成拒絕服務(wù),由于源都是偽造的故追蹤起來(lái)比較困難,缺點(diǎn)是實(shí)施起來(lái)有一定難度,需要高帶寬的僵尸主機(jī)支持。少量的這種攻擊會(huì)導(dǎo)致主機(jī)服務(wù)器無(wú)法訪問(wèn),但卻可以Ping的通,在服務(wù)器上用Netstat -na命令會(huì)觀察到存在大量的SYN_RECEIVED狀態(tài),大量的這種攻擊會(huì)導(dǎo)致Ping失敗、TCP/IP棧失效,并會(huì)出現(xiàn)系統(tǒng)凝固現(xiàn)象,即不響應(yīng)鍵盤(pán)和鼠標(biāo)。普通防火墻大多無(wú)法抵御此種攻擊。
2、TCP全連接攻擊:這種攻擊是為了繞過(guò)常規(guī)防火墻的檢查而設(shè)計(jì)的,一般情況下,常規(guī)防火墻大多具備過(guò)濾TearDrop、Land等DOS攻擊的能力,但對(duì)于正常的TCP連接是放過(guò)的,殊不知很多網(wǎng)絡(luò)服務(wù)程序(如:IIS、Apache等Web服務(wù)器)能接受的TCP連接數(shù)是有限的,一旦有大量的TCP連接,即便是正常的,也會(huì)導(dǎo)致網(wǎng)站訪問(wèn)非常緩慢甚至無(wú)法訪問(wèn),TCP全連接攻擊就是通過(guò)許多僵尸主機(jī)不斷地與受害服務(wù)器建立大量的TCP連接,直到服務(wù)器的內(nèi)存等資源被耗盡而被拖跨,從而造成拒絕服務(wù),這種攻擊的特點(diǎn)是可繞過(guò)一般防火墻的防護(hù)而達(dá)到攻擊目的,缺點(diǎn)是需要找很多僵尸主機(jī),并且由于僵尸主機(jī)的IP是暴露的,因此容易被追蹤。
3、刷Script腳本攻擊:這種攻擊主要是針對(duì)存在ASP、JSP、PHP、CGI等腳本程序,并調(diào)用MSSQLServer、MySQLServer、Oracle等數(shù)據(jù)庫(kù)的網(wǎng)站系統(tǒng)而設(shè)計(jì)的,特征是和服務(wù)器建立正常的TCP連接,并不斷的向腳本程序提交查詢(xún)、列表等大量耗費(fèi)數(shù)據(jù)庫(kù)資源的調(diào)用,典型的以小博大的攻擊方法。一般來(lái)說(shuō),提交一個(gè)GET或POST指令對(duì)客戶(hù)端的耗費(fèi)和帶寬的占用是幾乎可以忽略的,而服務(wù)器為處理此請(qǐng)求卻可能要從上萬(wàn)條記錄中去查出某個(gè)記錄,這種處理過(guò)程對(duì)資源的耗費(fèi)是很大的,常見(jiàn)的數(shù)據(jù)庫(kù)服務(wù)器很少能支持?jǐn)?shù)百個(gè)查詢(xún)指令同時(shí)執(zhí)行,而這對(duì)于客戶(hù)端來(lái)說(shuō)卻是輕而易舉的,因此攻擊者只需通過(guò)Proxy代理向主機(jī)服務(wù)器大量遞交查詢(xún)指令,只需數(shù)分鐘就會(huì)把服務(wù)器資源消耗掉而導(dǎo)致拒絕服務(wù),常見(jiàn)的現(xiàn)象就是網(wǎng)站慢如蝸牛、ASP程序失效、PHP連接數(shù)據(jù)庫(kù)失敗、數(shù)據(jù)庫(kù)主程序占用CPU偏高。這種攻擊的特點(diǎn)是可以完全繞過(guò)普通的防火墻防護(hù),輕松找一些Proxy代理就可實(shí)施攻擊,缺點(diǎn)是對(duì)付只有靜態(tài)頁(yè)面的網(wǎng)站效果會(huì)大打折扣,并且有些Proxy會(huì)暴露攻擊者的IP地址。
四、怎么抵御DDOS?
對(duì)付DDOS是一個(gè)系統(tǒng)工程,想僅僅依靠某種系統(tǒng)或產(chǎn)品防住DDOS是不現(xiàn)實(shí)的,可以肯定的是,完全杜絕DDOS目前是不可能的,但通過(guò)適當(dāng)?shù)拇胧┑钟?0%的DDOS攻擊是可以做到的,基于攻擊和防御都有成本開(kāi)銷(xiāo)的緣故,若通過(guò)適當(dāng)?shù)霓k法增強(qiáng)了抵御DDOS的能力,也就意味著加大了攻擊者的攻擊成本,那么絕大多數(shù)攻擊者將無(wú)法繼續(xù)下去而放棄,也就相當(dāng)于成功的抵御了DDOS攻擊。以下為筆者多年以來(lái)抵御DDOS的經(jīng)驗(yàn)和建議,和大家分享!
1、采用高性能的網(wǎng)絡(luò)設(shè)備
首先要保證網(wǎng)絡(luò)設(shè)備不能成為瓶頸,因此選擇路由器、交換機(jī)、硬件防火墻等設(shè)備的時(shí)候要盡量選用知名度高、口碑好的產(chǎn)品。再就是假如和網(wǎng)絡(luò)提供商有特殊關(guān)系或協(xié)議的話就更好了,當(dāng)大量攻擊發(fā)生的時(shí)候請(qǐng)他們?cè)诰W(wǎng)絡(luò)接點(diǎn)處做一下流量限制來(lái)對(duì)抗某些種類(lèi)的DDOS攻擊是非常有效的。
2、盡量避免NAT的使用
無(wú)論是路由器還是硬件防護(hù)墻設(shè)備要盡量避免采用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT的使用,因?yàn)椴捎么思夹g(shù)會(huì)較大降低網(wǎng)絡(luò)通信能力,其實(shí)原因很簡(jiǎn)單,因?yàn)镹AT需要對(duì)地址來(lái)回轉(zhuǎn)換,轉(zhuǎn)換過(guò)程中需要對(duì)網(wǎng)絡(luò)包的校驗(yàn)和進(jìn)行計(jì)算,因此浪費(fèi)了很多CPU的時(shí)間,但有些時(shí)候必須使用NAT,那就沒(méi)有好辦法了。
3、充足的網(wǎng)絡(luò)帶寬保證
網(wǎng)絡(luò)帶寬直接決定了能抗受攻擊的能力,假若僅僅有10M帶寬的話,無(wú)論采取什么措施都很難對(duì)抗現(xiàn)在的SYNFlood攻擊,當(dāng)前至少要選擇100M的共享帶寬,最好的當(dāng)然是掛在1000M的主干上了。但需要注意的是,主機(jī)上的網(wǎng)卡是1000M的并不意味著它的網(wǎng)絡(luò)帶寬就是千兆的,若把它接在100M的交換機(jī)上,它的實(shí)際帶寬不會(huì)超過(guò)100M,再就是接在100M的帶寬上也不等于就有了百兆的帶寬,因?yàn)榫W(wǎng)絡(luò)服務(wù)商很可能會(huì)在交換機(jī)上限制實(shí)際帶寬為10M,這點(diǎn)一定要搞清楚。
4、升級(jí)主機(jī)服務(wù)器硬件
在有網(wǎng)絡(luò)帶寬保證的前提下,請(qǐng)盡量提升硬件配置,要有效對(duì)抗每秒10萬(wàn)個(gè)SYN攻擊包,服務(wù)器的配置至少應(yīng)該為:P4 2.4G/DDR512M/SCSI-HD,起關(guān)鍵作用的主要是CPU和內(nèi)存,若有志強(qiáng)雙CPU的話就用它吧,內(nèi)存一定要選擇DDR的高速內(nèi)存,硬盤(pán)要盡量選擇SCSI的,別只貪IDE價(jià)格不貴量還足的便宜,否則會(huì)付出高昂的性能代價(jià),再就是網(wǎng)卡一定要選用3COM或Intel等名牌的,若是Realtek的還是用在自己的PC上吧。
5、把網(wǎng)站做成靜態(tài)頁(yè)面
大量事實(shí)證明,把網(wǎng)站盡可能做成靜態(tài)頁(yè)面,不僅能大大提高抗攻擊能力,而且還給黑客入侵帶來(lái)不少麻煩,至少到現(xiàn)在為止關(guān)于HTML的溢出還沒(méi)出現(xiàn),看看吧!新浪、搜狐、網(wǎng)易等門(mén)戶(hù)網(wǎng)站主要都是靜態(tài)頁(yè)面,若你非需要?jiǎng)討B(tài)腳本調(diào)用,那就把它弄到另外一臺(tái)單獨(dú)主機(jī)去,免的遭受攻擊時(shí)連累主服務(wù)器,當(dāng)然,適當(dāng)放一些不做數(shù)據(jù)庫(kù)調(diào)用腳本還是可以的,此外,最好在需要調(diào)用數(shù)據(jù)庫(kù)的腳本中拒絕使用代理的訪問(wèn),因?yàn)榻?jīng)驗(yàn)表明使用代理訪問(wèn)你網(wǎng)站的80%屬于惡意行為。
6、增強(qiáng)操作系統(tǒng)的TCP/IP棧
Win2000和Win2003作為服務(wù)器操作系統(tǒng),本身就具備一定的抵抗DDOS攻擊的能力,只是默認(rèn)狀態(tài)下沒(méi)有開(kāi)啟而已,若開(kāi)啟的話可抵擋約10000個(gè)SYN攻擊包,若沒(méi)有開(kāi)啟則僅能抵御數(shù)百個(gè),具體怎么開(kāi)啟,自己去看微軟的文章吧!《強(qiáng)化 TCP/IP 堆棧安全》- http://www.microsoft.com/china/techn...secmod109.mspx
也許有的人會(huì)問(wèn),那我用的是Linux和FreeBSD怎么辦?很簡(jiǎn)單,按照這篇文章去做吧!《SYN Cookies》- http://cr.yp.to/syncookies.html
7、安裝專(zhuān)業(yè)抗DDOS防火墻
8、其他防御措施
以上的七條對(duì)抗DDOS建議,適合絕大多數(shù)擁有自己主機(jī)的用戶(hù),但假如采取以上措施后仍然不能解決DDOS問(wèn)題,就有些麻煩了,可能需要更多投資,增加服務(wù)器數(shù)量并采用DNS輪巡或負(fù)載均衡技術(shù),甚至需要購(gòu)買(mǎi)七層交換機(jī)設(shè)備,從而使得抗DDOS攻擊能力成倍提高,只要投資足夠深入,總有攻擊者會(huì)放棄的時(shí)候,那時(shí)候你就成功了!