DDOS與DDOS追蹤的介紹
鏈級測試 (Link Testing)
多數(shù)的追蹤技術(shù)都是從最接近victim的路由器開始,然后開始檢查上流數(shù)據(jù)鏈,直到找到攻擊流量發(fā)起源。理想情況下,這種過程可以遞歸執(zhí)行直到找到攻擊源頭。這種技術(shù)假設(shè)攻擊一直保持活動(dòng)直到完成追蹤,因此很難在攻擊結(jié)束后、間歇性攻擊或?qū)ψ粉欉M(jìn)行攻擊調(diào)整等情況進(jìn)行追蹤。包括下面兩種鏈級測試:
1、Input debugging
很多路由器都提供Input debugging特性,這能讓管理員在一些出口端過濾特定的數(shù)據(jù)包,而且能決定可以達(dá)到那些入口。這種特性就被用來作traceback:首先,victim在確定被攻擊時(shí),要從所有的數(shù)據(jù)包中描述出攻擊包標(biāo)志。通過這些標(biāo)志,管理員在上流的出口端配置合適的Input debugging。這個(gè)過濾會(huì)體現(xiàn)出相關(guān)的input端口,這個(gè)過濾過程可以一直朝上流進(jìn)行,直到能夠到達(dá)最初的源頭。當(dāng)然這種工作很多依靠手工,一些國外的ISP聯(lián)合開發(fā)的工具能夠在它們的網(wǎng)絡(luò)中進(jìn)行自動(dòng)的追蹤。
但是這種辦法最大的問題就是管理花費(fèi)。聯(lián)系多個(gè)ISP并同他們合作需要時(shí)間。因此這種辦法需要大量的時(shí)間,而且?guī)缀醪豢赡芡瓿伞?nbsp;
2、Controlled flooding
Burch和 Cheswick提出的方法。這種方法實(shí)際上就是制造flood攻擊,通過觀察路由器的狀態(tài)來判斷攻擊路徑。首先應(yīng)該有一張上游的路徑圖,當(dāng)受到攻擊的時(shí)候,可以從victim的上級路由器開始依照路徑圖對上游的路由器進(jìn)行控制的flood,因?yàn)檫@些數(shù)據(jù)包同攻擊者發(fā)起的數(shù)據(jù)包同時(shí)共享了路由器,因此增加了路由器丟包的可能性。通過這種沿路徑圖不斷向上進(jìn)行,就能夠接近攻擊發(fā)起的源頭。
這種想法很有獨(dú)創(chuàng)性而且也很實(shí)際,但是有幾個(gè)缺點(diǎn)和限制。最大的缺點(diǎn)就是這種辦法本身就是一種DOS攻擊,會(huì)對一些信任路徑也進(jìn)行DOS,這個(gè)缺點(diǎn)也很難用程序?qū)嵤6,Controlled flooding要求有一個(gè)幾乎覆蓋整個(gè)網(wǎng)絡(luò)的拓?fù)鋱D。Burch和 Cheswick也指出,這種辦法很難用于DDOS攻擊的追蹤。這種方法也只能對正在進(jìn)行攻擊的情況有效。
現(xiàn)在CISCO的路由器的CEF(Cisco Express Forwarding)實(shí)際上就是一種鏈級測試,也就是說,要用CEF追蹤到最終源頭的話,那么整個(gè)鏈路上的路由器都得使用CISCO的路由器,而且支持CEF。就得要Cisco 12000或者7500系列的路由器了。(不知道現(xiàn)在怎么樣,沒查最新的CISCO文檔),但是要用這個(gè)功能是很費(fèi)資源的。
在CISCO路由器(支持ip source-track的路由器)上IP源追蹤以下面的步驟實(shí)現(xiàn):
1、當(dāng)發(fā)現(xiàn)目的被攻擊,打開整個(gè)路由器上對目的地址的追蹤,輸入命令 ip source-track。
2、每個(gè)Line Card為要追蹤的目的地址創(chuàng)建特定的CEF隊(duì)列。對于line card或者端口適配器用特定的ASIC作包轉(zhuǎn)換,CEF隊(duì)列用于將包置入line card或者port adapter的CPU。
3、每個(gè)line card CPU收集關(guān)于要追蹤目的的通訊信息
4、所產(chǎn)生的數(shù)據(jù)定時(shí)導(dǎo)出到路由器。要現(xiàn)實(shí)這些流信息的摘要,輸入命令:show ip source-track summary。要顯示每個(gè)輸入接口的更多的細(xì)節(jié)信息,輸入命令show ip source-track
5、統(tǒng)計(jì)被追蹤的IP地址的細(xì)目表。這可用于上游路由器繼續(xù)分析?梢栽诋(dāng)前路由器上關(guān)閉IP source tracker,輸入命令:no ip source-track。然后在上游路由器上再打開這個(gè)功能。
6、重復(fù)步驟1到5,直到找到攻擊源。
這差不多能夠解答securitytest提的了吧。
Logging
這種方法通過在主路由器上記錄數(shù)據(jù)包,然后通過數(shù)據(jù)采集技術(shù)來決定這些數(shù)據(jù)包的穿越路徑。雖然這種辦法可以用于對攻擊后的數(shù)據(jù)進(jìn)行追蹤,它也有很明顯的缺點(diǎn),比如可能要求大量的資源(或者取樣),并且對付大量數(shù)據(jù)的綜合問題。
ICMP追蹤
這種方法主要依靠路由器自身產(chǎn)生的ICMP跟蹤消息。每個(gè)路由器都有很低的概率(比如:1/200000),數(shù)據(jù)包可能會(huì)把內(nèi)容復(fù)制到一個(gè)ICMP消息包中,并且包含了到臨近源地址的路由器信息。當(dāng)flood攻擊開始的時(shí)候,victim就可以利用這些ICMP消息來重新構(gòu)造攻擊者的路徑。這種方式同上面介紹的比較,有很多優(yōu)點(diǎn),但是也有一些缺點(diǎn)。比如:ICMP可能被從普通流量中過濾掉,并且,ICMP追蹤消息還要同input debugging特性(將數(shù)據(jù)包同數(shù)據(jù)包input端口和/或者要到達(dá)的MAC地址關(guān)聯(lián)的能力)相關(guān),但是,可能一些路由器就沒有這樣的功能。同時(shí),這種辦法還必須有一種辦法來處理攻擊者可能發(fā)送的偽造ICMP Traceback消息。也就是說,我們可以把這種方式同其他辦法一起使用來讓跟蹤機(jī)制更有效。(IETF iTrace)
這就是yawl說的IETF的工作組研究的內(nèi)容,當(dāng)時(shí)我給Bellovin提出一些意見,但是沒有得到答案。比如:
1、盡管是隨機(jī)1/20000發(fā)送追蹤包,但是,對于偽造TRACEBACK的包情況下,對路由器的效率將有一定的影響。
2、追蹤包的認(rèn)證并不能解決偽造問題。因?yàn)橐袆e是否是偽造包,那么必須去認(rèn)證,加大了工作量。
3、即便使用NULL 認(rèn)證,同樣能夠達(dá)到目的(有認(rèn)證的情況下)。而且也不會(huì)有太大影響。
4、itrace的本來目的是去對付DOS的欺騙源問題,但是現(xiàn)在的設(shè)計(jì)仿佛讓我們更關(guān)心的是路徑而不是源頭。難道路徑比源頭更對我們解決DOS問題有用么?
等等,還有一堆問題,都是我覺得iTrace將會(huì)面臨的很難處理的問題。
數(shù)據(jù)包標(biāo)記
這種技術(shù)構(gòu)想(因?yàn)楝F(xiàn)在沒有實(shí)用)就是要在現(xiàn)有協(xié)議的基礎(chǔ)上進(jìn)行修改,而且修改很小,不象iTrace的想法,個(gè)人認(rèn)為比iTrace更好一些。這種追蹤技術(shù)有很多細(xì)節(jié)研究,形成多種標(biāo)記算法,但是最好的還是經(jīng)過壓縮的邊緣取樣算法。
這種技術(shù)原理就是修改IP頭中,重載其中的identification域。也就是如果沒有使用到identification域的話,將這個(gè)域定義為標(biāo)記。
將16bit的idnetification分成:3bit的offset(可允許8次分片),5bit的distance,以及8bit的邊緣分片。5bit的distance可以允許31級路由,這對于目前的網(wǎng)絡(luò)來說已經(jīng)足夠了。
標(biāo)記和重構(gòu)路徑的算法是:
Marking procedure at router R:
let R' = BitIntereave(R, Hash(R))
let k be the number of none-overlappling fragments in R'
for each packet w
let x be a random number from [0..1)
if x
let o be a random integer from [0..k-1]
let f be the fragment of R' at offset o
write f into w.frag
write 0 into w.distance
wirte o into w.offset
else
if w.distance=0 then
let f be the fragment of R' at offset w.offset
write f?w.frag into w.frag
increment w.distance Path reconstruction procedure at victim v: let FragTbl be a table of tuples(frag,offset,distance)
let G be a tree with root v
let edges in G be tuples(start,end,distance)
let maxd:=0
let last:=v
for each packet w from attacker
FragTbl.Insert(w.frag,w.offset,w.distance)
if w.distance>maxd then
maxd:=w.distance
for d:=0 to maxd
for all ordered combinations of fragments at distance d
construct edge z
if d!=0 then
z:= z?last
if Hash(EvenBits(z))=OddBits(z) then
insert edge(z,EvenBits(z),d) into G
last:=EvenBits(z);
remove any edge(x,y,d) with d!=distance from x to v in G
extract path(Ri..Rj) by enumerating acyclic paths in G
實(shí)驗(yàn)室情況下這種標(biāo)記技術(shù)只需要victim能夠抓到1000到2500個(gè)包就能夠重構(gòu)整個(gè)路徑了,應(yīng)該說結(jié)果是很好的,但是沒有投入到實(shí)用中,主要是需要路由器廠商和ISP支持。
差不多ip traceback的已經(jīng)實(shí)用的技術(shù)和實(shí)驗(yàn)室技術(shù),或者已經(jīng)死掉的,就主要是這些,雖然還有其他的一些。
已經(jīng)很長時(shí)間沒有搞DDOS防范這一塊了,國內(nèi)也有黑洞這樣的產(chǎn)品,以前也了解一些國外的,比如floodguard、toplayer、radware等。受securitytest提示,又了解到riverhead的,我就立刻看了看他們的白皮書。
因?yàn)榍懊鎎igfoot提出的主要是ip traceback的題目,securitytest也又到防御的問題。針對DDOS的問題ip traceback和Mitigation是不一樣的,ip traceback主要是進(jìn)行追蹤,因?yàn)镈DOS主要是spoof,而很難判別到真正的攻擊源,而且如果能夠很容易找到真正的攻擊源,不僅僅對付DDOS,對付其他的攻擊也很有幫助,比如法律問題等。而Mitigation是從受害者的角度,因?yàn)関ictim一般是沒有能力去調(diào)查整個(gè)網(wǎng)絡(luò),找出source,而且,即便能夠找到source,也得有法律或者一些溝通的手段來讓source停下來(攻擊的source并不是source的攻擊者),這種意味著大量的溝通、跨ISP、跨過等類似的非技術(shù)問題,所以,通常很難處理。但是從victim的角度來說,必須得有所解決辦法,所以就需要Mitigation。
這又正好是我以前研究的范圍,所以,又會(huì)說出一大堆。對于Mitigation,其實(shí),技術(shù)的根本就是要能從眾多的流量中將攻擊包和合法包分離出來,把攻擊包拋棄掉,讓合法包通過就性了。這就是根本,所以實(shí)際運(yùn)用的技術(shù)就是要如何盡可能識別出攻擊包,而又盡可能小地影響正常包。這又得來分析DDOS(甚至DOS)的方式和原理;居窒旅鎺追N形式:
1、系統(tǒng)漏洞形成的DOS。這種特征固定,檢測和防御也容易
2、協(xié)議攻擊(一些跟系統(tǒng)處理相關(guān),一些跟協(xié)議相關(guān))。比如SYN FLOOD,碎片等。特征還好識別,檢測和防御相對容易。比如SYN COOKIE、SYN CACHE,碎片可以拋棄。比如land攻擊、smurf、teardrop等
3、bandwidth FLOOD。垃圾流量堵塞帶寬,特征不好識別,防御不容易
4、基本合法的FLOOD。比3更難了,比如分布的Slashdot 。
實(shí)際的DDOS,一般都是多種方式結(jié)合的。比如SYNFLOOD,可能同時(shí)是bandwidth FLOOD。
影響防御的主要因素就是看特征是否能得到,比如1、2就相對好解決,一些基本不影響的使用的FLOOD,則可以很好被拋棄,比如ICMP FLOOD。但是,攻擊發(fā)包工具如果將數(shù)據(jù)包更能偽裝成合法包,那么就很難識別出來了。
一般的Mitigation方法也就是:
1、Filter。對于特征明顯的,比如一些蠕蟲等,在路由器上就可以搞定。當(dāng)然,過濾是最終解決辦法,只要識別出了攻擊包,就是要把這些包過濾掉。
2、隨機(jī)丟包。跟隨機(jī)算法相關(guān),好的算法可以讓合法包受到更小影響
3、SYN COOKIE、SYN CACHE等特定防御辦法。針對一些固定的攻擊手段來防御和過濾。比如ICMP FLOOD、UDP FLOOD。SYN COOKIE等都是避免spoof問題,至少TCP還有三次握手,所以還好判斷SPOOF
4、被動(dòng)消極忽略?梢哉f也是一種確認(rèn)是否被欺騙的辦法。一般正常連接失敗會(huì)重新嘗試,但是攻擊者一般不會(huì)嘗試的。所以可以臨時(shí)拋棄第一次連接請求而接受第二次或者第三次連接請求。
5、主動(dòng)發(fā)送RST。對付SYN FLOOD的,比如一些IDS上。當(dāng)然,實(shí)際不是有效的。
6、統(tǒng)計(jì)分析和指紋。這本來是研究的主要內(nèi)容,但是最后陷入了算法牛角尖,因?yàn)橹饕且粋(gè)算法問題。通過統(tǒng)計(jì)分析的角度來得到指紋,然后根據(jù)指紋來拋棄攻擊包,也是一種異常檢測的技術(shù)。說得很簡單,但是要不影響合法包也不容易,不至于變成了隨機(jī)丟包。(其實(shí)當(dāng)時(shí)考慮太過復(fù)雜,非得要詳細(xì)分析出攻擊包和合法包,實(shí)際不需要,只要過濾掉足夠的攻擊包,即便讓攻擊包通過,但只要不造成DOS就可以了。)這也是很多研究者研究的主要課題,目的也就是識別攻擊包。
現(xiàn)在在回到securitytest提到的riverhead。關(guān)于riverhead的技術(shù),我都只是從他們的白皮書上了解到的,但根據(jù)我的分析技術(shù)方法都沒有超出上面提到的范圍。
riverhead的核心方案就是檢測 Detection、轉(zhuǎn)移 Diversion 和 緩解 Mitigation,也就是檢測到攻擊,然后將流量轉(zhuǎn)移到他們的產(chǎn)品guard上,然后通過guard進(jìn)行Mitigation。
它的實(shí)現(xiàn)步驟,就是:
因?yàn)闆]有圖,所以先定義一下,才能說清楚:
#靠近分布式拒絕服務(wù)源頭的路由器為 遠(yuǎn)端路由器
#靠近受害者的路由器為 近端路由器
#Riverhead的Guard設(shè)備附屬安裝的路由器為 附屬路由器
防御的步驟
1、首先檢測到有DDOS發(fā)生,并了解到victim
2、Guard發(fā)送BGP通告到遠(yuǎn)端路由器(在victim的BGP通告設(shè)置前綴,并得到比原始BGP通告更高的優(yōu)先權(quán)),表示從遠(yuǎn)端路由器到victim有新的路由,并且路由到Guard的loopback interface,所有到victim的都經(jīng)過附屬路由器轉(zhuǎn)移到了Guard上
3、Guard檢查流量,并且清除其中的攻擊流量,然后把安全的流量轉(zhuǎn)發(fā)到附屬路由器上,在回到victim
其中核心就是Guard,技術(shù)就是白皮書中描述的MVP架構(gòu)(Multi-Verification Process),也就是下面5個(gè)層次
過濾(Filtering) :這個(gè)模塊包含靜態(tài)和動(dòng)態(tài)的DDOS過濾。靜態(tài)過濾,攔截non-essential流量,可以是用戶定義的,或者是riverhead默認(rèn)提供的。動(dòng)態(tài)過濾則基于行為分析和流量的細(xì)節(jié)分析,通過增加對可疑流量的確認(rèn)或攔截已經(jīng)確認(rèn)的惡意流量,來進(jìn)行實(shí)時(shí)更新
反欺騙(Anti-Spoofing):這個(gè)模塊驗(yàn)證進(jìn)入系統(tǒng)的數(shù)據(jù)包是否被欺騙的。Guard使用了獨(dú)有的、有專利的源驗(yàn)證機(jī)制來避免欺騙。也通過一些機(jī)制來確認(rèn)合法流量,消除合法數(shù)據(jù)包被拋棄
異常檢測(Anomaly Recognition):該模塊監(jiān)視所有沒有被過濾和反欺騙模塊拋棄的流量,將流量同平常紀(jì)錄的基線行為進(jìn)行比較,發(fā)現(xiàn)異常;驹砭褪峭ㄟ^模式匹配,區(qū)別來自black-hat和合法通訊之間的不同。該原理用來識別攻擊源和類型,而且提出攔截這類流量的指南。
異常檢測包括:
攻擊流量速率大小
包大小和端口的分布
包到達(dá)時(shí)間的分布
并發(fā)流量數(shù)
高級協(xié)議特征
出、入的速率 流量分類:
源IP
源端口
目的端口
協(xié)議類型
連接量(每天、每周)
協(xié)議分析(Protocol Analysis):本模塊處理異常檢測中發(fā)現(xiàn)的可疑的應(yīng)用方面的攻擊,比如http攻擊。協(xié)議分析也檢測一些協(xié)議錯(cuò)誤行為。
流量限制(Rate Limiting):主要是處理那些消耗太多資源的源頭流量。
所以,實(shí)際上最主要的內(nèi)容就是異常檢測中的統(tǒng)計(jì)分析,但是從上面看似乎沒有多少特別的地方,但是,一定有很好的算法。比如FILTER,實(shí)際是對付一些很熟悉的有明顯特征的攻擊,反欺騙,就是對付syn flood這樣的,說不定也是一個(gè)syn cookie模塊,,但也許有更專利的技術(shù)。協(xié)議分析其實(shí)應(yīng)該來說就比較弱了,但可以針對一些常見協(xié)議中的特定攻擊,檢測識別一些協(xié)議錯(cuò)誤行為只是協(xié)議校驗(yàn),這個(gè)很簡單。流量限制則就是一種隨機(jī)丟包,最無奈的辦法,所以也是最后一個(gè)層次了。
因?yàn)檫@個(gè)產(chǎn)品主要是作Mitigation的,而不是ip traceback。但是可以判定還是有重要的問題,比如:
1、如何對付真正的bandwidth flood。如果路由器是千兆的,但是,攻擊流量已經(jīng)占了90%,只流下10%讓合法使用,路由器已經(jīng)先與Guard開始進(jìn)行隨機(jī)丟包了。(沒辦法,這是所有防御技術(shù)的瓶頸)
2、真正的攻擊。真正的攻擊是很難或者無法識別的。比如,基本跟正常形式一樣的,如果和統(tǒng)計(jì)數(shù)據(jù)很接近,那么很難區(qū)別出來。還有一些攻擊,比如反射式的郵件攻擊等,這是完全合法的,但是很難分類出來。
本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|