用CAR(承諾訪問速率)來防止Smurff攻擊 |
發(fā)布時間: 2012/5/28 19:48:35 |
TCP/IP協(xié)議在設計之初,沒有過多的考慮安全這一方面,因此許多協(xié)議存在著被黑客利用的弱點。隨著互聯(lián)網(wǎng)絡急劇的膨脹,這些弱點將對我們的企業(yè)網(wǎng)絡構成日益嚴峻的威脅。一個很好的例子就是TCP協(xié)議,這個協(xié)議要求在傳輸數(shù)據(jù)之前使用一個“三次握手”過程來建立一個連接。如下圖所示.
source destination
syn=x
------------>
ack=x+1
<------------
syn=y
ack=y+1
------------>
syn=x+1
source端最初發(fā)送一個syn=x的報文,請求建立一個TCP連接。
destination端以一個在報文頭中設置了ack,syn標記的報文作為響應。
ack標記是對source端請求的響應,syn標記指示自身的連接建立請求。
source端通過向destination端發(fā)送一個帶ack標記的報文確認目的端的連接建立請求。
當完成上述“三次握手”之后,source端可以開始正式發(fā)送數(shù)據(jù)給destination端。
TCP協(xié)議中的弱點之一是目的端期望源端發(fā)送一個最后的ack給目的端,完成連接的建立。黑客可以利用這個弱點,通過偽造一個虛假的sourceIP地址向一個目標服務器發(fā)送大量的tcp syn請求報文,由于source是虛假的,將會導致destination無法收到source返回的ack,這種連接類型被稱為半開連接(Half-Open Connection)。這樣將導致destination端的資源被大量占用,從而致使目的端為新的服務拒絕連接,這就是有名的拒絕服務攻擊(Denial of Service Attack)。
網(wǎng)絡攻擊的分類:
1.偵測攻擊
從嚴格意義上講,偵測攻擊不能算是真正的攻擊,它主要指黑客利用各種手段對網(wǎng)絡中的具體的信息(網(wǎng)絡拓樸、網(wǎng)絡內(nèi)的主機、主機上開啟的服務)進行偵測,但是偵測攻擊往往是真正攻擊的前奏。
2.訪問攻擊
在這種攻擊中,黑客企圖獲得對網(wǎng)絡和網(wǎng)絡資源的未經(jīng)授權的或非法的訪問,尤其是如file、e-mail、web服務器這樣的資源。
3.DOS攻擊
使用DOS攻擊,黑客企圖拒絕到特定資源的合法流量和用戶訪問,或者至少降低對資源的服務質(zhì)量。
DOS攻擊除了TCP的half-open connection以外,還有象基于TCP syn、UDP echo、ICMP echo的flood攻擊。
緩解DOS攻擊的方法很多,比如說用ACL,URPF等技術都可以實現(xiàn),但本專題僅專注于用traffic-police(流量策略)技術實現(xiàn)。
traffic-police可以執(zhí)行兩個基本功能:
1.速率限制
2.流量分類
traffic-police的命令結構如下(在MQC配置模式):
police
?drop—Drops the packet.
?set-prec-transmit
?set-dscp-transmit
?transmit—Sends the packet.
當實施流量策略的時候,在CISCO路由器內(nèi)部將會有一套非常復雜的用來對流量傳輸?shù)膶嶋H速率進行評估的機制,這是利用被稱為令牌桶(toke-bucket)的機制來實現(xiàn),CISCO設備支持多種類型的令牌桶,如單桶和雙桶。
單桶的特征如下:
![]() 桶的大小就是BC,并且在初始的時刻桶內(nèi)就裝滿了BC byte的令牌。
在令牌桶的上方,CISCO路由器將以恒定于CIR的速率往桶內(nèi)注入令牌。
在令牌桶的下方,CISCO路由器將會根據(jù)底層實際需要傳遞的數(shù)據(jù)包的數(shù)量來決定需要從令牌桶中流出多少byte的令牌。
因此,不難發(fā)現(xiàn),可能會出現(xiàn)下列幾種情況:
1) BC桶內(nèi)當前令牌數(shù)量>=路由器底層實際需要傳輸?shù)臄?shù)據(jù)包的數(shù)量
這種情況,將會觸發(fā)conform-action行為,通常是transmit。表明桶內(nèi)令牌數(shù)量足夠。
2) BC桶內(nèi)當前令牌數(shù)量<路由器底層實際需要傳輸?shù)臄?shù)據(jù)包的數(shù)量
這種情況,將會觸發(fā)exceed-action行為,通常是drop。表明桶內(nèi)令牌數(shù)量不夠。
雙桶特征如下:
![]() 第一個桶的大小就是BC,并且在初始的時刻桶內(nèi)就裝滿了BC byte的令牌。
第二個桶的大小就是BE,并且也是在初始的時刻桶內(nèi)就裝滿了BE byte的令牌。
這兩個桶之間的關聯(lián)是:如果新注入的令牌將BC桶裝滿,那么富裕的令牌將從BC桶注入進BE桶。
在Bc桶的上方,CISCO路由器將以恒定于CIR的速率往bc桶內(nèi)注入令牌。
在每個桶的下方,CISCO路由器將會根據(jù)底層實際需要傳遞的數(shù)據(jù)包的數(shù)量來決定需要從令牌桶中流出多少byte的令牌。
因此,不難發(fā)現(xiàn),可能會出現(xiàn)下列幾種情況:
1) BC桶內(nèi)當前令牌數(shù)量>=路由器底層實際需要傳輸?shù)臄?shù)據(jù)包的數(shù)量
這種情況,將會觸發(fā)conform-action行為,表明BC桶內(nèi)令牌數(shù)量足夠。
2) BC桶內(nèi)當前令牌數(shù)量<路由器底層實際需要傳輸?shù)臄?shù)據(jù)包的數(shù)量
這種情況,將會觸發(fā)exceed-action行為,表明BC桶內(nèi)令牌數(shù)量不夠,但是BE桶內(nèi)令牌數(shù)量足夠。
3) BE桶內(nèi)婁前令牌數(shù)量<路由器底層實際需要傳輸?shù)臄?shù)據(jù)包的數(shù)量,將會觸發(fā)violate-action行為,表明BC和BE每個桶都不夠。
接下來,我們將用兩個具體的實例來說明CAR的工作原理。
實例1:
在這個例子中,traffic policing被配置為CIR 8000bit/s , BC被配置為1000byte,
初始到達一個450字節(jié)的數(shù)據(jù)包,0.25秒之后,到達一個900字節(jié)的數(shù)據(jù)包。
police被關聯(lián)在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 conform-action transmit exceed-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting
在這個例子中,初始的token buckets中裝滿1000byte的tokens,如果在初始階段到達450字節(jié)的數(shù)據(jù)包,那么需要從token bucket中流出450字節(jié)的tokens, 此時,token buckets中剩余(1000-450)byte=550字節(jié)的tokens,token bucket中的token數(shù)量有富裕,將觸發(fā)comform-action行為,450字節(jié)的數(shù)據(jù)包將被transmit。0.25秒之后,一個800字節(jié)的數(shù)據(jù)包到達,在0.25秒的時間間隔之內(nèi),token buckets中將注入(8000bps/8)*0.25s=250字節(jié)的tokens,此時,token buckets中共剩余(550+250)byte=800字節(jié)的tokens, 由于到達的數(shù)據(jù)包的大小為900字節(jié),需要從token buckets中流出相應字節(jié)的token數(shù),而此時,token buckets中的token數(shù)量不夠,將會觸發(fā)exceed-action行為,此900字節(jié)大小的數(shù)據(jù)包將被drop。
重要結論:通過以上分析,我們不難發(fā)現(xiàn),數(shù)據(jù)包被傳輸還是被丟棄,實際上不僅僅取決于數(shù)據(jù)包自身的大小,還取決于兩個連續(xù)數(shù)據(jù)包之間的時間間隔。
實例2:
在這個例子中,traffic policing被配置為CIR 8000bit/s , BC被配置為1000bytes,BE被配置為1000bytes。
初始到達一個450字節(jié)的數(shù)據(jù)包,0.25秒之后,到達一個900字節(jié)的數(shù)據(jù)包。
0.4秒之后,到達一個1000字節(jié)的數(shù)據(jù)包,0.2秒之后,到達一個400字節(jié)的數(shù)據(jù)包。
police被關聯(lián)在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 1000 conform-action transmit exceed-action set-prec-transmit 1 violate-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting
在這個例子中,初始的token buckets中裝滿1000byte的token,如果在初始階段到達450字節(jié)的數(shù)據(jù)包,那么需要從token bucket中流出450字節(jié)的tokens, 此時,token buckets中剩余(1000-450)byte=550字節(jié)的token,token bucket中的token數(shù)量有富裕,將觸發(fā)comform-action行為,450字節(jié)的數(shù)據(jù)包將被transmit。0.25秒之后,一個800字節(jié)的數(shù)據(jù)包到達,在0.25秒的時間間隔之內(nèi),token buckets中將注入(8000bps/8)*0.25s=250字節(jié)的token,此時,token buckets中共剩余(550+250)byte=800字節(jié)的token , 由于到達的數(shù)據(jù)包的大小為900字節(jié),需要從token buckets中流出相應字節(jié)的token數(shù),而此時,BC桶中的token只有800字節(jié),數(shù)量不夠,但是BE桶中有1000字節(jié),路由器會直接向BE桶借900字節(jié)的token,此時,BC桶中token數(shù)量不夠,但是BE桶中token數(shù)量足夠,將觸發(fā)exceed-action行為,900字節(jié)的數(shù)據(jù)包將會被set-prec-transmit 1。900字節(jié)的數(shù)據(jù)包被處理完成之后,BC桶中剩余800字節(jié)的tokens,BE桶中剩余100字節(jié)的tokens。0.4秒之后又到達一個1000字節(jié)大小的數(shù)據(jù)包,在這0.4秒之內(nèi),BC桶中將被新注入(8000bps/8*0.4)=400bytes的token,BC桶現(xiàn)在800字節(jié)的token,BC桶最多只能容納1000字節(jié)的token,故路由器先將BC桶注滿(增加200bytes的tokens,BC桶此時共1000字節(jié)的tokens),多余的200字節(jié)的tokens將被注入進BE桶(增加200bytes的tokens,BE桶共300字節(jié)的tokens)。當把1000字節(jié)的數(shù)據(jù)包傳遞之后,BC桶中的剩余的tokens數(shù)量剛好為0,BE桶中的token數(shù)量保持不變(300字節(jié)),將會觸發(fā)conform-action行為,此數(shù)據(jù)包將被transmit。0.2秒之后又到達一個400字節(jié)的數(shù)據(jù)包,在這0.2秒之內(nèi),BC桶中將新注入(8000bps/8*0.2)=200bytes的tokens,此時BC桶中總的tokens數(shù)量為200bytes的tokens,BE桶中共有300bytes的tokens,需要傳遞的數(shù)據(jù)包為400字節(jié),BC桶、BE桶中的tokens數(shù)量都不夠,此時,將會觸發(fā)violate-action行為,此數(shù)據(jù)包將被drop。
在深入理解了Traffic-Police的工作原理之后,接下來我們講述一個利用此技術緩解smurf攻擊的實例。
smurf攻擊的工作原理:
![]() Internet中有兩臺真實PC,一臺H11的IP地址為1.1.1.1,另一臺H33的IP地址為3.3.3.3,R1后方的ethernet網(wǎng)絡內(nèi)有一個以太網(wǎng)段192.168.20.0/24,假設主機H11是一個攻擊者,它發(fā)起一個到子網(wǎng)192.168.20.0的ICMP echo廣播報文,報文的源IP地址被偽造成他想要攻擊的PC H33的IP地址3.3.3.3,目的地址為192.168.20.255(子網(wǎng)廣播地址),當R1后方網(wǎng)段內(nèi)的每臺主機收到此廣播報文后,都將作出相同的響應:返回單播報文,此報文的目的地址為3.3.3.3(此時,R1后方的ethernet網(wǎng)絡被攻擊者利用,成為一個攻擊的放大器)。這樣真實主機H33將收到192.168.20.0/24網(wǎng)段內(nèi)所有主機的ICMP echo-reply的洪泛,最終主機H33的系統(tǒng)資源將被耗盡。
理解了smurf攻擊的工作原理之后,我們可以用traffic-police減緩smurf攻擊。
下面的示例給出了路由器R1上的配置:
Router1(config)# access-list 101 permit icmp any any echo
Router1(config)# class-map DOS
Router1(config-cmap)# match access-group 101
Router1(config-cmap)# exit
Router1(config)# policy-map DENY_DOS
Router1(config-pmap)# class DOS
Router1(config-pmap-c)# police 25600 8000 conform-action transmit exceed-action drop
Router1(config-pmap-c)# exit
Router1(config-pmap)# exit
Router1(config)# interface serial 0/0
Router1(config-if)# service-policy input DENY_DOS
億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
聯(lián)系:億恩小凡 QQ:89317007 電話:0371-63322206 本文出自:億恩科技【www.allwellnessguide.com】 |