1. TCP/IP 協議的脆弱性
1.1 不能提供可靠的身份驗證
- TCP/IP 協議以 32 bit 的 IP 地址來作為網絡節點的唯一標識,而 IP 地址只是用戶軟件設置中的一個參數,因而是可以隨意修改的。
- 對 UDP 來說,是根據這個 IP 地址來唯一標識通信對方。 TCP 則通過三次握手,使情況稍有改善。 TCP 中的每個報文都含有一個標識本報文在整個通信流中位置的 32 bit 序列號,通信雙方通過序列號來確認數據的有效性。
- 由于 TCP 設計三次握手過程本身并不是為了身份驗證,只是提供同步確認和可靠通信,雖然這也能夠提供一定的身份驗證的支持,但這種支持很薄弱。
- 由于 TCP/IP 不能對節點上的用戶進行有效的身份認證,服務器無法鑒別登錄用戶的身份有效性,攻擊者可以冒充某個可信節點的 IP 地址,進行 IP 欺騙攻擊.
- 其次,由于某些系統的 TCP 序列號是可以預測的,攻擊者可以構造一個TCP'數據包,對網絡中的某個可信節點進行攻擊。
1.2 不能有效防止信息泄漏
- IPv4 中沒有考慮防止信息泄漏,在 IP 、 TCP 、 UDP 中都沒有對數據進行加密。 IP 協議是無連接的協議,一個 IP 包在傳輸過程中很可能會經過很多路由器和網段,在其中的任何一個環節都很容易進行竊昕 。攻擊者只需簡單地安裝一個網絡嗅探器,就可以看到通過本節點的所有網絡數據包。
1.3 沒有提供可靠的信息完整性驗證手段
- 在 IP 協議中,僅對 IP 頭實現校驗和保護
- 在UDP 協議中,對整個報文的校驗和檢查是一個可選項,并且對 UDP 報文的丟失不做檢查。
- 在 TCP 協議中,雖然每個報文都經過校驗和檢查,并且通過連續的序列號來對包的順序和完整進行檢查,保證數據的可靠傳輸。但是,校驗算法中沒有涉及加密和密碼驗證,很容易對報文內容進行修改,再重新計算校驗和
1.4 協議沒有手段控制資源占杳和分配
TCP/IP 中,對資源占杳和分配設計的一個基本原則是自覺原則。如參加 TCP通信的一方發現上次發送的數據報丟失,則主動將通信速率降至原來的一半。這樣,也給惡意的網絡破壞者提供了機會 c 如網絡破壞者可以大量的發 IP 報,造成網絡阻塞,也可以向一臺主機發送大量的 SYN 包從而大量占有該主機的資源 (SYN Flood) 。這種基于資源占用造成的攻擊被稱為拒絕服務攻擊( DOS)
2.常見 TCP/IP 協議攻擊方法分析
2.1 IP 欺騙( IP Spoofing)
IP 欺騙是指一個攻擊者假冒一個主機或合法用戶的 IP 地址,利用兩個主機之間的信任關系來達到攻擊的目的,而這種信任關系只是根據源 IP 地址來確定。所謂信任關系是指當主機 B 信任主機 A 上的 X用戶時,只要 X 在 A 上登錄, X 用戶就可以直接登錄到主機 B 上,而不需要任何口令。
IP 欺騙通常需要攻擊者能構造各種形式 IP 數據包,用虛假的源 IP 地址替代自己的真實 IP 地址。如果主機之間存在基于 IP 地址的信任關系,目標主機無法檢測出已經被欺騙。
防范措施
- 各個網絡 ISP 應該限制源地址為外部地址的 IP 數據包進入互聯網
- 合理的配置防火墻,限制數據包的源地址為內部網絡的數據包進入網絡。
2.2 TCP 會話劫持 (TCP sessJOn hijacking)
TCP 會話劫持跳過連接過程.對一個已經建立的連接進行攻擊。攻擊者與被假冒主機和目標主機之一在同一個子網中,攻擊者通過一個嗅探程序可以看到被假冒主機和目標主機之間通信的數據包。
- 攻擊者看到被假冒主機和目標主機建立一個連接并進行身份認證后,通過對數據包捕獲和進行分析,就可以得到連接的序列號。
- 一旦得到正確的序列號就可以發送一個假冒的 TCP 分段,接管已經建立的連接。這樣,被假冒主機發送的數據包都會被目標主機忽略,因為它們的序列號會被目標主機認為不正確。
防范措施
最主要的方法是在傳輸層對數據進行加密。
2.3 拒絕服務( Denial Of Service )
拒絕服務坷的目的就是使受害的服務器不能提供正常的網絡服務。
2.3.1 SYN 淹沒 (SYN Flooding)
當開放了一個TCP端口后,該端口就處于Listening狀態,不停地監視發到該端口的Syn報文,一旦接收到Client發來的Syn報文,就需要為該請求分配一個TCB(Transmission Control Block),通常一個TCB至少需要280個字節,在某些操作系統中TCB甚至需要1300個字節,并返回一個SYN ACK命令,立即轉為SYN-RECEIVED即半開連接狀態,而操作系統在SOCK的實現上最多可開啟半開連接個數是一定的。
從以上過程可以看到,如果惡意的向某個服務器端口發送大量的SYN包,則可以使服務器打開大量的半開連接,分配TCB,從而消耗大量的服務器資源,同時也使得正常的連接請求無法被相應。而攻擊發起方的資源消耗相比較可忽略不計。
防范措施
無效連接監視釋放
這種方法不停監視系統的半開連接和不活動連接,當達到一定閾值時拆除這些連接,從而釋放系統資源。這種方法對于所有的連接一視同仁,而且由于SYN Flood造成的半開連接數量很大,正常連接請求也被淹沒在其中被這種方式誤釋放掉,因此這種方法屬于入門級的SYN Flood方法。-
延緩TCB分配方法
從前面SYN Flood原理可以看到,消耗服務器資源主要是因為當SYN數據報文一到達,系統立即分配TCB,從而占用了資源。而SYN Flood由于很難建立起正常連接,因此,當正常連接建立起來后再分配TCB則可以有效地減輕服務器資源的消耗。常見的方法是使用Syn Cache和Syn Cookie技術。Syn Cache技術:
這種技術是在收到SYN數據報文時不急于去分配TCB,而是先回應一個SYN ACK報文,并在一個專用HASH表(Cache)中保存這種半開連接信息,直到收到正確的回應ACK報文再分配TCB。在FreeBSD系統中這種Cache每個半開連接只需使用160字節,遠小于TCB所需的736個字節。在發送的SYN ACK中需要使用一個己方的Sequence Number,這個數字不能被對方猜到,否則對于某些稍微智能一點的Syn Flood攻擊軟件來說,它們在發送Syn報文后會發送一個ACK報文,如果己方的Sequence Number被對方猜測到,則會被其建立起真正的連接。因此一般采用一些加密算法生成難于預測的Sequence Number。
Syn Cookie技術:
對于SYN攻擊,Syn Cache雖然不分配TCB,但是為了判斷后續對方發來的ACK報文中的Sequence Number的正確性,還是需要使用一些空間去保存己方生成的Sequence Number等信息,也造成了一些資源的浪費。
Syn Cookie技術則完全不使用任何存儲資源,這種方法比較巧妙,它使用一種特殊的算法生成Sequence Number,這種算法考慮到了對方的IP、端口、己方IP、端口的固定信息,以及對方無法知道而己方比較固定的一些信息,如MSS、時間等,在收到對方的ACK報文后,重新計算一遍,看其是否與對方回應報文中的(Sequence Number-1)相同,從而決定是否分配TCB資源。 -
使用SYN Proxy防火墻
Syn Cache技術和Syn Cookie技術總的來說是一種主機保護技術,需要系統的TCP/IP協議棧的支持,而目前并非所有的操作系統支持這些技術。因此很多防火墻中都提供一種SYN代理的功能,其主要原理是對試圖穿越的SYN請求進行驗證后才放行,下圖描述了這種過程:image.png
從上圖(左圖)中可以看出,防火墻在確認了連接的有效性后,才向內部的服務器(Listener)發起SYN請求,在右圖中,所有的無效連接均無法到達內部的服務器。
采用這種方式進行防范需要注意的一點就是防火墻需要對整個有效連接的過程發生的數據包進行代理,如下圖所示:
因為防火墻代替發出的SYN ACK包中使用的序列號為c,而服務器真正的回應包中序列號為c’,這其中有一個差值|c-c’|,在每個相關數據報文經過防火墻的時候進行序列號的修改。
TCP Safe Reset技術:
這也是防火墻Syn代理的一種方式,其工作過程如下圖所示:
這種方法在驗證了連接之后立即發出一個Safe Reset命令包,從而使得Client重新進行連接,這時出現的Syn報文防火墻就直接放行。在這種方式中,防火墻就不需要對通過防火墻的數據報文進行序列號的修改了。這需要客戶端的TCP協議棧支持RFC 793中的相關約定,同時由于Client需要兩次握手過程,連接建立的時間將有所延長。
2.3.2 死亡之 Ping(Ping O' Death )
死亡之 Ping 是利用 ICMP 協議的一種碎片攻擊 。攻擊者發送一個長度超過 65 535Byte 的 Echo Request 數據包,目標主機在重組分片的時候會造成事先分配的 65 535 Byt 字節緩沖區溢出,系統通常會崩憤或掛起
IP 數據包的最大長度是 65 535 (2 16 - 1) Byte,其中包括包頭長度(如果 IP 選項末指定,一般為 20 B)超過 MTU( Maximum Transmission Unit) 的數據包被分割成小的數據包,在接受端重新組裝。一般以太網的MTU 為 11500 Byte ,互聯網上的 MTU 通常是 576 Byte ICMP 回應請求放在 IP 數據包中,其中有 8 Byt 的 ICMP頭信息,接下來是 "Ping" 請求的數據宇節的數目。因此數據區所允許的最大尺寸為 65 535 - 20 - 8 = 65 507Byte
分段后的 IP 包要在接收端的 IP 層進行重組,這樣"死亡之 Ping"就可以再發送一個回應請求數據包,使它的數據包中的數據超過 65 507 Byte ,使得某些系統的 IP 分段組裝模塊出現異常。因為在 IP 分段組裝的過程中,它通過每一個 IP 分段中的偏移量來決定每一個分段在整個 IP 包中的位置,最后一個分段中,如果 IP 包的長度大于 65 507 Byte各個分段組裝后就會超過 IP 包的最大長度。某些操作系統要等到將所有的分段組裝完后才對 IP 包進行處理,所以就存在這樣一種內部緩沖區或內部變量溢出的可能性,這樣會導致系統崩憤或重啟。
防范措施
- 可以利用防火墻來阻止 Ping ,然而這樣也會阻擋一些合法應用。所以只要阻止被分段的 Ping ,這樣在大多數系統上允許一般合法的 64 Byt 的 Ping 通過,擋住了那些長度大于 MTU 的 ICMP 數據包.
- 這種攻擊能使系統崩潰的原因因系統不同而異.有的可能因為內核中固定大小的緩沖區因 IP 數據包過大而越界,損壞了其它數據或編碼;有的則可能因為用一個無符號的 16 bit 變量來保存數據包的長度和相關變量,當這些變量的值超過 65 535 Byte 時,變量不再與其數值一致,從而引發異常。因此可以為相應的系統打上補丁。
2.3.3 RST 和 FIN 攻擊( RST and FIN attack)
在 TCP 包中有 6 個標志位來指示分段的狀態。其中 RST 用來復位一個連接, FIN 表示沒有數據要發送了攻擊者經常利用這兩個標志位進行拒絕服務攻擊。他們先分析通過目標主機和受騙主機之間的 IP 數據包,計算出從受騙主機發往目標主機的下一個 TCP 段的序列號,然后產生一個帶有 RST 位設置的 TCP 段,將其放在假冒源 IP 地址的數據包中發往目標主機,目標主機收到后就關閉與受騙主機的連接。
利用 FIN 位的攻擊與 RST 位的攻擊很相似。攻擊者預測到正確的序列號后,使用它創建一個帶 FIN 位的 TCP 分段,然后發送給目標主機,好像受騙主機沒有數據要發送了,這樣,由受騙主機隨后發出的 TCP 段都會目標主機認為是網絡錯誤而忽略。
2.3.6 Smurf攻擊
通過地址欺騙,并使用回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包來淹沒受害主機的方式進行。最終導致該網絡的所有主機都對此ICMP應答請求做出答復,導致網絡阻塞
- 黑客鎖定一個被攻擊的主機(通常是一些Web服務器);
- 黑客尋找可做為中間代理的站點,用來對攻擊實施放大(通常會選擇多個,以便更好地隱藏自己,偽裝攻擊);
- 黑客給中間代理站點的廣播地址發送大量的ICMP包(主要是指Ping命令的回應包)。這些數據包全都以被攻擊的主機的IP地址做為IP包的源地址;
- 中間代理向其所在的子網上的所有主機發送源IP地址欺騙的數據包;
- 中間代理主機對被攻擊的網絡進行響應。
2.3.7 Land 攻擊
用一個特別打造的SYN包,其原地址和目標地址都被設置成某一個服務器地址。此舉將導致服務器向它自己的地址發送SYN-ACK消息,結果這個地址又發回ACK消息并創建一個空連接。被攻擊的服務器每接收一個這樣的連接都將保留,直到超時
防御方法:
這類攻擊的檢測方法相對來說比較容易,因為可以直接通過判斷網絡數據包的源地址和目標地址是否相同確認是否屬于攻擊行為。反攻擊的方法當然是適當地配置防火墻設備或制定包過濾路由器的包過濾規則,并對這種攻擊進行審計,記錄事件發生的時間、源主機和目標主機的MAC地址和IP地址,從而可以有效地分析并跟蹤攻擊者的來源。
2.3.8 UDP FLOOD攻擊
UDP不需要像TCP那樣進行三次握手,運行開銷低,不需要確認數據包是否成功到達目的地。這就造成UDP泛洪攻擊不但效率高,而且還可以在資源相對較少的情況下執行。UDP FLOOD可以使用小數據包(64字節)進行攻擊,也可以使用大數據包(大于1500字節,以太網MTU為1500字節)進行攻擊。大量小數據包會增大網絡設備處理數據包的壓力;而對于大數據包,網絡設備需要進行分片、重組,最終達到的效果就是占用網絡傳輸接口的帶寬、網絡堵塞、服務器響應慢等等。
防御方案: 限制每秒鐘接受到的流量(可能產生誤判);通過動態指紋學習(需要攻擊發生一定時間),將非法用戶加入黑名單。
2.3.9 淚滴攻擊
“teardrop”,又稱“淚滴”:IP數據包在網絡傳遞時,數據包可以分成更小的片段。攻擊者可以通過發送兩段(或者更多)數據包來實現TearDrop攻擊。第一個包的偏移量為0,長度為N,第二個包的偏移量小于N。為了合并這些數據段,TCP/IP堆棧會分配超乎尋常的巨大資源,從而造成系統資源的缺乏甚至機器的重新啟動,達到攻擊者需要的拒絕服務的目的。
3. DOS與DDOS區別
3.1 DOS
“DoS”是Denial of Service,拒絕服務的縮寫。所謂的拒絕服務是當前網絡攻擊手段中最常見的一種。它故意攻擊網絡協議的缺陷或直接通過某種手段耗盡被攻擊對象的資源,目的是讓目標計算機或網絡無法提供正常的服務或資源訪問,使目標系統服務停止響應甚至崩潰,而最值得注意的是,攻擊者在此攻擊中并不入侵目標服務器或目標網絡設備,單純利用網絡缺陷或者暴力消耗即可達到目的。
從原理上來說,無論攻擊者的攻擊目標(服務器、計算機或網絡服務)的處理速度多快、內存容量多大、網絡帶寬的速度多快都無法避免這種攻擊帶來的后果。任何資源都有一個極限,所以攻擊者總能找到一個方法使請求的值大于該極限值,導致所提供的服務資源耗盡。
從技術分類的角度上來說,最常見的DoS攻擊有對計算機網絡的帶寬攻擊和連通性攻擊。帶寬攻擊指以極大的通信量沖擊網絡,使得所有可用網絡資源都被消耗殆盡,最后導致合法用戶的請求無法通過。連通性攻擊指用大量的連接請求沖擊服務器或計算機,使得所有可用的操作系統資源都被消耗殆盡,最終計算機無法再處理合法用戶的請求。
在網絡還不發達的時候,單一的DoS攻擊一般是采用一對一的方式,也就是攻擊者直接利用自己的計算機或者設備,對攻擊目標發起DoS攻擊。當攻擊目標處在硬件性能低下、網絡連接情況不好等情況的時候,一對一的DoS攻擊效果是非常明顯的,很有可能直接一個攻擊者就搞定一個網站或者一個服務器,讓它拒絕服務。
3.2 DDOS
隨著計算機和網絡技術的發展,硬件設備的處理性能加速度增長,成本也變得非常低廉,網絡的快速發展更是讓帶寬、出入口節點寬度等大大的提升,這讓傳統的DoS攻擊很難湊效。
隨著這樣情況的出現,攻擊者研究出了新的攻擊手段,也就是DDoS。
DDoS是在傳統的DoS攻擊基礎之上產生的一種新的攻擊方式,即Distributed Denial Of Service,分布式拒絕服務攻擊。
如果說計算機與網絡的處理能力比以往加大了10倍的話(示例數據,沒有實質意義),那攻擊者使用10臺計算機同時進行攻擊呢?也就達到了可以讓目標拒絕服務的目的。簡單來說,DDoS就是利用更多的計算機來發起攻擊。
就技術實現方式來分析,分布式拒絕服務攻擊就是攻擊者利用入侵手段,控制幾百臺,或者成千上萬臺計算機(一般被控制的計算機叫做傀儡主機,或者口頭被網絡安全相關人員稱為“肉雞”),然后在這些計算機上安裝大量的DDoS程序。這些程序接受來自攻擊者的控制命令,攻擊者同時啟動全部傀儡主機向目標服務器發起拒絕服務攻擊,形成一個DoS攻擊群,猛烈的攻擊目標,這樣能極為暴力的將原本處理能力很強的目標服務器攻陷。
3.3 區別
通過上面的分析,可以看出DDoS與DoS的最大區別是數量級的關系,DoS相對于DDoS來說就像是一個個體,而DDoS是無數DoS的集合。另一方面,DDoS攻擊方式較為自動化,攻擊者可以把他的程序安裝到網絡中的多臺機器上,所采用的這種攻擊方式很難被攻擊對象察覺,直到攻擊者發下統一的攻擊命令,這些機器才同時發起進攻。可以說DDoS攻擊是由黑客集中控制發動的一組DoS攻擊的集合,現在這種方式被認為是最有效的攻擊形式,并且非常難以抵擋。