CGI拒絕服務(wù)攻擊技術(shù)淺析 |
發(fā)布時(shí)間: 2012/9/12 15:04:29 |
拒絕服務(wù)攻擊即DoS是使對(duì)方服務(wù)器承受過多的信息請(qǐng)求而無法處理,產(chǎn)生阻塞導(dǎo)致正常用戶的請(qǐng)求被拒絕。從程序員的視角出發(fā),就目前我們所處的網(wǎng)絡(luò)環(huán)境而言,要想用大量的報(bào)文使一個(gè)大網(wǎng)站因?yàn)镮/O阻塞而停止服務(wù)是非常困難的,但是如果能找到對(duì)方服務(wù)器上一些可能會(huì)占用較多資源的程序并有遠(yuǎn)程調(diào)用權(quán)限,那么通過批量調(diào)用使對(duì)方響應(yīng)阻塞就并不困難。這種程序,從程序員的視角出發(fā),就是對(duì)方網(wǎng)站可能存在的不良CGI程式。 下面是我的服務(wù)器上存在的一個(gè)真實(shí)例子: search.cgi就是一個(gè)不良cgi程序(全文本內(nèi)文檢索),是那臺(tái)服務(wù)器上其他網(wǎng)站站長搞來的第三方程序。 可以看到,僅僅存在三個(gè)并行調(diào)用,系統(tǒng)CPU資源就被占滿,正常的http請(qǐng)求產(chǎn)生阻塞!當(dāng)然,正常情況下這個(gè)現(xiàn)象比較少見,但是如果對(duì)方有惡意,找到了這種cgi程序,然后在路由接近的網(wǎng)段上作一個(gè)socket連接的守護(hù)程序,多進(jìn)程不間斷地循環(huán)發(fā)送偽請(qǐng)求,請(qǐng)求主機(jī)響應(yīng)該cgi程序,并攜帶一個(gè)范圍很寬的檢索邊界條件(檢索條件越寬,處理響應(yīng)消耗負(fù)載越大),這樣就會(huì)用很少的請(qǐng)求數(shù)使對(duì)方主機(jī)產(chǎn)生很大的負(fù)載,從而使對(duì)方拒絕正常請(qǐng)求。 此類攻擊所需要的攻擊源很少,很可能只要一個(gè)能夠高速直連的主攻擊源就能使對(duì)方服務(wù)器崩潰。對(duì)于用戶可以自己建立cgi程式的虛擬主機(jī)服務(wù)商而言,這種隱患防不勝防,所以這也是網(wǎng)絡(luò)安全中需要考慮的一個(gè)問題,如果寬帶網(wǎng)順利啟動(dòng),那么這種攻擊手段就可以大行其道,兩三臺(tái)家用電腦就可能把一個(gè)寬帶環(huán)境內(nèi)的主機(jī)搞癱瘓。 所以用程序員的視角,從cgi程序的合理程度來分析,核心思想其實(shí)就是很小的請(qǐng)求使對(duì)方主機(jī)消耗很大的資源來響應(yīng),那樣帶寬和I/O就不是重要的影響因素了。 最近導(dǎo)致美國知名網(wǎng)站故障的原因?qū)嶋H上來自于一種最簡單的攻擊手段,就是虛假報(bào)文的超量投遞。關(guān)鍵程序非常簡單,自己做也就是一個(gè)小時(shí)的工作量,無非是創(chuàng)建多個(gè)socket連接進(jìn)程,然后循環(huán)地把一些惡意請(qǐng)求的報(bào)文利用socket連接,通過80端口塞到對(duì)方的主機(jī)上,利用無限循環(huán)手段,使對(duì)方主機(jī)超負(fù)載而拒絕正常訪問,這也是拒絕服務(wù)攻擊法的關(guān)鍵所在。 這種報(bào)文超量報(bào)文投遞的拒絕服務(wù)攻擊法雖然說起來簡單,但是實(shí)現(xiàn)起來需要幾點(diǎn)注意事項(xiàng): 第一是找到合適的突破口,也就是對(duì)方主機(jī)上的不良CGI程式。 一般的知名網(wǎng)站都有很強(qiáng)的主機(jī),甚至多主機(jī)并行負(fù)載分布。如果僅僅是簡簡單單地發(fā)送報(bào)文很難令對(duì)方崩潰,所以需要作的就是找到對(duì)方主機(jī)上一些消耗系統(tǒng)資源較大的CGI程序。如果自己做過大規(guī)模負(fù)載的交互式網(wǎng)站,很容易找到其中的關(guān)鍵,通常一些復(fù)雜的搜索程序,特別是內(nèi)文檢索程序是消耗系統(tǒng)資源較多的,這些程序就可以成為突破口。也就是使用虛擬報(bào)文,用一個(gè)最寬的條件來模擬請(qǐng)求檢索,這樣你只需要傳遞很少的數(shù)據(jù),對(duì)方的服務(wù)器就會(huì)產(chǎn)生相當(dāng)大的負(fù)荷,采用多進(jìn)程并且循環(huán)調(diào)用,只要對(duì)方主機(jī)cgi程序處理報(bào)文的時(shí)間大于其接受到你循環(huán)發(fā)送報(bào)文的間隔時(shí)間,就很容易使對(duì)方的http請(qǐng)求阻塞并拒絕正常訪問。 第二是節(jié)省一切可以節(jié)省的步驟。 這種攻擊方式的關(guān)鍵是使對(duì)方造成阻塞,而阻塞的關(guān)鍵是本機(jī)攻擊循環(huán)的間隔小于對(duì)方處理的時(shí)間。減小循環(huán)間隔的重要一點(diǎn)是,僅僅發(fā)送攻擊必須發(fā)送的報(bào)文,然后不接受任何返回信息。也就是當(dāng)攻擊程序把一個(gè)虛擬的請(qǐng)求報(bào)文發(fā)送后,不再理會(huì)該請(qǐng)求而進(jìn)行下一個(gè)。不用停止這個(gè)socket連接,但是無須接受任何返回信息,那樣會(huì)耽誤攻擊程序的循環(huán)效率。這里的關(guān)鍵問題是對(duì)方的cgi程序還在處理攻擊程序發(fā)送的請(qǐng)求,所以尋找不良CGI是獲得最好效果的最關(guān)鍵因素。 第三是尋找理想的攻擊源。 這一點(diǎn)最難作到,如果用家用電腦和撥號(hào)實(shí)現(xiàn)攻擊,并不是不可以,除非同一時(shí)間找到100個(gè)志同道合者一起攻擊,否則由于網(wǎng)速,你的攻擊可能對(duì)對(duì)方毫無影響。這就需要“攻擊源”,也就是找到可以運(yùn)行攻擊程序的、路由和攻擊目標(biāo)接近的服務(wù)器作為攻擊源,最好找到多個(gè)攻擊源服務(wù)器,然后同時(shí)運(yùn)行攻擊程序,才有可能看到效果。特別是針對(duì)大型商業(yè)網(wǎng)站,沒有一定數(shù)量的攻擊源是不可能用這種方式攻擊成功的。例如如果希望攻擊yahoo,這種方式就需要在美國寬帶網(wǎng)環(huán)境下找到1000臺(tái)左右的攻擊源服務(wù)器,同時(shí)運(yùn)行攻擊程序,模擬循環(huán)進(jìn)行一些最常用關(guān)鍵字的超量檢索,導(dǎo)致對(duì)方服務(wù)器處理阻塞。 需要提醒的一點(diǎn)是,攻擊源可能在攻擊過程中自身收到損害,我在宿舍局域網(wǎng)測試的時(shí)候,自己的攻擊源崩潰過若干次,提醒諸位小心。 根據(jù)新聞,美國最近的網(wǎng)站被黑大體上是這種攻擊手段的一種體現(xiàn),但是難得的是對(duì)方能夠用很多攻擊源來進(jìn)行。另外當(dāng)寬帶網(wǎng)大幅推廣和使用的時(shí)候,這種攻擊手段將更容易實(shí)現(xiàn),可能幾個(gè)會(huì)寫VC的家伙就可以在家里利用光纖將寬帶網(wǎng)內(nèi)部的主機(jī)搞垮。 所以也不得不對(duì)網(wǎng)管提醒一點(diǎn)。消除不良CGI,并對(duì)惡意報(bào)文采用一些過濾手段,是非常需要重視的課題! 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |