(一)Dos拒絕服務
DoS是Denial of Service的簡稱,即拒絕服務,造成DoS的攻擊行為被稱為DoS攻擊,其目的是使計算機或網絡無法提供正常的服務。最常見的DoS攻擊有計算機網絡帶寬攻擊和連通性攻擊。
DoS攻擊是指故意的攻擊網絡協議實現的缺陷或直接通過野蠻手段殘忍地耗盡被攻擊對象的資源,目的是讓目標計算機或網絡無法提供正常的服務或資源訪問,使目標系統服務系統停止響應甚至崩潰,而在此攻擊中并不包括侵入目標服務器或目標網絡設備。這些服務資源包括網絡帶寬,文件系統空間容量,開放的進程或者允許的連接。這種攻擊會導致資源的匱乏,無論計算機的處理速度多快、內存容量多大、網絡帶寬的速度多快都無法避免這種攻擊帶來的后果。
(二)Dos攻擊和防御
1、SYN洪水攻擊
要理解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存活時間。
上面三個參數對系統的TCP連接狀況有很大影響。
SYN洪水攻擊屬于DoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。
攻擊者偽造ACK數據包,發送大量的半連接請求 Web服務器在未收到客戶端的確認包時,會重發請求包一直到鏈接超時,才將此條目從未連接隊列刪除。攻擊者再配合IP欺騙,SYN攻擊會達到很好的效果。通常攻擊者在短時間內偽造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回復確認包,并等待客戶的確認,由于源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN 請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。
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攻擊。
防御方法
第一種是縮短SYN Timeout時間
第二種方法是設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重復SYN報文,就認定是受到了攻擊,以后從這個IP地址來的包會被一概丟棄。
缺陷
SYN Cookies 的使用不與任何協議定義沖突,照理來說它該和所有的 TCP 實現兼容。然而,當 SYN Cookies 使用的時候,會發生兩種值得注意的變化:
首先,服務器只能編碼八種 MSS 數值,因為只有 3 位二進制空間可用。
其次,這個服務器必須拒絕所有的TCP 選用項,例如大型窗口和時間戳,因為服務器會在信息被用其他方式存儲時丟棄 SYN 隊列條目。
盡管這些限制將不可避免地導致一個不如最佳的體驗,它們的效果很少被客戶端注意到——這些改變只在被攻擊時值得注意。在這樣的情況下,犧牲 TCP 選項來保護連接一般被認為是合乎情理的。
Linux內核從 2.6.26 版本開始為 TCP 選用項加入了有限的支持,通過把它們編碼在時間戳內實現。
較新的TCP Cookie 傳輸(TCPCT)標準被設計用來克服 SYN Cookies 的這些問題,并且在各種方面改進這套機制。不像 SYN Cookies,TCPCT 是一個 TCP 拓展并且要求兩端點都支持 TCPCT。
2、ACK Flood攻擊
在TCP連接建立之后,所有的數據傳輸TCP報文都是帶有ACK標志位的,主機在接收到一個帶有ACK標志位的數據包的時候,需要檢查該數據包所表示的連接四元組是否存在,如果存在則檢查該數據包所表示的狀態是否合法,然后再向應用層傳遞該數據包。如果在檢查中發現該數據包不合法,例如該數據包所指向的目的端口在本機并未開放,則主機操作系統協議棧會回應RST包告訴對方此端口不存在。通常狀態檢測防火墻所做的事情與此類似,只不過防火墻只攔截非法的數據包,而不主動回應。
對比主機以及防火墻在接收到ACK報文和SYN報文時所做動作的復雜程度,顯然ACK報文帶來的負載要小得多。所以在實際環境中,只有當攻擊程序每秒鐘發送ACK報文的速率達到一定的程度,才能使主機和防火墻的負載有大的變化。當發包速率很大的時候,主機操作系統將耗費大量的精力接收報文、判斷狀態,同時要主動回應RST報文,正常的數據包就可能無法得到及時的處理。這時候客戶端(以IE為例)的表現就是訪問頁面反應很慢,丟包率較高。但是狀態檢測的防火墻通過判斷ACK報文的狀態是否合法,借助其強大的硬件能力可以較為有效的過濾攻擊報文。當然如果攻擊流量非常大(特別是千兆線路上,我們曾經觀察到200~300Mbps左右的ACK Flood),由于需要維護很大的連接狀態表同時要檢查數量巨大的ACK報文的狀態,防火墻也會不堪重負導致全網癱瘓。
3,死亡之ping (pingofdeath)
ICMP(InternetControlMessageProtocol,Internet控制信息協議)在Internet上用于錯誤處理和傳遞控制信息。最普通的ping程序就是這個功能。而在TCP/IP的RFC文檔中對包的最大尺寸都有嚴格限制規定,許多操作系統的TCP/IP協議棧都規定ICMP包大小為64KB,且在對包的標題頭進行讀取之后,要根據該標題頭里包含的信息來為有效載荷生成緩沖區。"PingofDeath"就是故意產生畸形的測試Ping(PacketInternetGroper)包,聲稱自己的尺寸超過ICMP上限,也就是加載的尺寸超過64KB上限,使未采取保護措施的網絡系統出現內存分配錯誤,導致TCP/IP協議棧崩潰,最終接收方宕機。
防御方法
1、用高級設置法預防Ping
2、用網絡防火墻阻隔Ping
使用防火墻來阻隔Ping是最簡單有效的方法,現在基本上所有的防火墻在默認情況下都啟用了ICMP過濾的功能。
3、啟用IP安全策略防Ping
4、修改TTL值防Ping
許多入侵者喜歡用TTL值來判斷操作系統,他們首先會Ping一下你的機子,如看到TTL值為128就認為你的系統為Windows NT/2000,如果TTL值為32則認為目標主機操作系統為Windows 95/98,
如果為TTL值為255/64就認為是UNIX/Linux操作系統。既然入侵者相信TTL值所反應出來的結果,那么我們不妨修改TTL值來欺騙入侵者,達到保護系統的目的
5、防火墻在處理Ping of Death攻擊報文時,是通過判定數據包的大小是否大于65535字節,如果數據包大于65535字節,則判定為攻擊報文,直接丟棄。
4、UDP泛洪
UDPflood攻擊:如今在Internet上UDP(用戶數據包協議)的應用比較廣泛,很多提供WWW和Mail等服務設備通常是使用Unix的服務器,它們默認打開一些被黑客惡意利用的UDP服務。如echo服務會顯示接收到的每一個數據包,而原本作為測試功能的chargen服務會在收到每一個數據包時隨機反饋一些字符。UDPflood假冒攻擊就是利用這兩個簡單的TCP/IP服務的漏洞進行惡意攻擊,通過偽造與某一主機的Chargen服務之間的一次的UDP連接,回復地址指向開著Echo服務的一臺主機,通過將Chargen
和Echo服務互指,來回傳送毫無用處且占滿帶寬的垃圾數據,在兩臺主機之間生成足夠多的無用數據流,這一拒絕服務攻擊飛快地導致網絡可用帶寬耗盡。
防御方法
UDP協議與TCP 協議不同,是無連接狀態的協議,并且UDP應用協議五花八門,差異極大,因此針對UDP Flood的防護非常困難。其防護要根據具體情況對待:
(1) 判斷包大小,如果是大包攻擊則使用防止UDP碎片方法:根據攻擊包大小設定包碎片重組大小,通常不小于1500.在極端情況下,可以考慮丟棄所有UDP碎片。
(2)攻擊端口為業務端口:根據該業務UDP最大包長設置UDP最大包大小以過濾異常流量。
(3)攻擊端口為非業務端口:一個是丟棄所有UDP包,可能會誤傷正常業務;一個是建立UDP連接規則,要求所有去往該端口的UDP包,必須首先與TCP端口建立TCP連接。不過這種方法需要很專業的防火墻或其他防護設備支持。
5、Land(LandAttack)攻擊
在Land攻擊中,黑客利用一個特別打造的SYN包--它的原地址和目標地址都被設置成某一個服務器地址進行攻擊。此舉將導致接受服務器向它自己的地址發送SYN-ACK消息, 結果這個地址又發回ACK消息并創建一個空連接,每一個這樣的連接都將保留直到超時,在Land攻擊下,許多UNIX將崩潰,NT變得極其緩慢(大約持續五分鐘)。
防御方法
防火墻在處理Land攻擊報文時,通過檢查TCP報文的源地址和目的地址是否相同,或者TCP報文的源地址是否為環回地址,如果是則丟棄。
6、淚滴攻擊
對于一些大的IP數據包,往往需要對其進行拆分傳送,這是為了迎合鏈路層的MTU(最大傳輸單元)的要求。比如,一個6 000字節的IP包,在MTU為2 000的鏈路上傳輸的時候,就需要分成3個IP 包。在IP報頭中有一個偏移字段和一個拆分標志(MF)。如果MF標志設置為1,則表示這個IP包是一個大IP包的片段,其中偏移字段指出了這個片段在整個IP包中的位置。例如,對一個6 000字 節的IP包進行拆分(MTU為2 000),則3個片段中偏移字段的值依次為0,2 000,4 000。這樣接收端在全部接收完IP數據包后,就可以根據這些信息重新組裝這幾個分次接收的拆分IP包。在這 里就有一個安全漏洞可以利用了,就是如果黑客們在截取IP數據包后,把偏移字段設置成不正確的值,這樣接收端在收到這些分拆的數據包后,就不能按數據包中的偏移字段值正確組合這些拆分的數據包,但接收端會不斷嘗試,這樣就可能致使目標計算機操作系統因資源耗盡而崩潰。
防御方法
檢測這類攻擊的方法是對接收到的分片數據包進行分析,計算數據包的片偏移量(Offset)是否有誤。反攻擊的方法是添加系統補丁程序,丟棄收到的病態分片數據包并對這種攻擊進行審計。盡可能采用最新的操作系統,或者在防火墻上設置分段重組功能,由防火墻先接收到同一原包中的所有拆分數據包,然后完成重組工作,而不是直接轉發。因為防火墻上可以設置當出現重疊字段時所采用的規則。
7、IP地址掃描攻擊
IP地址掃描攻擊是攻擊者運用ICMP報文(如Ping和Tracert命令)探測目標地址,或者使用TCP/UDP報文對一定地址發起連接,通過判斷是否有應答報文,以確定哪些目標系統確實存活著并且連接在目標網絡上。
防御方法
防火墻對收到的TCP、UDP、ICMP報文進行檢測,當某源IP地址連續發送報文的目的IP地址與前一個報文的目的IP地址不同時,則記為一次異常,當異常次數超過預定義的閾值時,則認為該源IP的行為為IP地址掃描行為,防火墻會將該源IP地址加入黑名單。
8、Smurf攻擊
Smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包,來淹沒受害主機,最終導致該網絡的所有主機都對此ICMP應答請求做出答復,導致網絡阻塞。更加復雜的Smurf將源地址改為第三方的受害者,最終導致第三方崩潰。
攻擊的過程是這樣的:Woodlly Attacker向一個具有大量主機和因特網連接的網絡的廣播地址發送一個欺騙性Ping分組(echo 請求),這個目標網絡被稱為反彈站點,而欺騙性Ping分組的源地址就是Woolly希望攻擊的系統。
這種攻擊的前提是,路由器接收到這個發送給IP廣播地址(如206.121.73.255)的分組后,會認為這就是廣播分組,并且把以太網廣播地址FF:FF:FF:FF:FF:FF:映射過來。這樣路由器因因特網上接收到該分組,會對本地網段中的所有主機進行廣播。
讀者肯定能夠想到下面會發生什么情況。網段中的所有主機都會向欺騙性分組的IP地址發送echo響應信息。如果這是一個很大的以太網段,可以會有500個以上的主機對收到的echo請求進行回復。
由于多數系統都會盡快地處理ICMP傳輸信息,Woodlly Attacker把分組的源地址設置為目標系統,因此目標系統都很快就會被大量的echo信息吞沒,這樣輕而易舉地就能夠阻止該系統處理其它任何網絡傳輸,從而引起拒絕為正常系統服務。
這種攻擊不僅影響目標系統,還影響目標公司的因特網連接。如果反彈站點具有T3連接(45Mbps),而目標系統所在的公司使用的是租用線路(56Kbps),則所有進出該公司的通訊都會停止下來。
這種攻擊現在已經很少見,大多數的網絡已經對這種攻擊免疫了.
防御方法
配置路由器禁止IP廣播包進網
配置網絡上所有計算機的操作系統,禁止對目標地址為廣播地址的ICMP包響應。
被攻擊目標與ISP協商,有ISP暫時阻止這些流量。
對于從本網絡向外部網絡發送的數據包,本網絡應該將其源地址為其他網絡的這部分數據包過
9、Fraggle攻擊
類似于Smurf,使用UDP應答消息而非ICMP。UDP端口7(ECHO)和端口19(Chargen)在收到UDP報文后,都會產生回應。在UDP的7號端口收到報文后,會回應收到的內容,而UDP的19號端口在收到報文后,會產生一串字符流。它們都同ICMP一樣,會產生大量無用的應答報文,占滿網路帶寬。攻擊者可以向子網廣播地址發送源地址為受害網絡或受害主機的UDP包,端口號用7或19.子網絡啟用了此功能的每個系統都會向受害者的主機做出響應,從而引發大量的包,導致受害網絡的阻塞或受害主機的崩潰;子網上沒有啟動這些功能的系統將產生一個ICMP不可達的消息,因而仍然消耗帶寬。也可將源端口改為Chargen。目的端口為ECHO,這樣會自動不停地產生回應報文,其危害性更大。
防御方法
檢查進入防火墻的UDP報文,若目的端口號為7或19,則直接拒絕,并將攻擊記錄到日志,否則允許通過。
10、電子郵件炸彈
電子郵件炸彈是最古老的匿名攻擊之一,通過設置一臺機器不斷的大量的向同一地址發送電子郵件,攻擊者能夠耗盡接受者網絡的帶寬。
防御方法
對郵件地址進行配置,自動刪除來自同一主機的過量或重復的消息。
11、畸形消息攻擊
各類操作系統上的許多服務都存在此類問題,由于這些服務在處理信息之前沒有進行適當正確的錯誤校驗,在收到畸形的信息可能會崩潰。
防御方法
打最新的服務補丁。