閔 慧,李 鵬,劉鎮國
(1. 湖南信息職業技術學院軟件學院,湖南 長沙 410200;2. 湖南中醫藥大學信息科學與工程學院,湖南 長沙 410208)
TCP/IP模型作為當下最流行的網絡協議棧[1],是國際互聯網絡的基礎。由于在協議設計之初,對安全性的考慮不足,在TCP/IP協議棧中,絕大多數協議沒有提供必要的安全機制,例如不提供認證服務;明文傳輸,缺乏機密性保障;不提供抗抵賴服務;服務質量保障較差。因為其本身存在的這些脆弱性,導致各種攻擊手法層出不窮,例如基于應用層的DNS欺騙、基于傳輸層的TCP連接欺騙。本文將會對TCP/IP協議棧各層協議做簡要分析,并著重探究各層較為常見的網絡攻擊類型和其解決辦法。
TCP/IP協議在一定程度上參考了OSI的體系結構。共有四層,從下到上分別是網絡接入層、網絡層、傳輸層和應用層,如圖1所示。其中,應用層是 TCP/IP的頂層,它直接與用戶進行交互,通過套接字將主機進程需要的消息傳給下層,并通過進程尋址和五元組向目的主機的進程發起通信,常見協議有FTP、HTTP、SMTP等[2]。

圖1 TCP/IP 協議Fig.1 TCP/IP protocol
傳輸層為兩臺計算機之間的通信提供傳輸鏈路,主要協議為UDP和TCP。其中UDP是面向無連接協議,它不會引入建立連接的時延;TCP是面向連接的協議,它通過滑動窗口機制和指數加權平均移動來實現擁塞控制和定時器管理,這兩種協議分別適用在不同的場景。Internet層又稱為網絡層,它定義了數據包在網絡中轉發的機制,可以分為數據平面和控制平面,數據平面負責進行流量轉發,控制平面負責路由選擇,并且提供相關的路由算法,確保數據包高效、準確的發送到目的主機上。網絡接入層又稱為鏈路層,通常將它與實際的物理介質與硬件放在一起討論,鏈路層負責將數據劃分為一種幀格式,媒體訪問控制(MAC)協議定義了幀傳輸的規則,并通過二維奇偶檢驗,循環冗余檢測(CRC)編碼提供差錯檢測和糾正功能,向下交由物理硬件以比特流的形式進行數據轉發。主要協議有ARP,PPP[3]。
ARP病毒攻擊的工作原理是通過偽造通信雙方一端的IP地址或MAC地址,讓另一端誤以為該主機為正確主機從而達到欺騙目的。如圖2所示,當網絡中源主機A想和目的主機B進行通信,A會先廣播ARP請求報文,期望B能收到并返回給A自己的MAC地址。但由于報文采用的是廣播形式,因此攻擊者C在收到A的請求報文時會將自己的IP地址偽造成B的IP地址[4],這在ARP請求報文中可以很容易獲得,接著攻擊者C向A發送帶有B的IP地址,C的MAC地址的返回消息,讓A誤以為C就是合法的目的主機B,從而C就達到了盜取信息的目的。

圖2 ARP 病毒攻擊過程Fig.2 ARP virus attack process
RIP是一種基于距離(跳數)的路由選擇協議,它的作用是計算數據包在網絡中路由的最佳路徑,因為RIP基于跳數且規定了最大跳數不可以超過15,因此它只適用于中小型的網絡。基于RIP的攻擊實際上是攻擊網絡中路由器的路由表。因為RIP是基于UDP協議進行傳輸,而UDP是一種不可靠,不需要建立連接的傳輸層協議。因此運行著RIP協議的路由器會無條件的接受任何來自網路中的報文,包括一些非法的路由表更新報文。路由器在接受這些報文時會在沒有執行路由表更新命令的情況下改變自身的路由表[5]。從而導致該路由器的路由表紊亂,甚至可能影響該路由器的鄰接路由器,繼而導致整個網絡癱瘓,帶來嚴重的后果。
DNS(Domain name resolution)又稱域名解析協議,它用來將域名和IP地址進行相互轉換,從而讓用戶在上網的時候可以直接輸入域名而不是冗長繁瑣的IP地址。在DNS欺騙中,攻擊者通常會先攻擊DNS服務器并取而代之,并改變原先DNS服務器中的IP地址和域名的映射關系。當用戶訪問相應的域名時返回的實際上是一個錯誤的網頁,而攻擊者可以通過這個網頁向用戶植入病毒或直接展開攻擊。DNS欺騙的手段分為兩種[6],一種是篡改本地主機的 Hosts文件,Hosts文件實現的就是 DNS服務器的功能。例如將Hosts文件中的一個域名對應的IP地址改成本機的回環地址(127.0.0.1),這樣用戶在訪問這個域名時就無法到達想要的網頁。另一種是 DNS劫持,即劫持用戶使用的DNS服務器 ,通常來說黑客會將自己已經建立好的攻擊網站的 IP地址映射到用戶經常訪問的網站的域名,而該攻擊網站和原網站看上去相差無幾,這樣用戶即使被攻擊也毫不知情。以訪問www.baidu.com為例,攻擊過程如圖3所示。
雖然TCP協議是一種可靠的鏈路層協議,但是由于每臺主機的 IP地址在每次上網的時候都可能發生改變,因此攻擊者可以通過這個漏洞擾亂兩臺主機的TCP連接。TCP連接欺騙[7]中,攻擊者C會一直對主機A進行攻擊(例如Dos攻擊)使其癱瘓,從而阻止 A與 B進行通信,然后自己再偽造成主機A與B建立TCP連接。過程如下:

圖3 DNS 欺騙攻擊過程Fig.3 DNS spoofing attack process
C→B:SYN=1,seq=a
B→A:SYN=1,ACK=1,seq=b,ack=a+1
C→B:ACK=1,seq=a+1,ack=b+1
攻擊者C首先向 B發送連接請求報文,同步位SYN置為1,序列號seq為a。B收到請求報文后,向A發出確認報文,確認號ack為a+1,序號seq為b,由于A處于癱瘓中因此不會發送響應報文。C通過網絡嗅探工具得到B向A發送的ack和seq,對B發送確認報文,將ACK置為1,序號seq為a+1,確認號ack為b+1。這樣B和攻擊者C之間就直接建立了TCP連接,并可以直接向B發送指令,而B還認為指令是由合法主機A發送過來的,將執行這些命令。從而導致C可以任意地向B發送攻擊命令,致使B癱瘓。攻擊過程如圖4所示。
為了解決TCP/IP協議中存在的安全漏洞,常用的安全措施主要有以下幾種:
IPSec是一組用來在網絡層提高數據包傳輸安全的協議族統稱,它通過在原有的IP報文中加入一些特定的檢測頭來達到安全確認的目的。IPSec有兩種工作模式,分別是傳輸模式和隧道模式,前者適用于端到端(End to End),即兩臺主機之間的 IPSec通信,后者適用于站點到站點(Site to Site),即兩個網關之間的IPSec通信,IPSec由AH協議、ESP協議和一些復雜的安全驗證算法組成[8],這些基本的算法為 IPSec中的協議服務。下面將主要介紹AH和ESP兩個協議:

圖4 TCP 連接欺騙攻擊過程Fig.4 TCP connection spoofing attack process
(1)AH協議提供的安全服務
AH的工作模式是在每一個數據包中的IP報頭后添加一個AH頭,這個AH頭有自己獨特的字段用于提供安全服務,AH可以保證數據的完整性不被篡改,但不能防止數據被盜竊。AH使用的IP協議號是51,當IP報文的協議號部分為51時,代表IP頭后面是一個AH報頭,AH報頭結構如圖5所示。

圖5 AH 頭Fig.5 AH header

圖6 AH 的認證封裝過程Fig.6 AH authentication encapsulation process
AH提供的安全服務主要有數據源認證,加入一個雙方協商好的密文,來對對方身份以及數據的有效性進行驗證;第二個是數據完整性校驗,因為AH協議需要防止數據被非法篡改,因此該協議會通過引入一個單向 Hash函數來創建一個散列值或者摘要信息,將該散列值與文本結合向接收方傳輸,同時接受方用同樣的單向Hash函數對接受內容進行解密,驗證結果是否一致,以此來保護數據的完整性;第三個是防報文重放攻擊,所謂重放攻擊就是攻擊者雖然不知道加密過的數據包里面到底是什么,但是可以通過截取這個數據包再發給接受方從而使接收方無法判別哪個才是正確的發送者,而AH協議會校驗序列號字段中的數值是否重復過,若重復,則直接丟棄。圖 6展示了AH在不同模式下的認證封裝過程。
(2)ESP協議提供的安全服務
ESP與AH不同的是ESP會先把數據段加密,然后再存放到IP報文中,從而達到防止竊聽的目的。ESP除了在 IP報頭的后面會加上一個 ESP報頭以外,還會在報文最后加上一個ESP報尾,該報尾用來提供加密服務。這樣攻擊者即使獲取了該數據包,在沒解開ESP加密的情況下也無法獲知其中的信息。ESP報頭的結構如圖7所示。

圖7 ESP 頭Fig.7 ESP header
ESP提供的安全服務和 AH有所重合,ESP使用序列號字段來防止重放攻擊,ESP通常使用HMAC-MD5或HMAC-SHA-1算法對加密后的載荷進行 Hash計算來完成認證和保證數據完整性的功能。但因為ESP會把數據加密之后再傳輸,因此會提供保密性服務,在傳輸機密性數據的時候ESP有很大優勢。此外,在NAT模式下,由于AH會對IP地址也做Hash運算,因此在地址轉換之后AH的Hash值會被破壞,而ESP的IP協議號是50,在進行NAT轉換時沒有相應的TCP或UDP端口號的概念。為了使ESP能夠滿足NAT環境下的地址轉換,這時就需要引進一個新的方法,即在 ESP報文和 IP報頭之間加入一個新的UDP報頭,具體NAT轉換過程如圖8所示。
TLS協議工作在傳輸層,由于 TCP和 UDP都有可被利用的漏洞,因此它是為了解決傳輸層鏈路安全問題而出現的。TLS分為兩種協議,分別是TLS記錄協議和TLS握手協議。TLS記錄協議根據TLS握手協議協商的參數,對上層所交付的數據進行各種操作,從而使數據通過密文的形式傳輸,而接收方則通過解密的方式來接受數據。通過這種方式就可以大大加強數據傳輸的安全性。
另一種協議是TLS握手協議,他讓客戶端和服務端進行協商,確定一組用于數據傳輸加密的密鑰串,相互認證對方,這樣當攻擊者沒有通過密鑰認證時,就無法與另一端進行數據通信,具體握手過程如圖9所示。

圖8 IPSec穿越NAT的數據封裝Fig.8 Data encapsulation of IPSec traversing NAT
首先,客戶端向服務端發送ClientHello消息,其中含有一個客戶端生成的隨機數,我們假設為R1和可供選擇的版本號清單等信息;第二步,根據客戶端發來的Client Hello,服務端回復Server Hello消息,其中會根據客戶端發來的清單數據確定兩端通信將會使用的版本號,密碼套件,壓縮方式等等協議需要的重要信息,并產生一個服務端隨機數R2,當服務器認證時,服務器會發給客戶端自己的證書;第三步,當要求客戶端認證時,客戶端會先發送自己的證書,同時根據之前客戶端和服務器端產生的隨機數公用一種算法計算出密鑰。最后相互發送了 Finished消息后就代表握手結束,可以開始傳輸數據。

圖9 TLS 握手過程Fig.9 TLS handshake process
本文對 TCP/IP協議族中存在的問題和解決方法進行了歸納和分析。總的來說,TCP/IP上的安全問題主要集中于網絡層上的攻擊、傳輸層上的攻擊和應用層上的攻擊。攻擊者利用各種欺騙手段或強制攻擊使目的機癱瘓來盜取信息。對此,可以利用IPSec、SSL/TLS等安全架構在不同的協議層來保護數據傳輸的安全性。