|
|
介紹IP偽裝
在1980的時候就有學術性的文章提出ip偽裝的觀念,儘管有人知道這理論,不過要等到Robert Morris(他兒子寫了第一隻網路蠕蟲)發現TCP協定的一個安全性漏洞:序數預測(sequence prediction)。Stephen Bellovin在 Security Problems in the TCP/IP Protocol Suite這篇強調TCP/IP通訊協定設定問題的論文中深入的討論這個問題。另有一個 較不知名的攻擊: Kevin Mitnick的「聖誕節」破解了Tsutomu Shimomura的機器,他採用的就是IP偽裝和序號預測的技巧。 儘管這類攻擊因為服務被攻擊致死而減少了,偽裝依然可以有其它用途,安全管理者對這點依然相當重視。
Technical Discussion
要透澈的了解這些攻擊是怎麼發生的,我們就要回頭看看TCP/IP通訊協定這個組合。要了解這過程,對標頭和網路交換的基本了解是很重要的。
Internet protocol - IP
IP是OSI model第三層,也就是網路層的協定,它不是連結模式,意謂著交易的狀況是沒有資訊的,被用來路由網路上的封包。除此之外,沒有任何方式可以得知封包是否有被正確的傳送到目的地。
檢查IP標頭,我們知道前12個bytes(也就是標頭最上面那三列)包含封包的各種資訊。接下來的8個bytes( 接下來兩列),就是來源和目的地的IP位址。隨便找個工具,攻擊者就可以修改那些位址,特別是「來源位址」。特別值得注意的是每一筆資料都是獨立的,因為ip的狀態無從得知。好好記住這一點,下面我們檢視TCP的時候用的到。
Transmission Control Protocol - TCP
我們可以把IP想成是第四層(傳輸層)的路由外包,包含Transmission Control Protocol (TCP)。和IP不一樣的是,TCP的設計是連結導向的。這表示我們要先有一個TCP區塊的連結-經由3-way hanshake(SYN-SYN/ACK-ACK)-更新另一個進程-經由序數和確認碼。這溝通確保資料的可靠性,因為接收方在封包交換之後會傳送OK給傳送方。
由上可知TCP和IP的標頭截然不同,我們很在意TCP封包的前12 bytes,裏面有port和序列資訊。就像IP資訊,TCP封包可以經由軟體產生。來源和目的地的port一般來說看是在跑什麼網路程式(例如HTTP走80這個port)。現在我們了解到序數和確認碼對偽裝來說是很重要的,這一個欄位的資料可以確認封包是不是需要重送,序數則是目前封包第一位元的數字,和資料流是相關的。相對的,確認碼則包含了下一個封包預期的序數。這關係可以保證兩邊有收到正確的封包。和IP不一樣的是,每一個筆的交易狀態都被嚴密的監視著。
Consequences of the TCP/IP Design
我們綜覽了TCP/IP的格式,現在檢視它的必然性。很明顯的,要掩飾來源相當簡單,只要改IP標頭就好了 。用這技巧的原因相當簡單,下面的攻擊方式也都是採用這方法。另一個後果就是序數是可以預測的,這導致入侵者劫取連線或主機模擬。這方法建立在IP偽裝,一個假的的建線被建立。我們會在下面討論採用這種攻擊方式的各個分枝流派。
Spoofing Attacks
成功的使用 IP 偽裝的攻擊有一些變化,儘管一些相對的較久,可是有的和現今安全性議題還是相關。
Non-Blind Spoofing
這種攻擊發生在攻擊者與目標在同一網域中,封包中連續與確認號碼可以被監聽,這減少了正確地計算上的困難。這種偽裝最大的威脅就是攔截通訊,這可以藉由改變已經建立連結的資料流去實現,然後重新從攻擊的機器上以正確地連續與確認序號來建立連結。用這方法,攻擊者可以逃掉連線前的認證措施。
Blind Spoofing
這是更舊的攻擊法,因為所產生的連續與確認序號並不能到達目的地。為了防止這種情形發生,攻擊者傳送數個封包給被攻擊的機器,取得採樣的序數。過去機器採用簡單的技術產生序數,現在就不是這樣了。檢查封包和TCP連線就不難發現正確的公式。現在大部份的作業系統用亂數來產生序數,要預測變得比較難了。可是,如果序數被認同,資料依然可以傳送過去。幾年前,很多機器採用以主機為主的認證服務(如Rlogin)。一個精心設計的攻擊加在必要的資料上傳到系統(如:新的帳號),於是主機盲目的信任攻擊者,認為他可信,讓他全權讀取。
中間人攻擊
這兩種偽裝的方式都被稱為中間人攻擊。在這種攻擊方式,惡意的第三者中斷進行一般合法通訊的兩端,後第三者控制通訊流,在不被傳送者和接受者知情的情況下修改或消滅傳送出來的資訊。藉由這個方法攻擊者偽裝成原本被信任的傳送者,利用彼此的信任關係來愚弄受害者。
阻斷服務式攻擊
最難防範的攻擊之一:攻斷服務式攻擊(DoS)最常採用的手法就是ip偽裝的方式。因為駭客只關心頻寬和資源使用的情形,他們不管是不是可以完成交握(handshakes)和連線(transactions)。相反的,他們希望受害者在最短的時間內被大量的封包淹沒。為了讓攻擊的時效加長,他們偽裝來源的ip,讓追蹤和中斷 DoS盡可能的困難。當很多主機同時發動攻擊,傳送超量的流量,要在短時間內阻絕攻擊的挑戰性是很高的。
ip偽裝的錯誤觀念
雖然上面描述的攻擊有點過時,例如主機認證服務的連線攔劫,ip偽裝、DOS攻擊還是可以用網域掃描和偵測來預防的。然而,這方式不允許匿名使用網際網路,對不熟悉這例子的人來說事實上這是個誤解。任 何一種大流量以外的偽裝都是進階而且是有特殊用途的,例如躲避和連線攔劫。
捍衛偽裝攻擊
這裡有一些方法可以降低 IP spoofing 對你網路的危險:
在路由器作過濾
在網路進出的路由器上過濾進出的封包是你防衛偽裝很好的開始,你將需要維護一個存取控制表(access control list, ACL)可以封鎖往內介面上的虛擬IP。此外這個介面不應該允許來源是你內部網域的IP範圍,這是常被用的欺騙手段以規避防火牆。在往外的介面你應該限定你可信任的範圍,以防止內部網路的人送出偽裝的流量到網路上。
編碼和授權
編碼及認證的技術可以降低被偽裝攻擊的威脅,這兩個特色都有被包含到IPv6中,可以消除現有的偽裝攻擊。同時你應該取消所有以主機為認證根據的方法,如在同一網域的公有機器。確定適當的認證置於適當的地方以及使用安全(編碼)的通路。
Conclusion
IP Spoofing 是TCP/IP設計時就會有的問題並沒有一個好的解決方法。瞭解偽裝攻擊是如何做的並配合一些簡單的解決方法,可以幫助保護你的網路。
|
|