嘉興網(wǎng)站設(shè)計(jì):網(wǎng)站建設(shè)知識(shí)之網(wǎng)站如何高效防御來(lái)自外部的DDOS攻擊。
在前幾天,我們公司旗下子公司運(yùn)營(yíng)的某門(mén)戶網(wǎng)站遭受了一次ddos攻擊,我們的那個(gè)網(wǎng)站是一個(gè)公益性質(zhì)的站點(diǎn),為各個(gè)廠商之間搭建一個(gè)平臺(tái)以傳遞安全問(wèn)題等信息,我們并不清楚因?yàn)槭裁磿?huì)遭遇這種無(wú)恥黑客的攻擊。因?yàn)槲覀儽旧聿⒉粡氖逻@種類型的攻擊,這種攻擊技術(shù)一般也是比較粗糙的,所以討論得比較少,但是既然發(fā)生了這樣的攻擊我們覺(jué)得分享攻擊發(fā)生后我們?cè)谶@個(gè)過(guò)程中學(xué)到的東西,以及針對(duì)這種攻擊我們的想法及經(jīng)過(guò)這次攻擊產(chǎn)生真正的價(jià)值,而并不是這樣的攻擊僅僅浪費(fèi)大家的時(shí)間而已。下面進(jìn)入正題。。。
我們發(fā)現(xiàn)大型的企業(yè)都有遭受攻擊的案例,但是大家遭受攻擊之后的應(yīng)對(duì)措施及學(xué)到的經(jīng)驗(yàn)卻分享都比較少,這導(dǎo)致各家都是自行的摸索經(jīng)驗(yàn),依然停留在一家企業(yè)對(duì)抗整個(gè)互聯(lián)網(wǎng)的攻擊的局面,而對(duì)于攻擊者卻是此次攻擊針對(duì)你,下次攻擊卻是針對(duì)他了,而且攻擊之后無(wú)論是技術(shù)還是資源都沒(méi)有任何的損耗,這也是導(dǎo)致這種攻擊頻繁并且肆無(wú)忌憚的原因。
對(duì)此南昌莫非傳媒小編認(rèn)為我們應(yīng)該來(lái)嘗試做一些改變:
常見(jiàn)ddos攻擊及防御
ddos的全稱是分布式拒絕服務(wù)攻擊,既然是拒絕服務(wù)一定是因?yàn)槟承┰蚨V狗?wù)的,其中最重要的也是最常用的原因就是利用服務(wù)端方面資源的有限性,這種服務(wù)端的資源范圍很廣,可以簡(jiǎn)單的梳理一個(gè)請(qǐng)求正常完成的過(guò)程:
1、用戶在客戶端瀏覽器輸入請(qǐng)求的地址。
2、瀏覽器解析該請(qǐng)求,包括分析其中的dns以明確需要到達(dá)的遠(yuǎn)程服務(wù)器地址。
3、明確地址后瀏覽器和服務(wù)器的服務(wù)嘗試建立連接,嘗試建立連接的數(shù)據(jù)包通過(guò)本地網(wǎng)絡(luò),中間路由最終艱苦到達(dá)目標(biāo)網(wǎng)絡(luò)再到達(dá)目標(biāo)服務(wù)器。
4、網(wǎng)絡(luò)連接建立完成之后瀏覽器根據(jù)請(qǐng)求建立不同的數(shù)據(jù)包并且將數(shù)據(jù)包發(fā)送到服務(wù)器某個(gè)端口。
5、端口映射到進(jìn)程,進(jìn)程接受到數(shù)據(jù)包之后進(jìn)行內(nèi)部的解析。
6、請(qǐng)求服務(wù)器內(nèi)部的各種不同的資源,包括后端的API以及一些數(shù)據(jù)庫(kù)或者文件等。
7、在邏輯處理完成之后數(shù)據(jù)包按照之前建立的通道返回到用戶瀏覽器,瀏覽器完成解析,請(qǐng)求完成。
上面各個(gè)點(diǎn)都可以被用來(lái)進(jìn)行ddos攻擊,包括:
1、某些客戶端劫持病毒,還記得訪問(wèn)百度跳搜狗的事情么?
2、某個(gè)大型互聯(lián)網(wǎng)公司發(fā)生的dns劫持事件,或者直接大量的dns請(qǐng)求直接攻擊dns服務(wù)器,這里可以使用一些專業(yè)的第三方dns服務(wù)來(lái)緩解這個(gè)問(wèn)題,如Dnspod。
3、利用建立網(wǎng)絡(luò)連接需要的網(wǎng)絡(luò)資源攻擊服務(wù)器帶寬使得正常數(shù)據(jù)包無(wú)法到達(dá)如udp的洪水攻擊,消耗前端設(shè)備的cpu資源以使得數(shù)據(jù)包不能有效轉(zhuǎn)發(fā)如icmp和一些碎片包的洪水攻擊,消耗服務(wù)器方建立正常連接需要的資源如syn flood或者就是占用大量的連接使得正常的連接無(wú)法發(fā)起,譬如這次的TCP flood。
4、利用webserver的一些特點(diǎn)進(jìn)行攻擊,相比nginx來(lái)說(shuō),apache處理一個(gè)請(qǐng)求的過(guò)程就比較笨重。
5、利用應(yīng)用程序內(nèi)部的一些特性攻擊程序內(nèi)部的資源如mysql,后端消耗資源大的接口等等,這也就是傳統(tǒng)意義上的CC攻擊。
這里涉及到攻防的概念,但是實(shí)際上如果了解對(duì)方的攻擊點(diǎn)和攻擊手法,防御會(huì)變成簡(jiǎn)單的一個(gè)拼資源的過(guò)程,應(yīng)該從最合適的地方入手把問(wèn)題解決掉,譬如在路由器等設(shè)備上解決應(yīng)用層攻擊就不是一個(gè)好的辦法,同理,在應(yīng)用層嘗試解決網(wǎng)絡(luò)層的問(wèn)題也是不可能的,簡(jiǎn)單來(lái)說(shuō),目標(biāo)是只讓正常的數(shù)據(jù)和請(qǐng)求進(jìn)入到我們的服務(wù),一個(gè)完善的防御體系應(yīng)該考慮如下幾個(gè)層面:
1、作為用戶請(qǐng)求的入口,必須有良好的dns防御
2、與你的價(jià)值相匹配的帶寬資源,并且在核心節(jié)點(diǎn)上布置好應(yīng)用層的防御策略,只允許你的正常應(yīng)用的網(wǎng)絡(luò)數(shù)據(jù)包能夠進(jìn)入,譬如封殺除了80以外的所有數(shù)據(jù)包
3、有支持你的服務(wù)價(jià)值的機(jī)器集群來(lái)抵抗應(yīng)用層的壓力,有必要的話需要將一個(gè)http請(qǐng)求繼續(xù)分解,將連接建立的過(guò)程壓力分解到其他的集群里,這里似乎已經(jīng)有一般的硬件防火墻能做這個(gè)事情,甚至將正常的http請(qǐng)求解析過(guò)程都進(jìn)行分解,保證到達(dá)后端的是正常的請(qǐng)求,剔除掉畸形的請(qǐng)求,將正常的請(qǐng)求的請(qǐng)求頻度等行為進(jìn)行記錄和監(jiān)控,一旦發(fā)生異常就在這里進(jìn)行應(yīng)用層的封殺。
在攻擊發(fā)生后,**個(gè)現(xiàn)象是我們的網(wǎng)站上不去了,但是依然可以訪問(wèn)到管理界面,我們登陸上去簡(jiǎn)單執(zhí)行了命令:
netstat -antp
我們看到有大量的鏈接存在著,并且都是ESTABLISHED狀態(tài),正常狀態(tài)下我們的網(wǎng)站訪問(wèn)量沒(méi)有這么高,對(duì)于這樣的情況其實(shí)處理就比較簡(jiǎn)單,這是一次四層的攻擊,也就是所有ip都是真實(shí)的,由于目前為止只是消耗了webserver的網(wǎng)絡(luò)連接資源,所以我們只需要簡(jiǎn)單的將這些ip在網(wǎng)絡(luò)層封禁就可以,很簡(jiǎn)單,用下面的命令即可:
for i in `netstat -an | grep -i ‘:80 ‘|grep ‘EST’ | awk ‘{print $5}’ | cut -d : -f 1 | sort | uniq -c | awk ‘{if($1 > 50) {print $2}}’`
echo $i
echo $i >> /tmp/banip
/sbin/iptables -A INPUT -p tcp -j DROP -s $i
done
然后作為計(jì)劃任務(wù)一分鐘執(zhí)行一次即可,很快,iptables的封禁列表就充斥了大量的封禁ip,我們簡(jiǎn)單的統(tǒng)計(jì)了下連接數(shù)**的一些ip發(fā)現(xiàn)都來(lái)自韓國(guó)。為了保證系統(tǒng)的性能,我們調(diào)大了系統(tǒng)的可接受的連接數(shù)以及對(duì)Nginx進(jìn)行了每個(gè)連接能夠進(jìn)行的請(qǐng)求速率,系統(tǒng)于是恢復(fù)了正常的運(yùn)行。
正常狀態(tài)一直持續(xù)到第二天,但是到中午之后我們發(fā)現(xiàn)訪問(wèn)又出現(xiàn)了問(wèn)題,網(wǎng)絡(luò)很慢,使用ping發(fā)現(xiàn)大概出現(xiàn)了70%左右的丟包,在艱難的登陸到系統(tǒng)上之后,發(fā)現(xiàn)系統(tǒng)已經(jīng)很少有TCP的正常連接,為了查明原因,我們對(duì)系統(tǒng)進(jìn)行了抓包:
tcpdump -w tmp.pcap port not 22
tcpdump -r tmp.pcap -nnA
我們發(fā)現(xiàn)攻擊已經(jīng)從應(yīng)用層的攻擊調(diào)整到了網(wǎng)絡(luò)層的攻擊,大量的目標(biāo)端口是80的udp和icmp包以極快的速度充滿了網(wǎng)絡(luò),一個(gè)包大小大概在1k左右,這次占據(jù)的資源純粹是帶寬資源了,即使在系統(tǒng)上做限制也解決不了這個(gè)問(wèn)題,不過(guò)也沒(méi)有關(guān)系,對(duì)于網(wǎng)絡(luò)層的問(wèn)題我們可以在網(wǎng)絡(luò)層上做限制,我們只需要在網(wǎng)絡(luò)上把到達(dá)我們ip的非TCP的所有包如UDP和ICMP等協(xié)議都禁止掉即可,但是我們沒(méi)有自己的服務(wù)器也缺乏對(duì)網(wǎng)絡(luò)設(shè)備的控制權(quán),目前是由工信部CERT提供支持的,由于臨時(shí)無(wú)法協(xié)調(diào)進(jìn)行相應(yīng)的操作,后果如大家看到,我們的服務(wù)很慢,基本上停止了服務(wù),在一段時(shí)間之后攻擊者停止了攻擊,服務(wù)才進(jìn)行了恢復(fù),很憋屈是么?但是同時(shí)我們得到了很多熱心朋友的幫助,得到了更好的網(wǎng)絡(luò)和服務(wù)器資源,在網(wǎng)絡(luò)資源方面的能力得到了很大的提升,緩解了這方面的問(wèn)題,這里對(duì)他們表示感謝。
根源及反擊
我困惑的是一點(diǎn),攻擊我們并不能得到實(shí)際的好處為什么還是有人來(lái)攻擊,而且聽(tīng)說(shuō)其他公司都有被攻擊的情況,我覺(jué)得有一點(diǎn)原因就是攻擊我們的確得不到什么好處,但是實(shí)際上攻擊者也并不損失什么,無(wú)論是資源上還是法律風(fēng)險(xiǎn)上,他不會(huì)因?yàn)橐淮喂舳鴵p失太多,而相比之下,服務(wù)提供者損失的東西卻太多了,這從經(jīng)濟(jì)學(xué)角度來(lái)講就是不平衡的,我們處于弱勢(shì)。
一般而言,的確對(duì)于作惡者是沒(méi)有什么懲罰措施,但是這次,我們覺(jué)得我們是可以做一些事情的,我們嘗試挖掘背后的攻擊者,甚至清除這個(gè)僵尸網(wǎng)絡(luò)。
首先這次攻擊起源于應(yīng)用層的攻擊,所以所有的ip都是真實(shí)的,經(jīng)過(guò)與CERT溝通,也發(fā)現(xiàn)這些ip都是韓國(guó)的,并且控制端不在國(guó)內(nèi),因?yàn)槠陂g沒(méi)有與國(guó)內(nèi)有過(guò)通訊,即使在后面換成了udp+icmp的flood,但是依然是那些韓國(guó)的ip,這很有意思,正常情況下udp+icmp的數(shù)據(jù)包是可以偽造的,但是這里居然沒(méi)有偽造,這在后面大概被我們證實(shí)了原因。
這些ip是真實(shí)存在的ip,而且這些ip肯定在攻擊完我們之后一定依然跟攻擊者保持著聯(lián)系,而一般的聯(lián)系方式因?yàn)樾枰刂频姆奖愣际莇ns域名,既然如此,如果我們能挖掘到這個(gè)dns域名我們就可能間接的挖掘出真正幕后黑手在哪里。首先,我們迅速的找出了這次攻擊ip中開(kāi)放了80端口的機(jī)器,因?yàn)槲覀儗?duì)80端口上的安全問(wèn)題比較自信,應(yīng)該很快可以獲知這些ip背后的細(xì)節(jié)(80sec名稱由來(lái)),我們發(fā)現(xiàn)大部分是一些路由器和一些web的vpn設(shè)備,我們猜測(cè)這次攻擊的主要是韓國(guó)的個(gè)人用戶,而個(gè)人用戶的機(jī)器操作系統(tǒng)一般是windows所以在較高版本上發(fā)送數(shù)據(jù)包方面可能有著比較大的限制,這也解釋了為什么即使是udp+icmp的攻擊我們看到的大都是真實(shí)ip。發(fā)現(xiàn)這些路由設(shè)備之后我們嘗試深入得更多,很快用一些弱口令譬如admin/admin登陸進(jìn)去,果然全世界的網(wǎng)民都一樣,admin/admin是天生的入口。
登陸進(jìn)去一些路由之后我們發(fā)現(xiàn)這些路由器里面存在一個(gè)功能是設(shè)置自己的dns,這意味著這下面的所有dns請(qǐng)求都可以被定向到我們自己設(shè)置的dns服務(wù)器,這對(duì)于我們?nèi)チ私鈨?nèi)部網(wǎng)絡(luò)的細(xì)節(jié)會(huì)很有用,于是我們建立了一個(gè)自己的dns服務(wù)器,并且開(kāi)啟了dns請(qǐng)求的日志功能以記錄所有請(qǐng)求的細(xì)節(jié)。我們大約控制了20臺(tái)路由器的dns指向,并且都成功重定向到我們自己的服務(wù)器。
剩下的就是簡(jiǎn)單的數(shù)據(jù)分析,在這值錢(qián)我們可以對(duì)僵尸網(wǎng)絡(luò)的控制域名做如下的猜測(cè):
1、這個(gè)dns應(yīng)該為了靈活的控制域名的緩存時(shí)間TTL一般不會(huì)特別長(zhǎng)
2、這個(gè)dns應(yīng)該是定期的被請(qǐng)求,所以會(huì)在dns請(qǐng)求里有較大的出現(xiàn)比例
3、這個(gè)dns應(yīng)該是為了控制而存在的,所以域名不應(yīng)該在搜索引擎以及其他地方獲得較高的訪問(wèn)指數(shù),這與2中的規(guī)則配合起來(lái)會(huì)比較好確定,是一個(gè)天生的矛盾。
4、這個(gè)dns應(yīng)該在各個(gè)路由下面都會(huì)被請(qǐng)求
每個(gè)公司都有自己對(duì)自己價(jià)值的評(píng)估從而決定安全投入上的大小,每一次攻擊也會(huì)涉及到利益的存在,正如防御因?yàn)榉N種原因譬如投入上的不足和實(shí)施過(guò)程中的不**,有著天生的弱點(diǎn)一樣,攻擊也是有著天生的弱點(diǎn)的,因?yàn)槊恳淮喂羯婕暗讲煌沫h(huán)節(jié),每個(gè)環(huán)節(jié)都可能由不同水平的人完成,他所擁有的資源,他使用的工具和技術(shù)都不會(huì)是**的,所以才有可能進(jìn)行防御,另外,我相信進(jìn)行DDOS攻擊的人是一個(gè)固定的行業(yè),會(huì)有一些固定的人群,對(duì)于其中使用的技術(shù),工具,資源和利益鏈都是比較固定的,與之相對(duì)的是各個(gè)企業(yè)卻缺乏相應(yīng)的溝通,以個(gè)人企業(yè)對(duì)抗一個(gè)產(chǎn)業(yè)自然是比較困難,而如果每一個(gè)企業(yè)都能將自己遭受攻擊時(shí)的經(jīng)驗(yàn)分享出來(lái),包括僵尸網(wǎng)絡(luò)的大小及IP分布,攻擊工具的特征,甚至有能力的可以去分析背后的利益點(diǎn)及操作者,那么每一次攻擊都能讓大家的整體防御能力上升,讓攻擊者的攻擊能力有損失,我們很愿意來(lái)做這個(gè)事情。
南昌莫非網(wǎng)絡(luò)科技公司總結(jié):正如一個(gè)朋友所講的,所有的防御是不**的正如攻擊是不**的一樣,好的防御者在提升自己的防御能力趨于**的同時(shí)也要善于尋找攻擊者的不**,尋找一次攻擊中的漏洞,不要對(duì)攻擊心生恐懼,對(duì)于Ddos攻擊而言,發(fā)起一次攻擊一樣是存在漏洞的,如果我們都能夠擅長(zhǎng)利用其中的漏洞并且抓住后面的攻擊者那么相信以后的ddos攻擊案例將會(huì)減少很多,在針對(duì)目標(biāo)發(fā)起攻擊之前攻擊者也會(huì)做更多的權(quán)衡,損失,利益和法律。