拒絕服務攻擊即是攻擊者想辦法讓目標機器停止提供服務,是黑客常用的攻擊手段之一。其實對網絡帶寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分,只要能夠對目標造成麻煩,使某些服務被暫停甚至主機死機,都屬於拒絕服務攻擊。拒絕服務攻擊問題也一直得不到合理的解決,究其原因是因為網絡協議本身的安全缺陷,從而拒絕服務攻擊也成為了攻擊者的終極手法。攻擊者進行拒絕服務攻擊,實際上讓服務器實現兩種效果:一是迫使服務器的緩沖區滿,不接收新的請求;二是使用IP欺騙,迫使服務器把非法用戶的連接復位,影響合法用戶的連接。
一、SYN Flood
SYN Flood也稱為SYN洪水、SYN洪泛,是一種阻斷服務攻擊,起因是攻擊者傳送一系列的SYN請求到目標系統。
當用戶端試着與服務器建立TCP連線時,在正常情況下,用戶端與服務器端會交換一系列的信息,如下。
(1)用戶端通過傳送SYN同步(synchronize)信息到服務器,要求建立連線。
(2)服務器通過響應用戶端SYN-ACK以抄收應答請求。
(3)用戶端應答ACK,連線隨之建立。
這就是所謂TCP三向交握,這是每個使用TCP傳輸協議建立連線的基礎。
SYN Flood是一種廣為人知的攻擊,一般對現代網絡不太有效。這種攻擊只有在服務器收到SYN后分配資源且在收到ACK之前有效。
SYN Flood攻擊目前有兩種方法,不過都與服務器端沒收到ACK有關。惡意用戶可以跳過傳送最后的ACK信息;或者在SYN里通過欺騙來源IP地址,讓服務器送SYN-ACK到假造的IP地址,因此永不可能收到ACK。
若用戶A與服務器之間正常連線,三向交握正確地進行,則如下圖所示。
對於SYN Flood,攻擊者B傳送許多封包就是不發送“ACK”到服務器。該連線因此處於半開狀態並吞食服務器資源。因為阻斷服務攻擊的結果是合法用戶A與服務器嘗試建立連線的請求遭拒,如下圖所示。
從防御角度來說,有幾種簡單的解決方法。
1、縮短SYN Timeout時間
由於SYN Flood攻擊的效果取決於服務器上保持的SYN半連接數,這個值等於SYN攻擊的頻度×SYN Timeout,所以通過縮短從接收到SYN報文到確定這個報文無效並丟棄該連接的時間。例如,設置為20秒以下(過低的SYN Timeout設置可能會影響客戶的正常訪問),可以大幅降低服務器的負荷。
2、設置SYN Cookie
設置SYN Cookie就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重復SYN報文,就認定是受到了攻擊,以后從這個IP地址發來的包會被丟棄。
可是上述的兩種方法只能對付比較原始的SYN Flood攻擊,縮短SYN Timeout時間僅會在對方攻擊頻度不高的情況下生效,SYN Cookie更依賴於對方使用真實的IP地址,如果攻擊者以數萬/秒的速度發送SYN報文,同時利用SOCK_RAW隨機改寫IP報文中的源地址,以上的方法將毫無用武之地。
二、IP欺騙攻擊
所謂IP欺騙,無非就是偽造他人的IP地址,其實質就是讓一台計算機來扮演另一台計算機,借此達到蒙混過關的目的。
IP欺騙利用了主機之間正常信任關系來發動,所謂信任關系就是:對於網絡上的兩台計算機X和Y,Y可以利用遠程登錄工具,無需口令驗證登錄到X主機上,而登錄的基礎是X對Y主機IP的驗證,即X對Y提供服務是基於對主機Y的IP地址的信任。
既然X、Y之間的信任關系是基於IP地址建立起來的,那么假如能夠冒充Y的IP地址,就可以遠程登錄X,而不需要任何口令的驗證。這就是IP欺騙的理論依據。
IP欺騙攻擊的步驟如下。
(1)使被信任的主機的網絡暫時癱瘓,以免對攻擊造成干擾。
(2)連接到目標主機的某個端口來猜測ISN基值和增加規律。
(3)把源地址偽裝成被信任主機,發送帶有SYN標志的數據段請求連接。
(4)黑客等待目標機發送SYN+ACK包給已經癱瘓的被信任主機,因為黑客這時看不到這個包。
(5)再次偽裝成被信任主機向目標主機發送ACK,此時發送的數據段帶有預測的目標主機ISN+1。
6)連接建立發送命令。
三、UDP洪水攻擊
UDP洪水攻擊,又稱UDP攻擊或UDP淹沒攻擊。UDP是一種無連接的協議,而且它不需要用任何程序建立連接來傳輸數據。當攻擊者隨機地向受害系統的端口發送UDP數據包的時候,就可能發生了UDP洪水攻擊。
在網絡的關鍵之處使用防火牆對來源不明的有害數據進行過濾,可以有效減輕UDP洪水攻擊。此外,在用戶的網絡中還應采取如下的措施。
(1)禁用或過濾監控和響應服務。
(2)禁用或過濾其他的UDP服務。
(3)如果用戶必須提供一些UDP服務的外部訪問,那么需要使用代理機制來保護那種服務,使它不會被濫用。
(4)對用戶的網絡進行監控以了解哪些系統在使用這些服務,並對濫用的跡象進行監控。
四、Ping洪流攻擊
由於在早期,路由器對包的最大尺寸有限制。許多操作系統對TCP/IP棧的實現在ICMP包上都是規定為64KB,並且在對包的標題頭進行讀取之后,要根據該標題頭里包含的信息來為有效載荷生成緩沖區。當產生畸形的、聲稱自己的尺寸超過ICMP上限的包,也就是加載的尺寸超過64KB上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使接收方死機。
五、Teardrop攻擊
Teardrop攻擊是基於UDP的病態分片數據包的攻擊方法,其工作原理是向被攻擊者發送多個分片的IP包(IP分片數據包中包括該分片數據包屬於哪個數據包以及在數據包中的位置等信息),某些操作系統收到含有重疊偏移的偽造分片數據包時將會出現系統崩潰、重啟等現象。
六、Land攻擊
Land攻擊原理是:用一個特別打造的SYN包,它的源地址和目標地址都被設置成某一個服務器地址。此舉將導致接收服務器向它自己的地址發送SYN-ACK消息,結果這個地址又發回ACK消息並創建一個空連接。被攻擊的服務器每接收一個這樣的連接都會將其保留,直到超時。不同系統對Land攻擊反應不同,UNIX系統大多會崩潰,NT系統會變得極其緩慢。
七、Smurf攻擊
Smurf(Smurf攻擊)是以最初發動這種攻擊的程序名“Smurf”來命名的,它通過獨占網絡資源,使其他主機不能進行正常訪問,從而導致網絡癱瘓。這種攻擊方法使用了IP欺騙和ICMP回復方法使大量網絡傳輸充斥着目標系統,從而使目標系統拒絕為正常系統服務。Smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包來淹沒受害主機,最終導致該網絡的所有主機都對此ICMP應答請求做出答復,造成網絡阻塞。更加復雜的Smurf將源地址改為第三方的受害者,最終導致第三方崩潰。
Smurf攻擊過程如下。
1、網絡掃描
在進行Smurf攻擊前,攻擊者使用數據包分析工具(如Sniffer等)尋找那些以廣播方式向本地網絡中的所有主機發送echo請求分組的網絡路由器,同時記錄本地網絡的IP地址。
2、發起攻擊
攻擊者通過程序偽造一個echo請求的ICMP報文,報文的源地址利用欺騙方式偽造成希望攻擊的系統的IP地址,然后循環不斷地讀取具有路由器漏洞的目標網絡的IP地址,並向它們的廣播地址發送分組。
3、攻擊過程
echo請求被發送到的目標網絡,稱為反彈站點,其路由器從互聯網上接收到攻擊者發出的IP廣播地址(如202.196.80.255)的echo請求的分組后,把以太網廣播地址FF:FF:FF:FF:FF:FF映射過來,然后將此echo請求分組對本地網段中的所有主機進行廣播。收到echo請求分組的主機將及時向源地址回復,全部指向受攻擊的系統。被攻擊系統的網絡很快被這些echo響應分組充滿而阻塞,不能處理其他任何網絡傳輸,從而引起拒絕正常的系統服務的問題。
八、Fraggle攻擊
Fraggle攻擊就是對Smurf攻擊做了簡單的修改,使用的是UDP應答消息而非ICMP。因為發送的是UDP報文,Fraggle攻擊可以穿過一些阻止ICMP報文進入的防火牆。Fraggle攻擊的原理是攻擊者A向廣播地址發送UDP報文,報文的源IP地址偽裝成受害者B的IP地址。這樣,廣播域中所有啟用了此功能的計算機都會向受害者B發送回應報文,從而產生大量的流量,導致受害網絡的阻塞或受害主機崩潰。