上段時間國內(nèi)部分站點遭到了較大規(guī)模的拒絕服務(wù)(D.O.S)攻擊(包括類似前期yahoo等大型國際網(wǎng)站所遭受的的Ddos攻擊 --分布式拒絕服務(wù)攻擊)。波及的網(wǎng)站包括知名的新聞網(wǎng)站、商業(yè)網(wǎng)站、證券網(wǎng)站,甚至是部分網(wǎng)絡(luò)安全站點等。造成的癥狀為:站點無法訪問,響應(yīng)速度極慢,影響到周圍相關(guān)網(wǎng)段的其他主機等,至今還 有很多站點未恢復(fù)正常,無法正常訪問。
作為國內(nèi)第一個網(wǎng)絡(luò)安全站點,我們的主www.isbase.com也同樣受到了極其猛烈的拒絕服務(wù)攻擊。公司技術(shù)人員立即做出響應(yīng):針對攻擊的方式及可能采用的攻擊手段,提出了切實可行的完整解決方 案,把攻擊的危害降到了最低?,F(xiàn)在網(wǎng)站一切正常,雖然攻擊仍舊在繼續(xù),但對服務(wù)器的影響已經(jīng)降到了最小,不會影響服務(wù)器的正常運作。同時,我們積極聯(lián)系了其他受攻擊的同行站點,表明攻擊來自同 一類手法,可能來自某人(團(tuán)體)蓄意所為。另外,對我們近期為其他站點所做的緊急響應(yīng)情況來看,此次攻擊的規(guī)模之廣,強度之大令人發(fā)指。在采取了我公司應(yīng)的解決方案后,接受緊急響應(yīng)的網(wǎng)站都已 恢復(fù)正常。
我們根據(jù)自己站點所受攻擊的來對此次大規(guī)模拒絕服務(wù)攻擊做初步分析報告:
從被攻擊的癥狀來看,這次的攻擊大致有以下幾種:分布式拒絕服務(wù)攻擊、Syn-Flood攻擊,icmp炸彈(ping of death)等幾種。這個估計是根據(jù)審查我們站點被攻擊后留下的紀(jì)錄,分析這些記錄后得出的初步結(jié)論。
要防范拒絕服務(wù)攻擊,首先要從強化自身做起。
針對目前D.O.S攻擊的實施手段,我們預(yù)先采取了以下的一些措施:
1.為防止Syn-Flood攻擊(Syn-Flood攻擊的具體原理參見本站的技術(shù)文章),我們對默認(rèn)安裝的系統(tǒng)進(jìn)行了強化,主要是通過重新編譯內(nèi)核,以及設(shè)定相應(yīng)的內(nèi)核參數(shù)使得系統(tǒng)強制對超時的Syn請求連 接數(shù)據(jù)包復(fù)位,同時通過縮短超時常數(shù)和加長等候隊列使得系統(tǒng)能迅速處理無效的Syn請求數(shù)據(jù)包。如果不強制對這些無效的數(shù)據(jù)包進(jìn)行清除復(fù)位,將大大加重系統(tǒng)的負(fù)載,最終將導(dǎo)致系統(tǒng)失去響應(yīng)。
2.為防止icmp炸彈的攻擊,在系統(tǒng)內(nèi)核中對icmp數(shù)據(jù)包的流量進(jìn)行限定允許。并在系統(tǒng)參數(shù)中對此限定值調(diào)整。以防止系統(tǒng)由此而造成的失去響應(yīng)。
3.在系統(tǒng)中加裝防火墻系統(tǒng),利用防火墻系統(tǒng)對所有出入的數(shù)據(jù)包進(jìn)行過濾。
4.仔細(xì)調(diào)整服務(wù)器的各項參數(shù)。根據(jù)我們站點訪問量大的特點,對Web服務(wù)器和Mail服務(wù)器進(jìn)行適度的預(yù)加重處理,即通過預(yù)先使服務(wù)器達(dá)到一定的負(fù)載,以使得整個系統(tǒng)的負(fù)載變化在訪問量變化時不 會出現(xiàn)很大的變化,如果出現(xiàn)了很大的變化,很有可能使得服務(wù)器崩潰。這和在建筑中廣泛采用的預(yù)應(yīng)力技術(shù)的原理是一致的。
在完成了對服務(wù)器的強化后,還必須使用一些有效的方法和規(guī)則來檢測和發(fā)現(xiàn)拒絕服務(wù)攻擊,并能在檢測到拒絕服務(wù)攻擊后采取相應(yīng)的對策。
檢測的手段很多,可以通過察看路由器紀(jì)錄和系統(tǒng)紀(jì)錄以及站點目前狀態(tài)來實現(xiàn)。 通常,我們在設(shè)計防火墻的時候預(yù)先對某些特殊類型的IP數(shù)據(jù)包進(jìn)行過濾(不需要紀(jì)錄)。這些特殊的IP是不能在Internet網(wǎng)上出現(xiàn)的(無法路由)。而要進(jìn)行拒絕服務(wù)攻擊往往最需要這類有來無回的 數(shù)據(jù)包,來隱蔽攻擊者的真實地址和身份。而一旦這類地址的出現(xiàn),往往就標(biāo)志著某種拒絕服務(wù)攻擊的開始。 這一大類的地址是127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16這四個網(wǎng)段的地址。就我們的防火墻的規(guī)則而言,對這三個地址段是完全拒絕任何數(shù)據(jù)包的: deny all。然后通過檢測對這些規(guī)則的計數(shù),來判決是否存在某些攻擊行為。如當(dāng)我們發(fā)現(xiàn)在我們的計數(shù)器中發(fā)現(xiàn)如下的情況:
0 0 deny ip from any to 127.0.0.0/8
4552 553302 deny ip from 10.0.0.0/8 to any
0 0 deny ip from any to 10.0.0.0/8
0 0 deny ip from 172.16.0.0/12 to any
0 0 deny ip from any to 172.16.0.0/12
97601 11024404 deny ip from 192.168.0.0/16 to any
0 0 deny ip from any to 192.168.0.0/16
這時,我們就可以推斷是有人在拒絕服務(wù)攻擊,當(dāng)我們利用"netstat –an grep SYN_RCVD"來檢測當(dāng)時的網(wǎng)絡(luò)連接數(shù)目時,我們會發(fā)現(xiàn)有大量的SYN_RCVD類型的連接:
tcp4 0 0 202.109.114.50.80 203.93.217.52.2317 SYN_RCVD tcp4 0 0 202.109.114.50.80 61.136.54.73.1854 SYN_RCVD
這就說明了此時服務(wù)器正在遭受Syn-Flood攻擊。紀(jì)錄這類攻擊的IP地址是毫無意義的(因為這些IP地址都是在程序中通過改變數(shù)據(jù)包頭而偽造的)。
而對于分布式拒絕服務(wù)攻擊,由于采用了大流量攻擊手法,會造成該網(wǎng)段路由器的阻塞,從而使得該網(wǎng)段內(nèi)幾乎所有的服務(wù)器可用的帶寬都變的極小,對外造成不能訪問的現(xiàn)象。而此時,該網(wǎng)段主干路 由器亦承受極大的負(fù)載。對于Linux系統(tǒng)來說可以考慮重新編譯內(nèi)核,將network中enable tcp_syncookie然后在使用新內(nèi)核啟動,并且在/etc/rc.d/rc.local中添加并在命令行運行echo 1 >/proc/sys/net/ipv4/tcp_syncookies來防止synflood攻擊。
而對于ICMP包炸彈這里攻擊,則可以通過在防火墻上設(shè)置紀(jì)錄來實現(xiàn)檢測。一旦發(fā)現(xiàn)在一定的時間內(nèi)有量的ICMP包涌入,而內(nèi)核由于ICMP包的流量過載而出現(xiàn)警告,則說明存在此類的攻擊行為。這時, 可以從系統(tǒng)所紀(jì)錄的日志上看到,類似于如下的紀(jì)錄:
Deny ICMP 202.96.113.53 202.109.114.50 in
Deny ICMP 202.96.113.53 202.109.114.50 in
Deny ICMP 202.96.113.53 202.109.114.50 in
Deny ICMP 202.96.113.53 202.109.114.50 in
Deny ICMP 202.96.113.53 202.109.114.50 in
在檢測到攻擊行為后,就應(yīng)該采取一些措施使得攻擊的影響減至最小。
對于分布式攻擊,目前還沒有非常有效方法來防御,我們所能做的是讓ISP對主干路由器進(jìn)行限流措施來降低攻擊所造成的影響。
對于SYN-FLOOD攻擊,一方面要在服務(wù)器端打Syn-flood的補丁,另一方面需要在該網(wǎng)段的路由器上做些配置的調(diào)整。這些調(diào)整包括限制Syn半開數(shù)據(jù)包的流量和個數(shù),在路由器的前端做必要的TCP攔截( 目前限于Cisco系列IOS12.0),并在路由器上設(shè)定相當(dāng)嚴(yán)格的定時常數(shù),利用路由器的TCP攔截技術(shù)使得只有完成TCP三次握手過程的數(shù)據(jù)包進(jìn)入該網(wǎng)段,這樣可以有效地保護(hù)本網(wǎng)段內(nèi)的服務(wù)器不受此類攻擊 。同時,在路由器的訪問列表里拒絕10.0.0.0/8,172.16.0.0/12,192.168.0.0/16這三個虛擬網(wǎng)段的訪問。對于linux可以考慮使用防火墻規(guī)則來限制來自這些數(shù)據(jù)報的命令:
ipchains -I input -i lo -s 127.0.0.02 -j ACCEPT
ipchains -I input -s 127.0.0.02 -j DENY
ipchains -I input -s 192.168.0.0/16 -j DENY
ipchains -I input -s 172.16.0.0/12 -j DENY
ipchains -I input -s 10.0.0.0/8 -j DENY
對于ICMP攻擊可以采取的方法一:在服務(wù)器端拒絕所有的ICMP包;(對于Linux系統(tǒng)運行echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all,并將該命令添加到/etc/rc.d/rc.local最后)
要徹底杜絕拒絕服務(wù)攻擊,只有追根溯源去找到正在進(jìn)行攻擊的機器和攻擊者。 要追蹤攻擊者不是一件很容易的事情,一旦其停止了攻擊行為,很難將其發(fā)現(xiàn)。唯一可行的方法就是在其進(jìn)行攻擊的時候,根據(jù)路由器的信息和攻擊數(shù)據(jù)包的特征,采用一級一級回溯的方法來查找其攻擊源 頭。這時需要各級部門的協(xié)同配合才能很好的完成。