Linux下的DOS攻擊
DOS是Denial of service的簡稱,即拒絕服務,造成Dos攻擊行為被稱為Dos攻擊,其目的是使計算機或網絡無法提供正常的服務。最常見的Dos攻擊有計算機帶寬攻擊和連通性攻擊
概念
計算機和網絡系統為Internet用戶提供互聯網資源,如果黑客要進行Dos攻擊的話,可以有很多手段!現在最常見的Dos攻擊有對計算機網絡的帶寬攻擊和連通性攻擊。
- 帶寬攻擊指以極大的信息量沖擊網絡,使得所有可用網絡資源都被消耗殆盡,最后導致合法的用戶請求無法通過。
- 連通性攻擊指用大量的連接請求沖擊計算機,使得所有可用的操作系統資源被消耗殆盡,最后導致計算機無法處理合法用戶的請求。
傳統上,攻擊者面臨的主要問題是網絡帶寬,由於較小的網絡規模和較慢的網絡速度的限制,攻擊者無法發出過多的請求。雖然類似“the ping of death”的攻擊類型只需要較少量的包就可以摧毀一個沒有打過補丁的UNIX系統,但是大多數的DOS攻擊還是需要相當大的帶寬的,而以個人為單位的黑客們很難使用高帶寬的資源。為了克服這個缺點,Dos攻擊者開發了分布式攻擊。攻擊者簡單利用工具集合許多的網絡帶寬來同時對同一個目標發動大量的攻擊請求,這就是DDos攻擊。
無論是Dos攻擊還是DDos攻擊,簡單地看,都是一種破壞網絡服務的黑客方式,雖然具體的實現方式千變萬化,但都有一個共同點,就是其根本目的是使受害主機或網絡無法及時接受並處理外界請求,或無法及時回應外界請求。
其具體表現方式有以下幾種:
- 制造大流量無用數據,造成通往被攻擊主機的網絡阻塞,使被攻擊主機無法正常和外界通信。
- 利用被攻擊主機提供服務或傳輸協議上處理重復連接的缺陷,反復高頻的發出攻擊性的重復服務請求,使被攻擊主機無法及時處理其他正常的請求。
- 利用被攻擊主機所提供服務程序或傳輸協議的本身實現缺陷,反復發送畸形的攻擊數據引發系統錯誤的分配大量系統資源,使主機處於掛起狀態甚至死機。
攻擊流程
要理解DOS攻擊,首先要理解TCP連接的三次握手過程(Three-wayhandshake)。在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發送SYN包(SYN=i)到服務器,並進入SYN SEND狀態,等待服務器確認;
第二次握手:服務器收到SYN包,必須確認客戶的SYN(ACK=i+1),同時自己也發送一個SYN包(SYN=j),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=j+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務端開始傳送數據。
上述過程中的一些重要概念:
-
半連接
收到SYN包而還未收到ACK包時的連接狀態為半連接,即尚未完全完成三次握手的TCP連接
-
半連接隊列
在三次握手協議中,服務器維護一個半連接隊列,該隊列為每個客戶端的SYN包(SYN=i)開設一個條目,該條目表明服務器已收到SYN包,並向客戶發起確認,正在等待客戶的確認包。這些條目所標示的連接在服務器處於SYN_ RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。
-
Backlog參數:表示半連接隊列的最大容納數目。
SYN-ACK重傳次數:服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首 次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息、從半連接隊列中刪除。注意,每次 重傳等待的時間不一定相同。
-
半連接存活時間
是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。
SYN洪水攻擊屬於DoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費 CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火牆等網絡系統,事實上SYN攻擊並不管目標是什么系統,只要這些系統打開TCP服 務就可以實施。從圖4-3可看到,服務器接收到連接請求(SYN=i )將此信息加入未連接隊列,並發送請求包給客戶端( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。
配合IP欺騙,SYN攻擊能 達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回復確認包,並等待客戶的確認,由於源地址是不存 在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN 請求 被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。
過程如下:
攻擊主機C(地址偽裝后為C‘)-----大量SYN包---->被攻擊主機
C’<-------SYN/ACK包----被攻擊主機
由於C’地址不可達,被攻擊主機等待SYN包超時。攻擊主機通過發大量SYN包填滿未連接隊列,導致正常SYN包被拒絕服務。另外,SYN洪水攻擊還可以通過發大量ACK包進行DoS攻擊。
攻擊手段
- ping of death
- tear drop
- udp flood
- syn flood
- land attack
- ip spoofing dos
死亡之ping
ICMP(Internet Control Message Protocol,網絡控制信息協議)在Internet上用於錯誤處理和傳遞控制信息。它的功能之一是與主機聯系,通過發送一個“回音請求(echorequest)”信息包看看主機是否“活着”。在TCP/IP的RFC文檔中對包的最大尺寸都有嚴格限制規定,許多操作系統的TCP/IP協議棧都規定ICMP包的大小為64KB,且對包的標題頭進行讀取之后,要根據該標題頭里包含的信息來為有效載荷生成緩沖區。“Ping of death”就是故意產生畸形的測試ping包,聲稱自己的尺寸超過ICMP上限,也就是加載的尺寸超過64KB上限,使未采取保護措施的網絡系統出現內存分配錯誤,導致TCP/IP協議棧崩潰,最終接收方宕機。
淚滴(Tear Drop)
淚滴攻擊利用TCP/IP協議棧中實現信任IP碎片中的包的標題頭所包含的信息來實現自己的攻擊。IP分段含有指示該分段所包含的是原包的哪一段的信息,某些TCP/IP協議棧在收到含有重疊偏移的偽造分段時將崩潰。
UDP泛洪(UDP Flood)
如今在Internet上UDP(用戶數據包協議)的應用比較廣泛,很多提供www和mail等服務設備通常是使用unix的服務器,它們默認打開一些被黑客惡意利用的UDP服務。如echo服務會顯示接收到的每一個數據包,而原本作為測試功能的chargen服務會在收到每一個數據包時隨機反饋一些字符。UDP Flood假冒攻擊就是利用這兩個簡單的TCP/IP服務的漏洞進行惡意攻擊,通過偽造與某一主機的chargen服務之間的一次UDP連接,回復地址指向開着Echo服務的一台主機,通過將chargen和echo服務互指,來回傳送毫無用處且占滿帶寬的垃圾數據,在兩台主機之間生成足夠多的無用數據流,這一拒絕服務攻擊快速導致網絡的可用帶寬耗盡。
SYN泛洪(SYN Flood)
標准TCp連接時,會有一個3次握手過程。首先是請求方發送一個SYN消息,服務方收到SYN后,會想請求方回送一個SYN-ACK表示確認,當請求方收到SYN-ACK之后,再次向服務方發送一個ACK消息,一次TCP連接建立成功。SYN泛洪則專門針對TCP協議棧在兩台主機間初始化、連接握手的過程進行DOS攻擊。
請求方接收到服務方的SYN-ACK之后,采用源地址欺騙手段使得服務方收不到ACK回應,於是服務方在一定時間處於等待接收請求方ACK消息的狀態。但是對於以台服務器來說,只有有限的內存緩沖區用來創建連接,若緩沖區內充滿虛假連接的初始信息,服務器會對接下來的連接停止響應,直至緩沖區里面的連接企圖超時。如果惡意攻擊方快速連續的發送此類連接請求,服務器可用的TCP連接隊列很快被阻塞,系統可用資源急劇減少,網絡可用帶寬迅速縮小,長此下去,除了少數幸運用戶的請求可以插在大量虛假請求間得到應答外,服務器將無法向用戶提供正常的合法服務。
Land Attack攻擊
在Land攻擊中,黑客利用一個特別打造的SYN包-它的源地址和目標地址都被設置成某一個服務器地址進行攻擊。此舉將導致接受服務器向它自己的地址發送SYN-ACK消息,結果這個地址又發回ACK消息並創建一個空連接,每一個這樣的連接都保存至超時,許多UNIX將奔潰。
IP欺騙DOS攻擊
這種攻擊利用TCP協議棧的RST位來實現,使用IP欺騙,迫使服務器把合法用戶的連接復位,影響合法用戶的連接。假設現在有一個合法用戶A已經與服務器建立了正常的連接,攻擊者構造攻擊的TCP數據,偽裝自己的IP為A的IP,向服務器發送一個帶有RST位的TCP數據段。服務器收到這樣的數據之后,認為從機器A發送的連接有錯誤,就會清空緩沖區中已經建立好的連接。這時,合法的機器A再發送合法的數據,服務器已經沒有這樣的連接了,該用戶就會被拒絕服務而只能重新開始新的連接。
常見的DOS攻擊分類
利用軟件實現的缺陷
OOB攻擊(常用工具winnuke)
teardrop攻擊(常用工具teardrop.cboink.cbonk.c)
land攻擊
IGMP碎片包攻擊
jolt攻擊
Cisco2600路由器IOSversion12.0(10)遠程拒絕服務攻擊
等等
這些攻擊都是利用了被攻擊者軟件實現上的缺陷完成DOS攻擊的。這些攻擊工具通常是向被攻擊系統發送特定類型的一個或多個報文,這些攻擊通常是致命的,一般是一擊致死