本文的目的在於向讀者解釋IP欺騙的實現方法和預防措施。它要求您掌握 有關UIIX和TCP/IP的少量知識。如果您沒有,也沒有關系,相信下面的說明能 給您以足夠的背景知識。
IP欺騙是適用於TCP/IP環境的一種復雜的技術攻擊,它由若干部分組成。 目前,在Internet領域中,它成為黑客攻擊時采用的一種重要手段,因此有必 要充分了解它的工作原理和防范措施;以充分保護自己的合法權益。
實際上,IP欺騙不是進攻的結果,而是進攻的手段。進攻實際上是信任關 系的破壞。然而,在本文中,IP欺騙將被看作是涉及到的整個攻擊,對於利用IP 欺騙建立起來的虛假信任關系進行破壞的其它行為不作為我們討論的內容。 本文將詳盡地解釋攻擊的全過程。包括有關的操作系統與網絡信息。
背景知識(術語說明)
A:表示目標主機
B:表示對於A來說,可信任的主機
X:表示不能到達的主機
Z:表示進攻主機
1(2):主機1化裝成主機2
圖示符號定義
本文中有若干圖示,它們將類比以下示例進行解釋:
時間序列 主機A 控制 主機B
1 A --SYN--> B
時間序列;時間流逝的單位,可以無究細化。一般認為是很小的單位, 表示事件發生的先後順序。
主機A:參與一次TCP對話的機器。
控制:顯示有關TCP控制字段頭部的控制字符和該字段的流動方向。
主機B:參與一次TCP對話的機器。
這個圖示中,在第一參考時間點上主機A發送TCP字段給主機B,控制字段中的 SYN控制位將作為該TCP字段的主要信息。除非特別說明,我們一般不關心TCP 字段中的數據部分。
信任關系
在Unix領域中,信任關系能夠很容易得到。假如您在主機A和B上各有一個賬戶 ,您在使用當中發現,在主機A上使用時需要輸入在A上的相應帳戶,在主機B上 使用時必須輸入在B上的帳戶,主機A和B把您當作兩個互不相關的用戶,顯然有 些不便。為了減少這種不便,您可以在主機A和主機B中建立起兩個帳戶的相互信 任關系,在主機A和主機B上您的home目錄中創建.rhosts文件.從主機A上, 在您的home目錄中輸入'e-cho" busername"> ~/.rhosts';從主機B上,在您的 home目錄中輸入'echo" A username">~/.rhosts'.至此,您能毫無阻礙地使用 任何以r*開頭的遠程調用命令,如:rlogin,rcall,rsh等,而無口令驗證的 煩惱。這些命令將允計以地址為基礎的驗證,或者允許或者拒絕以IP地址為基礎 的存取服務。
Rlogin
Rlogin是一個簡單的客戶/服務器程序,它利用TCP傳輸。Rlogin允許用戶從一台 主機登錄到另一台主機上,並且,如果目標主機信任它,Rlogin將允許在不應答 口令的情況下使用目標主機上的資源,安全對外開放證完全是基於源主機的IP 地址,因此,根據以上所舉的例子,我們能利用Rlogin來從B遠程登錄到A,而且 不會被提示輸入口令,
lnternet協議(IP)
IP是TCP/IP協議組中非面向連接、非可靠傳輸的網絡協議。它由兩個數32bit的 頭字段提供地址信息。IP數據包占TCP/IP協議網絡流量中的很大部分,可以說明 最為繁書記的部分。IP的工作在於在網絡環境中發送數據包,它不提供保證 可靠性的任何機制,對於可靠性的要求,由於層協議來完成。IP只是發送數據包 ,並且保證它的完整性。如果不能收到完整的IP數據包,IP會向源地址發送一個 ICMP錯誤信息,希望重新處理。然而這個包也可能丟失(ICMP是網際控制消息 協議,Internet Control Message Protocol,它是用於根據網絡條件保證數據 傳送的協議,主要是向IP層或其它層發送不同的錯誤信息)。由於IP是非面向 連接的,所以不保持任何連接狀態的信息。每個IP數據包被松散地發送出去而 不關心前一個和後一個數據包的情況。由此我們不難看出,可以對IP堆本進行 修改,在源地址和目的地址中放入任意滿足要求的IP地址,也就是說,提供 虛假的IP地址。
傳輸控制協議(TCP)
TCP是在TCP/IP協議組中面向邊接、提供可靠傳輸的協議。面向連接意味著參 與對話的兩個主機必須首先建立起連接,然後才能進行數據交換。可靠性是由 數據包中的多位控制字來提供的,但是,其中僅僅有兩個是與我們的討論有關。 它們是數據序列和數據確認,分別有SYN和ACK來表示。TCP向每一個數據字節 分配一個序列號,並且可以向已成功接收的、源地址所發送的數據包表示確認 (目的地址ACK所確認的數據包序列是源地址的數據包序列,而不是自己發送 的數據包序列(。ACK在確認的同時還攜帶也下一個期望獲得的數據序列號。 顯然,TCP提供的這種可靠性相對於IP來說更難於愚弄。
序列編號、確認和其它標志信息
由於TCP是基於可靠性的,它能夠提供處理數據包丟失,重復或是順序率亂 等不良情況的機制實際上,通過向所傳送出的所有字節分配序列編號, 並且期待接收端對發送端所發出的數據提供收旋確認,TCP就能保證可靠的傳送。 接收端利用序列號確保數據的先後順序,除去重復的數據包。TCP序列編號可以 看作是否32位的計數器。它們從0至此2/32-1排列。每一個TCP連接 (由一定的標未位來表示)交換的數據都是順序編號的。在TCPA數據包中定義 序列號(SYN)的標示位位於數據段的前端。確認位(ACK)對所接收的數據 進行確認,並且指出下一個期待接收的數據序列號。
TCP通過滑動窗口聽要領來進行流量控制。設想在發送端發送數據的速度很快 而接收端接收速度卻很慢的情況下,為了保證數據不丟失,顯然需要進行流量 控制協調好通信雙方的工作節奏。所謂滑動窗口,可以理解成接收端所能提供 的緩沖區大小。TCP利用一個滑動的窗口來告訴發送端對它所發送的數據能提供 多大的緩沖區。由於窗口由不得16位B99v所定義,所以接收端TCP能最大提供 65535個字節的緩沖。由此,可以利用窗口大小和第一個數據的序列號計算出 最大可接收的數據序列號。
其它TCP標示位有RST(連接復位,Reset the connection)、PSH (壓入功能,Push function)如果RST被接收,TCP連接將立即斷開。 RST通常在接收端接收到一個與當前連接不相關的數據包時被發送。 有些時候,TCP模塊需要立即傳送數據而不能等整段都充滿時再傳。 一個高層的進程將會觸發在TCP頭部的PSH標示,並且告訴TCPA模塊立即 將所有排列好的數據發給數據接收端。FIN表示一個應用連接結束。 當接收端接收到FIN時,確認它,認為將接收不到任何數據了。
TCP連接的建立
為了利用TCP連接交換數據,主機間首先必須建立一個連接。TCP建立連接時 可以分為3個步驟,稱為三步握手法。如果主機A運行rlogin客戶程序, 並且希望連接到主機B上的rlogin daemon 服務器程序上,連接過程如圖1所示。
1 A ---SYN---> B
2 A <--SYN/ACK--- B
3 A ---ACK---> B
圖一
需要提醒讀者的是,主機A和B的TCP模塊分別使用自己的序列編號。在時刻1時, 客戶端通過設置標志位SYN=1告訴服務器它需要建立連接。同時,客戶端在其 TCP頭中的序列號領域SEQ放置了它的初始序列號(ISN),並且告訴服務器序 列號標示域是有效的,應該被檢查。在時刻2時,服務器端在接收了上面的 SYN後,作出的反應是將自己的ISN和對客戶端的ACKA發向客戶端並且千知 下一個期待獲得的數據序列號是(ISN+1)。客戶端在第一流時刻,對服務器 的ISN進行確認。這時,數據傳輸就可以進行了。
ISN與序列號的遞增
了解序數編號如何選擇初始序列號和如何根據時間變化是很重要的。似乎 應該有這種情況,當主機啟動後序列編號初始化為1,但實際上並非如此。 初始序列號是由tcp_init函數確定的。ISN每秒增加工廠128000,如果有連接 出現,每次連接將反計數器的數值增加64000。很顯然,這使得用於表示ISN的 32位計數器在沒有連接的情況下每9.32小時復位一次。之所以這樣,是因為 這樣有利於最大限度地減少舊有連接的信息干擾當前連接的機會。這裡運用了 望2MSL等待時間的概念(不在本文討論的范圍之內。)如果初始序列號是 隨意選擇的,那麼不能保證現有序列號是不同於先前的。假設有這樣一種情況, 在一個路由回路中的數據包最終跳出了循環,回到了“舊有”的連接 (此時其實是不同於前者的現有連接(,顯然會發生對現有連接的干擾。
端口號
為了提供對TCP模塊的並行訪問,TCP提供了叫做端口的用戶接口。端口被 操作系統內核利用來標示不同的網絡進程,也就是嚴格區分傳輸層入口的標示 (就是說,IP不關心他們的存在)。TCP端口與IP地址一起提供網絡端到端的 通信。事實上,在任何時刻任何Internet連接都能由4個要素來措述:源IP地址、 源地址端口號、目的IP地址和目的地址端口號。服務器程序一般被綁定在標准 的端口號上,便如,rlogin daemon 被綁定在TCP 513的端口。
IP欺騙
IP欺騙由若干步驟組成,這裡先簡要地措述一下,隨後再做詳盡地解釋。 先做以下假定:首先,目標主機已經選一。其次,信任模式已被發現, 並找到了一個被目標主機信任的主機。黑客為了進行IP欺騙,進行以下工作: 使得被信任的主機喪失工作能力,同時采樣目標主機發出的TCP序列號, 猜測出它的數據序列號。然後,偽裝成被信任的主機,同時建立起與目標 主機基於地址驗證的應用連接。如果成功,黑客可以使用一種簡單的命令 放置一個系統後門,以進行非授權操作。
IP 欺騙是一種不光彩的進攻
一個經常被忽略,但卻是非常關鍵的事實就是IP欺騙是不光彩的進攻。 進攻者將取代真正被信任的主機,從而破壞目標主機的安全體系。黑客常常 利用如下所措述的方法使得真正被信任的主機喪失工作能力。安全防范程度 不高的主機在它正在和一個可以信賴的主機通信時,處於Internet某個陰暗 角落的一個攻擊者實際上是可以使真正被信任的主機處於停頓狀態,而自己 大量模信心它的數據包,將之發向目標主機。可悲的是目標主機全然沒有 感覺。