您好,登錄后才能下訂單哦!
在分享這個(gè)事件前,筆者先和大家一起來(lái)了解一下CC***:
【 CC***】
?者借助代理服務(wù)器生成指向受害主機(jī)的合法請(qǐng)求,實(shí)現(xiàn)DDOS和偽裝就叫:CC(ChallengeCollapsar)。
CC主要是用來(lái)頁(yè)面的。CC的原理就是者控制某些主機(jī)不停地發(fā)大量數(shù)據(jù)包給對(duì)方服務(wù)器造成服務(wù)器資源耗盡,一直到宕機(jī)崩潰。CC主要是用來(lái)***頁(yè)面的,每個(gè)人都有這樣的體驗(yàn):當(dāng)一個(gè)網(wǎng)頁(yè)訪問(wèn)的人數(shù)特別多的時(shí)候,打開(kāi)網(wǎng)頁(yè)就慢了,CC就是模擬多個(gè)用戶(多少線程就是多少用戶)不停地進(jìn)行訪問(wèn)那些需要大量數(shù)據(jù)操作(就是需要大量CPU時(shí)間)的頁(yè)面,造成服務(wù)器資源的浪費(fèi),CPU長(zhǎng)時(shí)間處于100%,永遠(yuǎn)都有處理不完的連接直至就網(wǎng)絡(luò)擁塞,正常的訪問(wèn)被中止。
?CC是DDOS(分布式拒絕服務(wù))的一種,相比其它的DDOSCC似乎更有技術(shù)含量一些。這種***你見(jiàn)不到真實(shí)源IP,見(jiàn)不到特別大的異常流量,但造成服務(wù)器無(wú)法進(jìn)行正常連接。
引用百度百科https://baike.baidu.com/item/cc%E6%94%BB%E5%87%BB/10959545?fr=aladdin
?某天下午,正要到下班點(diǎn)的時(shí)候,筆者的手機(jī)突然振動(dòng)一下,打開(kāi)一看,是一條阿里云發(fā)的短信。點(diǎn)進(jìn)去一看,是公司某個(gè)項(xiàng)目中的服務(wù)器CPU報(bào)警的短信,報(bào)警內(nèi)容震驚了!!!!!!
?服務(wù)器CPU爆了,緊接著又來(lái)收到好幾條短信,短信內(nèi)容和上一條短信是一樣的,這個(gè)項(xiàng)目集群中所有的服務(wù)器CPU都爆了,這還得了。網(wǎng)站可用性的報(bào)警短信也來(lái)了,打開(kāi)網(wǎng)站和APP一看,打不開(kāi)了,一直在“菊花中”,此時(shí)筆者的心情是很酸爽的,不知道各位有沒(méi)有體會(huì)過(guò)。
往往很多問(wèn)題都是發(fā)生在一瞬間,讓你感覺(jué)很“驚喜”, 所以運(yùn)維人員的心理素質(zhì)是要很強(qiáng)大的,在任何時(shí)候都要能從容的面對(duì)一切刺激。
先登錄服務(wù)器,服務(wù)器CPU干滿的情況下,登錄服務(wù)器的操作也會(huì)受影響的,先top看一下吧:
在登錄集群中其它服務(wù)器看一下,也是一樣的:
這個(gè)項(xiàng)目以php程序?yàn)橹?,所以集群中的服?wù)器除了php-fpm進(jìn)程大量占用了CPU以外,沒(méi)看到其它進(jìn)程占用,注意看上面的running值,正在運(yùn)行的進(jìn)程數(shù)量一直居高不下,大量的進(jìn)程不釋放,莫非是調(diào)的PHP進(jìn)程參數(shù)有問(wèn)題,先來(lái)看下php的進(jìn)程配置:
公司所有的服務(wù)器都是標(biāo)準(zhǔn)配置(CPU是16核,內(nèi)存為32G)。平均一個(gè)php-fpm進(jìn)程占用2M的內(nèi)存左右,設(shè)置最大子進(jìn)程數(shù)量為800個(gè),啟動(dòng)進(jìn)程為100,這么計(jì)算的話,參數(shù)都在合理的范圍內(nèi),不應(yīng)該出問(wèn)題。
pm.max_children = 800 #php-fpm最大的子進(jìn)程數(shù)量
pm.start_servers = 100 #動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量
pm.min_spare_servers = 100 #動(dòng)態(tài)方式空閑狀態(tài)下的最小php-fpm進(jìn)程數(shù)量
pm.max_spare_servers = 200 #動(dòng)態(tài)方式空閑狀態(tài)下的最大php-fpm進(jìn)程數(shù)量
說(shuō)明:php-fpm進(jìn)程池開(kāi)啟進(jìn)程有兩種方式,一種是static,直接開(kāi)啟指定數(shù)量的php-fpm進(jìn)程,不再增加或者減少;
另一種則是dynamic,開(kāi)始時(shí)開(kāi)啟一定數(shù)量的php-fpm進(jìn)程,當(dāng)請(qǐng)求量變大時(shí),動(dòng)態(tài)的增加php-fpm進(jìn)程數(shù)到上限,當(dāng)空閑時(shí)自動(dòng)釋放空閑的進(jìn)程數(shù)到一個(gè)下限。這兩種不同的執(zhí)行方式,可以根據(jù)服務(wù)器的實(shí)際需求來(lái)進(jìn)行調(diào)整。
ps、
iostat、
free、
iftop、等方式查看進(jìn)程、io、內(nèi)存及帶寬等情況都沒(méi)有異常,也沒(méi)有收到其它的報(bào)警,ecs服務(wù)器、slb負(fù)載的流量均無(wú)異常,奇怪了?
先解決問(wèn)題,拿一臺(tái)服務(wù)器重啟一下nginx、php服務(wù)。不行,重啟過(guò)后還是一樣,CPU瞬間滿了。會(huì)不會(huì)php請(qǐng)求redis服務(wù)的時(shí)候找不到,一直卡在那里。
登錄redis查看一下,redis內(nèi)存、cpu、連接數(shù)等使用情況都很穩(wěn)定,服務(wù)器和redis的連通性測(cè)了也都Ok的:
這個(gè)時(shí)間點(diǎn)也沒(méi)有活動(dòng)啊,趕緊查看下日志吧。
查看一下nginx日志,error.log并沒(méi)有拋出異常日志,在來(lái)看看access.log:
發(fā)現(xiàn)可疑的請(qǐng)求了,tail -f access.log跟蹤了一段時(shí)間后,發(fā)現(xiàn)很多ip不停的請(qǐng)求這個(gè)url “https://公司域名/captcha/new.html?height=35&********************=9999” ,為什么會(huì)這么多IP會(huì)不停的請(qǐng)求這個(gè)url呢?查看并測(cè)試,發(fā)現(xiàn)這個(gè)url是登錄頁(yè)的驗(yàn)證碼,如下圖所示的驗(yàn)證碼,用戶登錄時(shí)需要驗(yàn)證碼才能登錄進(jìn)去:
筆者開(kāi)始猜測(cè),會(huì)不會(huì)驗(yàn)證碼被***了。先進(jìn)入waf查看一下這段時(shí)間的業(yè)務(wù)量訪問(wèn)情況:
從waf的數(shù)據(jù)可以看到,業(yè)務(wù)訪問(wèn)量突然抖增,我們又沒(méi)搞活動(dòng),也沒(méi)有搞秒殺,這個(gè)點(diǎn)正常訪問(wèn)量不會(huì)出現(xiàn)這樣的情況的。在來(lái)看下waf全量日志、waf總覽訪問(wèn)情況:
在來(lái)看看上面這張圖,筆者隨便截的一頁(yè)圖,每條GET都是來(lái)自于不同的IP,大概統(tǒng)計(jì)了一下,不少于上千個(gè)IP,此時(shí)有些朋友是不是想到了,把這些IP給限了。如果你去做IP限制,上千個(gè)IP去限制腦袋是不是要抓狂,況且你也不知道哪個(gè)IP是真實(shí)用戶的請(qǐng)求IP。
在來(lái)看看其它圖表:
從上圖可以看出,在waf的全量日志中,也同樣發(fā)現(xiàn)和nginx一樣的日志請(qǐng)求,被訪問(wèn)次數(shù)顯示中,這個(gè)url一被請(qǐng)求了快30萬(wàn)次了,試想一下,正常用戶誰(shuí)會(huì)沒(méi)事一直點(diǎn)擊你的驗(yàn)證碼。由此可以得出被cc***了。
即然被cc***了,肯定要處理,如果不用waf的話,單靠在服務(wù)器上處理會(huì)如何解決呢?利用nginx或iptables限制單ip訪問(wèn)次數(shù)、更改web端口、還是屏蔽ip等,大家可以一起討論一下,有好的建議和方法可以在留言一起學(xué)習(xí)進(jìn)步。
即然筆者這里用了waf,下面來(lái)看看waf和cc之間會(huì)怎么玩呢?
1、首先,進(jìn)入自定義cc配置,如下圖:
2、根據(jù)之前查找到被***的URI,新增一條自定義規(guī)則,如下圖所示:
其含義為:?jiǎn)蝹€(gè)IP訪問(wèn)目標(biāo)地址(前綴匹配,也就是匹配到/captcha這一前綴URI的時(shí)候)時(shí),一旦在5秒內(nèi)訪問(wèn)超過(guò)3次,就封禁該 IP20 分鐘。
說(shuō)明:
3、配置好了自定CC,我們來(lái)看下效果有沒(méi)有起作用呢?如下圖所示:
從上圖黃顏色的線條可以看出,自定義配置的CC***攔截起作用了,沒(méi)有攔截之前的時(shí)間段×××線條是不顯示的。
即然CC被攔住了,業(yè)務(wù)正常了嗎?回到服務(wù)器上查看,服務(wù)器的CPU確實(shí)已經(jīng)恢復(fù)正常了,看下業(yè)務(wù)正常了嗎?
打開(kāi)APP,網(wǎng)站,訪問(wèn)公司的業(yè)務(wù)果然已恢復(fù)正常了。
等待了一段時(shí)間后,還是有小部分用戶反饋打不開(kāi),這是什么原因呢,分析一下waf吧:
a,其實(shí)在waf上面自定義的CC規(guī)則配置是非常嚴(yán)格,在5秒鐘之內(nèi),單IP訪問(wèn)訪問(wèn)超過(guò)3次就封禁掉,這種嚴(yán)格的規(guī)則會(huì)誤殺掉很多真實(shí)的用戶請(qǐng)求,你需要根據(jù)公司的業(yè)務(wù)反饋,有沒(méi)有正常的用戶被攔截了,等CC***沒(méi)了,你在把策略規(guī)則調(diào)寬松一點(diǎn)(比如5秒、單IP40次/50次/60次等等去調(diào)整它),一句話,動(dòng)態(tài)調(diào)整waf,不要調(diào)死。
b,還有,有些公司出口就一個(gè)Ip地址,客戶端有n多個(gè),共用1個(gè)IP出去,像這種情況可能每秒請(qǐng)求的數(shù)量就會(huì)比較多,這也是正常用戶的請(qǐng)求,像上面這種嚴(yán)格的規(guī)則也可能會(huì)被攔截了。
c,waf防火墻,通過(guò)人機(jī)識(shí)別、大數(shù)據(jù)分析、模型分析等技術(shù)識(shí)別,對(duì)進(jìn)行攔截。但不同于與程序交互,安全是人與人的對(duì)抗,每個(gè)網(wǎng)站的性能瓶頸也不同,會(huì)在發(fā)現(xiàn)一種無(wú)效后,分析網(wǎng)站后進(jìn)行定向。此時(shí),需要根據(jù)業(yè)務(wù)情況來(lái)動(dòng)態(tài)調(diào)整的,達(dá)到更高的防護(hù)等級(jí)和防護(hù)效果。
d,特別是首頁(yè)內(nèi)容,很多時(shí)候是需要運(yùn)維人員和開(kāi)發(fā)一起去分析、判斷哪個(gè)接口或者URI容易受***(比如短信接口、驗(yàn)證碼接口等),提前在代碼層,和安全層面做好防護(hù),防范于未然。
?總體說(shuō)來(lái)CC的防護(hù)沒(méi)那么簡(jiǎn)單的,偽裝手段也是千萬(wàn)變化,CC屬于技術(shù)技巧強(qiáng)的。防御CC可以通過(guò)多種方法,禁止網(wǎng)站代理訪問(wèn),盡量將網(wǎng)站做成靜態(tài)頁(yè)面,限制連接數(shù)量,修改最大超時(shí)時(shí)間等。除了利用上述方法外,還可以通過(guò)第三方的防火墻進(jìn)行防范,也可以省不少心。
本章內(nèi)容到此結(jié)束,喜歡我的文章,請(qǐng)點(diǎn)擊最上方右角處的《關(guān)注》?。?!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。