【文章內(nèi)容簡介】
。 其實地址空間缺乏并不單是亞洲存在,全世界都存在這樣的問題。所以現(xiàn)在世界各國都在積極的推動 IPv6 和下一代網(wǎng)絡的發(fā)展。 由于 IPv4的開發(fā)是在可信賴的網(wǎng)絡環(huán)境下進行的,缺乏安全方面考慮造成了 IPv4的先天不足。IPv6 在 IPv4的基礎上在安全方面做了很多的考慮,但 IPv6 的實現(xiàn)需要 硬件的支持,所以在短時間內(nèi)無法大范圍的推廣。所以在目前的情況下針對 IPv4 的攻擊仍然是網(wǎng)絡安全的主要威脅。本文在后續(xù)章節(jié)中所有的論述也是主要針對 IPv4。 9 2 TCP/IP 協(xié)議安全性分析 Inter 是基于 TCP/IP 協(xié)議的, TCP/IP 協(xié)議具有網(wǎng)絡互連能力強、網(wǎng)絡技術獨立,支持 FTP, TELNET, SMTP 和 HTTP 等標準應用協(xié)議等特點,是目前能夠滿足不同種計算機之間、異構網(wǎng)絡之間互連要求的網(wǎng)絡互連協(xié)議。但是,由于它主要考慮的是異種網(wǎng)間的互連問題,并沒有考慮安全 性,因此協(xié)議中存在著很多安全問題。另一方面由于大量重要的應用程序都以 TCP 作為它們的傳輸層協(xié)議,因此 TCP 的安全性問題又會給網(wǎng)絡帶來嚴重的后果和影響。 TCP/IP 協(xié)議主要安全隱患 TCP/IP 協(xié)議的安全隱患主要有 : ( 1) TCP/IP 協(xié)議數(shù)據(jù)流采用明文傳輸,因此數(shù)據(jù)信息很容易被竊聽、篡改和偽造。特別是在使用 FTP 和 TELNET 時,用戶的帳號、口令是明文傳輸,所以攻擊者可以截取含有用戶帳號、口令的數(shù)據(jù)包,進行攻擊,例如使用 SNIFFER 程序、 SNOOP 程序、網(wǎng)絡分析儀等。 ( 2) 源地址欺騙 (Source address spoofing), TCP/IP 協(xié)議是用 IP 地址來作為網(wǎng)絡節(jié)點的唯一標識,但是節(jié)點的 IP 地址又是不固定的,因此攻擊者可以直接修改節(jié)點的 IP 地址,冒充某個可信節(jié)點的 IP地址,進行攻擊。下面分別來舉例兩種源地址欺騙攻擊 [3]。 方式一:假設主機 A是攻擊主機,它偽裝成 B主機和 C主機對話。 A主機在發(fā)出數(shù)據(jù)包的時候,入侵者可以用軟件把源地址從 A主機的地址改成 B主機的地址。雖然 C 主機的數(shù)據(jù)包仍然會發(fā)送到B 主機而不是 A主機,但是這對于一些黑客來說無關緊要,他們不用看到結果就能 實施攻擊。 方式二:這是一種“中間人”式的欺騙。它會截獲目標主機返回給真實主機的數(shù)據(jù)包。這種欺騙下,攻擊主機可以和被攻擊主機進行完整的對話,入侵者也可以看到結果,即要能截獲返回的數(shù)據(jù)包。為此,攻擊主機需要做到:攻擊主機潛入目標主機和真實主機之間的路徑上,這在路徑的末段最容易做到。在中間是最難的,因為根據(jù) IP 網(wǎng)絡的路徑選擇特點,“中間”路徑的選擇變化是非常大的。在機器之間改變路徑,從而引導攻擊機器,這取決于網(wǎng)絡的拓撲結構以及你的網(wǎng)絡、遠程網(wǎng)絡和其他網(wǎng)絡之間的 ISP 使用的路由系統(tǒng),這可能十分容易,也可能十分困難 。 ( 3) 源路由選擇欺騙 (Source Routing spoofing),TCP/IP 協(xié)議中, IP 數(shù)據(jù)包為測試目的設置了一個選項 — IP Source Routing,該選項可以直接指明到達節(jié)點的路由,攻擊者可以利用這個選項進行欺騙,進行非法連接。攻擊者可以冒充某個可信節(jié)點的 IP 地址,構造一個通往某個服務器的直接路徑和返回的路徑,利用可信用戶作為通往服務器的路由中的最后一站,就可以向服務器發(fā)請求,對其進行攻擊。在 TCP/ IP 協(xié)議的兩個傳輸層協(xié)議 TCP 和 UDP 中,由于 UDP 是面向非連接的,因而沒有初始化的 連接建立過程,所以 UDP 更容易被欺騙。 ( 4) 路由選擇信息協(xié)議攻擊 (RIP Attacks) 。 RIP 協(xié)議用來在局域網(wǎng)中發(fā)布動態(tài)路由信息,它10 是為了在局域網(wǎng)中的節(jié)點提供一致路由選擇和可達性信息而設計的??墒歉鞴?jié)點對收到的信息是不檢查它的真實性的, TCP/IP 協(xié)議沒有提供這個功能。 ICMP 協(xié)議存在有安全缺口,攻擊者可利用 ICMP重定向報文破壞路由,并以此增強其竊聽能力。 ( 5) 鑒別攻擊 (Authentication Attacks). TCP/IP 協(xié)議只能以 IP 地址進行鑒別,而不能對節(jié)點上的用戶進行有效的身 份認證,因此服務器無法鑒別登錄用戶的身份有效性。目前主要依靠服務器軟件平臺提供的用戶控制機制,比如 UNIX系統(tǒng)采用用戶名、口令。雖然口令是密文存放在服務器上,但是由于口令是靜態(tài)的、明文傳輸?shù)?,所以無法抵御重傳和竊聽。而且在 UNIX 系統(tǒng)中常常將加密后的口令文件存放在一個普通用戶就可以讀的文件里,攻擊者也可以運行己準備好的口令破譯程序來破譯口令,對系統(tǒng)進行攻擊。 ( 6) TCP 序列號欺騙 (TCP Sequence number spoofing)。由于 TCP 序列號可以預測,因此攻擊者可以構造一個 TCP 包序列,對 網(wǎng)絡中的某個可信節(jié)點進行攻擊。 ( 7) TCP 序列號轟炸攻擊( TCP SYN Flooding Attack), 簡稱 SYN 攻擊( SYN Attack),又稱作拒絕服務攻擊。 TCP 是一個面向連接、可靠的傳輸層協(xié)議。黑客可以不斷向服務器發(fā)送連接請求,而又不返回應答包,使得服務器總處于等待狀態(tài),而無法釋放資源。 ( 8) IP 棧攻擊 利用操作系統(tǒng)缺陷,偽造某種數(shù)據(jù)包發(fā)到主機,導致目標主機 TCP/IP 協(xié)議棧鎖死,甚至系統(tǒng)崩潰。以 Linux上的一個實現(xiàn)為例來說明: Linux操作系統(tǒng)在它的 IP 數(shù)據(jù)包重裝模塊有一個嚴重的 錯誤,當 Linux收到一個 IP 包送到 IP 層進行組裝,以還原 IP 包,它將進入一個循環(huán)中,將列隊 的數(shù)據(jù)包的有效數(shù)據(jù)復制到一個新分配的緩沖區(qū)去。在程序中,檢查了每段數(shù)據(jù)區(qū)是否過長,但沒檢查有效數(shù)據(jù)長度是否過小。當表示有效數(shù)據(jù)長度的量變成了一個負數(shù)的時候( length0),系統(tǒng)不會進行檢查,結果是是將過多的數(shù)據(jù)復制到內(nèi)核中去。我們可以準備這樣的包,讓前后包中的“ fragment offset”字段交疊在一起,這樣計算出來的 length 值變成了一個負數(shù)。因為系統(tǒng)的計數(shù)器是一個反碼,這會造成一個非常大的數(shù)值。根據(jù)使用 的內(nèi)存管理機制不同,將會導致系統(tǒng)重啟或者停機。 針對 TCP/IP 安全漏洞進行攻擊的 理論分析 TCP/IP 協(xié)議的連接是通過三次握手實現(xiàn)的。圖 15 是 TCP/IP 連接的建立和撤消的過程。 關于連接的過程有一個非常形象的比喻叫做兩軍定理。 A軍和 B軍將敵人夾在了中間, A軍欲聯(lián)合 B 軍夾擊敵人,于是 A排出信使聯(lián)系 B軍。 B軍同意夾擊之后,信使返回 A軍??赡苡腥擞X得到了這里,聯(lián)絡過程已經(jīng)完成,可以發(fā)動攻擊了。其實不然,雖然 A 軍已經(jīng)知道 B 軍同意了夾擊,但是 B 軍卻不知道 A軍是否已經(jīng)知道自己同意了夾擊。所以信使需要再返回 B軍告訴 B軍, A軍已經(jīng)收到了信息,攻擊在這個時候才能確定的展開。 說到這里,問題也出現(xiàn)了。如果信使回到 A軍之后因為種種原因沒有再回到 B 軍那會出現(xiàn)什么11 樣的情況呢? B 軍會一直等待而不敢輕易發(fā)動進攻,因為他不確定 A 軍已經(jīng)得知 B 軍已經(jīng)同意夾擊計劃。將這個問題轉(zhuǎn)換到 TCP/IP 連接的過程中,這個問題就是這樣的: A主機向 B主機發(fā)出連接請求, B 主機返回同意連接請求并在內(nèi)存中開辟出一個緩存之后, A 主機卻不再向 B 主機返回確認信息。于是 B 主機將一直等待,處于“半連接”狀態(tài)直到超時。當大量這樣的數(shù)據(jù)包涌向某臺主機的時候, 受害主機會為了維持大量的這樣的半連接而耗盡資源。這便形成了一次 SYN flooder 攻擊。 主 機 B主 機 AS Y N s e q = XS Y N s e q = Y , A C K = X = + 1A C K = Y + 1 建立過程 主 機 A主 機 B發(fā) 送 F I N s e q = X接 收 F I N發(fā) 送 A C K = x + 1接 收 A C K接 收 F I N發(fā) 送 A C K = x + 1發(fā) 送 F I N s e q = X接 收 A C K 撤消過程 圖 21 TCP連接建立和撤消過程 TCP 連接的撤消過程使用改進的三次握手撤消連接。 TCP 連接是一個全雙工的,可以看作是兩個不同方向上的獨立的數(shù)據(jù)流傳輸。當某個應用程序通知本端 TCP 軟件,數(shù)據(jù)傳輸已完成時,該機器上的 TCP 軟件將撤消本方向的連接。為了撤消自己一放的連接, TCP 軟件首先將剩余數(shù)據(jù)傳輸完畢并確認報 文的返回,然后它發(fā)送一個帶 FIN 標志的報文給對方,接收方對 FIN 報文進行確認,并通知本方 TCP 應用程序停止接收數(shù)據(jù)。但是反方向上數(shù)據(jù)仍然可以發(fā)送,直到該方向上的連接也撤消。當兩個方向上的的連接都關閉以后,在該連接的兩個端點上的 TCP 軟件就刪除該連接的記錄。 ( 1) TCP/IP 狀態(tài)轉(zhuǎn)移圖和定時器 TCP 狀態(tài)轉(zhuǎn)移圖控制了一次連接的初始化、建立和終止,如 22 圖所示: 圖 22 由定義的狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移弧構成。 TCP 狀態(tài)轉(zhuǎn)移圖與定時器密切相關,不12 同的定時器對應于連接建立或 終止、流量控制和數(shù)據(jù)傳輸。幾類主要的定時器及其功能如下: ① 連接定時器:在連接建立階段,當發(fā)送了 SYN 包后,就啟動連接定時器。如果在 75 秒內(nèi)沒有收到應答,則放棄連接建立。 ② FINWAIT2 定時器:當連接從 FINWAIT1 狀態(tài)轉(zhuǎn)移到 FINWAIT2 狀態(tài)時,將一個FINWAIT2 定時器設置為 10 分鐘。如果在規(guī)定時間內(nèi)該連接沒有收到一個帶有置位 FIN 的 TCP 包,則定時器超時,再定時為 75 秒。如果在第二個時間段內(nèi)仍無 FIN 包到達,則放棄該連接。 ③ 維持連接定時器:其作用是預測性地檢測連 接的另一端是否仍為活動狀態(tài)。如果設置了SOKEEPALIVE 套接字選擇項,則 TCP 狀態(tài)是 ESTABLISHED 或 CLOSEWAIT 。 C L O S EL I S T E N S Y N S E N TS Y N R C V D E S T A D L I S H E D C L O S E W A I TL A S T A C KC L O S I N CF I N W A I T 1F I N W A I T 2 T I M E W A客 戶 機 正 常 運 轉(zhuǎn)服 務 器 正 常 運 轉(zhuǎn) 圖 22 TCP狀態(tài)轉(zhuǎn)移圖 ( 2) 網(wǎng)絡入侵方式 ① 偽造 IP 地址 入侵者使用假 IP 地址發(fā)送包,利用基于 IP 地址證實的應用程序聯(lián)接到目的主機。其結果是未授權的遠端用戶進入帶有防火墻的主機系統(tǒng)。 TCP 協(xié)議把通過連接而傳輸?shù)臄?shù)據(jù)看成是字節(jié)流,用一個 32 位整數(shù)對傳送的字節(jié)編號。初始序列號 (ISN)在 TCP 握手時 產(chǎn)生,產(chǎn)生機制與協(xié)議實現(xiàn)有關。攻擊者只要向目標主機發(fā)送一個連接請求,即可獲得上次連接的 ISN,再通過多次測量來回傳輸路徑,得到進攻主機到目標主機之間數(shù)據(jù)包傳送的來回時間 RTT。已知上次連接的 ISN 和 RTT,很容易就能預測下一次連接的 ISN。若攻擊者假冒信任主機向目標主機發(fā)出 TCP 連接,并預測到目標主機的TCP 序列號,攻擊者就能偽造有害數(shù)據(jù)包,使之被目標主機接受。 假設有兩臺主機 A, B 和入侵者控制的主機 C。假設 B 授予 A 某些特權,使得 A 能夠獲得對 B所執(zhí)行的一些操作。 C 的目標就是獲得與 A 相同的權利。為了 實現(xiàn)該目標, C 必須執(zhí)行兩步操作:13 首先,與 B 建立一個虛假連接;然后,阻止 A 向 B 報告網(wǎng)絡證實的通信。主機 C 必須假造 A 的 IP地址,從而使 B 相信從 C 發(fā)來的包的確是從 A發(fā)來的。 主機 C 偽造 IP 地址步驟如下:首先, C冒充 A,向主機 B 發(fā)送一個帶有隨機序列號的 SYN包。主機 B 響應,向主機 A 發(fā)送一個帶有應答號的 SYN+ACK 包、該應答號等于原序列號加 1。同時,主機 B 產(chǎn)生自己發(fā)送包序列號,并將其與應答號一起發(fā)送。為了完成三次握手,主機 C 需要向主機B 回送一個應答包,其應答號等于主機 B 向主機 A 發(fā)送的包序列號加 1 。假設主機 C 與 A 和 B 不同在一個子網(wǎng)內(nèi),則不能檢測到 B的包,主機 C只有算出 B 的序列號,才能創(chuàng)建 TCP 連接。其過程描述如下: CB: SYN(序列號 =M), SRC=A BA: SYN(序列號 =N), ACK(應答號 =M+1) CB: ACK(應答號 =N+1), SRC=A 同時,主機 C應該阻止主機 A響應主機 B 的包。為此, C可以等到主機 A因某種原因終止運行,或者阻塞主機 A 的操作系統(tǒng)協(xié)議部分,使它不能響應主機 B。一旦主機 C 完成了以上操作,它就可以向主機 B 發(fā)送命令。主機 B 將執(zhí)行這些命令,認為他 們是由合法主機 A發(fā)來的。 ② TCP 狀態(tài)轉(zhuǎn)移的問題 C L O S EL I S T E N S Y N S E N TS Y N R C V D E S T A D L I S H E D C L O S E W A I TL A S T A C KC L O S I N CF I N W A