DoS (Denial of Service)攻擊就是利用合理的服務請求來占用過多的服務資源,從而使合法用戶無法得到服務的響應。
dos攻擊的方法很多,但它們都具有一些共同的典型特征,例如:使用欺騙的源地址、使用網絡協議的缺陷、使用操作系統或軟件的漏洞、在網絡上產生大量的無用數據包消耗服務資源等。因此,要防御dos攻擊,就必須從這些攻擊的特征入手,分析其特征,制定合適的策略和方法。
Smurf攻擊的特征描述
Smurf攻擊是根據它的攻擊程序命名的,是一種ICMP echo flooding攻擊。
在這樣的攻擊中,ping包中包含的欺騙源地址指向的主機是最終的受害者,也是主要的受害者;而路由器連接的廣播網段成為了攻擊的幫凶(類似一個放大器,使網絡流量迅速增大),也是受害者。
防御Smurf攻擊的方法
根據Smurf攻擊的特征,可以從兩個方面入手來防御Smurf的攻擊:一是防止自己的網絡成為攻擊的幫凶即第一受害者 ;二是從最終受害者的角度來防御Smurf攻擊。下面就從這兩個方面來討論防御的的測路和方法。
一、拒絕成為攻擊的幫凶
Smurf要利用一個網絡作為“流量放大器”,該網絡必定具備以下特征:
1、路由器允許有IP源地址欺騙的數據包通過 ;
2、路由器將定向廣播(發送到廣播地址的數據包)轉換成為第二層(MAC層)的廣播並向連接網段廣播 ;
3、廣播網絡上的主機允許對ping廣播作出回應 ;
4、路由器對主機回應的ping數據流量未做限制 ;
所以,可以根據以上四點來重新規劃網絡,以使自己的網絡不具備會成為“流量放大器”的條件 。
防止IP源地址欺騙
IP源地址欺騙可以應用在多種不同的攻擊方式中,例如:TCP SYN flooding、UDP flooding、ICMP flooding等。
偽造的源地址可以是不存在(不允許在公網上發布)的地址,或者是最終攻擊目標的地址。
在UDP flooding中,攻擊者則是通過連接目標系統的changen端口到偽造源地址指向的主機的echo端口,導致changen端口產生大量的隨機字符到echo端口,而echo端口又將接收到的字符返回,最後導致兩個系統都因耗盡資源而崩潰。
注意:為了防御UDP flooding,我們必須防止路由器的診斷端口或服務向管理域之外的區域開放,如果不需要使用這些端口或者服務,應該將其關閉。
防止IP源地址欺騙的最有效方法就是驗證源地址的真實性,在Cisco路由器上,我們可以采用下列兩種方法:
a、在網絡邊界實施對IP源地址欺騙的過濾
阻止IP源地址欺騙的一個最簡單有效的方法是通過在邊界路由器使用向內的訪問列表,限制下游網絡發進來的數據包確實是在允許接受的地址范圍,不在允許范圍的數據將被刪除。同時,為了追溯攻擊者,可以使用log記錄被刪除的數據信息 。
b、使用反向地址發送
使用訪問控制列表在下游入口處做ip限制,是基於下游ip地址段的確定性 。但在上游入口處,流入數據的ip地址范圍有時是難於確定的。在無法確定過濾范圍時,一個可行的方法是使用反向地址發送(Unicast Reverse Path Forwarding)。
反向地址發送是Cisco路由器的新版IOS提供的一項特性,簡稱uRPF。
uRPF的工作原理是:當路由器在一個接口上收到一個數據包時,它會查找CEF(Cisco Express Forward)表,驗證是否存在從該接收接口到包中指定的源地址之間的路由,即反向查找路徑,驗證其真實性,如果不存在這樣的路徑就將數據包刪除。
相比訪問控制列表,uRPF具有很多優點,例如:耗費CPU資源少、可以適應路由器路由表的動態變化(因為CEF表會跟隨路由表的動態變化而更新),所以維護量更少,對路由器的性能影響較小。
uRPF是基於接口配置的,配置命令如下:
(config)# ip cef
(config-if)# ip verify unicast reverse-path
注意:uRPF的實施,CEF必須是全局打開,並在配置接口上也是啟用的。
禁止定向廣播
在Smurf攻擊中,攻擊者將ping數據包發向一個網絡的廣播地址,例如:192.168.1.255。大多數情況下,路由器在接收到該廣播包之後,默認會將這個第三層廣播轉換成第二層廣播,即將192.168.1.255轉換成為以太網的FF:FF:FF:FF:FF:FF 。而該廣播網段上的所有以太網接口卡在接收到這個第二層廣播之後,就會向主機系統發出中斷請求,並對這個廣播作出回應,從而消耗了主機資源,並且做出的回應可能造成對源地址所指目標的攻擊。
所以,在絕大多數情況下,應該在邊界路由器上禁止定向廣播,使用以下接口命令禁止
(config)# no ip directed-broadcast
注:在絕大部分情況下,是不需要使用路由器的定向廣播功能的,會使用定向廣播的特例也有,例如,如果一台SMB或者NT服務器需要讓一個遠程的LAN能夠看到自己,就必須向這個LAN發送定向廣播,但對於這種應用可以通過使用WINS服務器解決。
禁止主機對ping廣播作出反應
當前絕大部分的操作系統都可以通過特別的設置,使主機系統對於ICMP ECHO廣播不做出回應。
通過阻止“放大器”網絡上的主機對ICMP ECHO(ping)廣播做出回應,可以阻止該廣播網絡成為攻擊的幫凶。
限制icmp echo的流量
當大量的數據湧入一個接口的時候,即使使用了訪問策略對ICMP包進行了刪除,接口還是可能會因為忙於不斷刪除大量數據而導致接口不能提供正常服務。
與被動的刪除數據相比,一個主動的方法是,在接口上設置承諾速率限制(committed access rate,簡稱CAR),將特定數據的流量限制在一個范圍之內,允許其適量的通過,同時保證了其它流量的正常通過。
例:使用CAR限制ICMP echo flooding
!建立訪問列表,分類要過濾的數據
access-list 102 permit icmp any any echo
access-list 102 permit icmp any any echo-reply
!在接口上配置CAR,將ICMP echo流量
!限制在256k,允許突發8k
interface Serial3/0/0
rate-limit input access-group 102 256000 8000 8000 conform-action transmit exceed-action drop
二、受害者的策略
由Smurf攻擊產生的攻擊數據流量在經過了“放大器網絡“放大之後,當到達最終攻擊目標時,數據流量可能是非常巨大的。為了保護被攻擊的系統免於崩潰,我們可以采取以下兩種策略:
使用控制訪問列表過濾數據
在最終攻擊目標的網絡邊界路由器上使用訪問控制列表,拒絕將ping攻擊數據包發往被攻擊的主機。但這是一個粗努的方法,因為當你在路由器上完全限制了發往被攻擊主機的ping數據包之後,其它希望正常通過的ping數據包也將無法通過。另外,在邊界路由器上使用訪問控制列表過濾ping數據之後,雖然可以保護路由器連接的內部網絡免受攻擊,但攻擊的數據還是會大量湧入路由器,導致路由器接口的阻塞。
使用CAR限制速率
在最終攻擊目標的網絡邊界路由器上使用CAR限制是一種更為可取的方法。通過CAR可以將流入網絡的某一類數據包的總流量限制在一定的范圍,從而可以保證其它數據的正常通過。
結論
本文討論的基於路由器配置來防御dos攻擊的方法在實際應用中有非常顯著的效果。當前絕大部分的網絡仍然使用路由器作為邊界連接設備,所以本文闡述的方法具有普遍實施的意義。