TCP安全問題淺析
TCP/IP協議定義
協議是互相通信的計算機雙方必須共同遵從的一組約定。TCP/IP(傳輸控制協議/網際協議)就是這樣的約定,它規定了計算機之間互相通信的方法。TCP/IP是為了使接入因特網的異種網絡、不同設備之間能夠進行正常的數據通訊,而預先制定的一簇大家共同遵守的格式和約定。該協議是美國國防部高級研究計劃署為簡歷ARPANET開發的,在這個協議集中,兩個最知名的協議就是傳輸控制協議(TCP, Transfer Contorl Protocol)和網際協議(IP,Internet Protocol),故而整個協議集被稱為TCP/IP。之所以說TCP/IP是一個協議簇,是因為TCP/IP包括了TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等許多協議,對因特網中主機的尋址方式、主機的命名機制、信息的傳輸規則,以及各種各樣的服務功能均做了詳細約定,這些約定一起稱為TCP/IP。
TCP/IP協議和開放系統互連參考模型一樣,是一個分層結構。協議的分層使得各層的任務和目的十分明確,這樣有利于軟件編寫和通信控制。TCP/IP協議分為4層,由下至上分別是網路接口層、網際層、傳輸層和應用層,如圖1-1所示
圖1-1 TCP/IP 協議層次圖
1.2 TCP/IP協議的主要特點
(1)開放的協議標準,可以免費使用,并且獨立于特定的計算機硬件與操作系統;
(2)獨立于特定的網絡硬件,可以運行在局域網、廣域網,更適用于互聯網中;
(3)統一的網絡地址分配方案,使得整個TCP/IP設備在網中都具有惟一的地址;
(4)標準化的高層協議,可以提供多種可靠的用戶服務。
1.3 TCP/IP協議的總體概況
目前在Internet上使用的是TCP/IP協議。TCP/IP協議叫做傳輸控制/網際協議,它是Internet國際互聯網絡的基礎。TCP/IP是網絡中使用的基本的通信協議。其中IP(Internet Protocol)全名為“網際互連協議”,它是為計算機網絡相互連接進行通信而設計的協議。TCP(Transfer Control Protocol)是傳輸控制協議。TCP/IP協議是能夠使連接到網上的所有計算機網絡實現相互通信的一套規則,正是因為有了TCP/IP協議,因特網才得以迅速發展成為世界上最大的、開放的計算機通信網絡。
從表面名字上看TCP/IP包括兩個協議,傳輸控制協議(TCP)和互聯網際協議(IP),其實TCP/IP實際上是一組協議的集合,它包括了上百個各種功能的協議。如:遠程登錄、文件傳輸和電子郵件等等,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。IP協議之所以能使各種網絡互聯起來是由于它把各種不同的“幀”統一轉換成“IP數據報”格式,這種轉換是因特網的一個最重要的特點。所以IP協議使各種計算機網絡都能在因特網上實現互通,即具有“開放性”的特點。TCP/IP協議的基本傳輸單位是數據包(datagram)。TCP協議負責把數據分成若干個數據包,并給每個數據包加上包頭,包頭上有相應的編號,以保證在數據接收端能將數據還原為原來的格式,IP協議在每個包頭上還要加上接收端主機地址,這樣數據通過路由器中的MAC地址來確定數據的流向,如果傳輸過程中出現數據丟失,數據失真等情況,TCP協議會自動要求數據重新傳輸,并重新組。。總之,IP協議保證數據的傳輸,而TCP協議保證數據傳輸的質量。TCP/IP協議數據的傳輸基于TCP/IP協議的4層結構:應用層、傳輸層、網絡層、接口層。
各協議層存在的安全漏洞
2.1 鏈路層存在的安全漏洞
我們知道,在以太網中,信道是共享的,任何主機發送的每一個以太網幀都會到達別的與該主機處于同一網段的所有主機的以太網接口,一般地,CSMA/CD協議使以太網接口在檢測到數據幀不屬于自己時,就把它忽略,不會把它發送到上層協議(如ARP、RARP層或IP層)。如果我們對其稍做設置或修改,就可以使一個以太網接口接收不屬于它的數據幀。例如有的實現可以使用雜錯接點,即能接收所有數據幀的機器節點。解決該漏洞的對策是:網絡分段、利用交換器,動態集線器和橋等設備對數據流進行限制、加密(采用一次性口令技術)和禁用雜錯接點。
2.2 網絡層漏洞
幾乎所有的基于TCP/IP的機器都會對ICMP echo請求進行響應。所以如果一個敵意主機同時運行很多個ping命令向一個服務器發送超過其處理能力的ICMP echo請求時,就可以淹沒該服務器使其拒絕其他的服務。另外,ping命令可以在得到允許的網絡中建立秘密通道從而可以在被攻擊系統中開后門進行方便的攻擊,如收集目標上的信息并進行秘密通信等。解決該漏洞的措施是拒絕網絡上的所有ICMP echo響應。
2.3 IP漏洞
IP包一旦從網絡中發送出去,源IP地址就幾乎不用,僅在中間路由器因某種原因丟棄它或到達目標端后,才被使用。這使得一個主機可以使用別的主機的IP地址發送IP包,只要它能把這類IP包放到網絡上就可以。因而如果攻擊者把自己的主機偽裝成被目標主機信任的友好主機,即把發送的IP包中的源IP地址改成被信任的友好主機的IP地址,利用主機間的信任關系(Unix網絡軟件的開發者發明的術語)和這種信任關系的實際認證中存在的脆弱性(只通過IP確認),就可以對信任主機進行攻擊。注意,其中所說的信任關系是指一個被授權的主機可以對信任主機進行方便的訪問。所有的r*命令都采用信任主機方案,所以一個攻擊主機把自己的IP改為被信任主機的IP,就可以連接到信任主機并能利用r*命令開后門達到攻擊的目的。解決這個問題的一個辦法是,讓路由器拒絕接收來自網絡外部的IP地址與本地某一主機的IP地址相同的IP包的進入。
2.4 ARP欺騙
ARP協議在對IP地址進行解析時,利用ARP緩存(也叫ARP表)來做。ARP緩存的每一條目保存有IP地址到物理地址的映射。如果在ARP表中沒有這樣的對應條目,ARP協議會廣播ARP請求,獲得對應于那個IP地址的物理地址,并把該對應關系加入到ARP表中。ARP表中的每一個條目都有一個計時器,如果計時器過期,該條目就無效,因而被從緩存中刪除。顯然,如果攻擊者暫時使用不工作的主機的IP地址,就可以偽造IP-物理地址對應關系對,把自己偽裝成象那個暫時不使用的主機一樣。克服此問題的方法是,讓硬件地址常駐內存,并可以用ARP命令手工加入(特權用戶才可以那樣做);也可以通過向RARP服務器詢問來檢查客戶的ARP欺騙。因為RARP服務器保留著網絡中硬件地址和 IP的相關信息。
2.5 路由欺騙
在路由協議中,主機利用重定向報文來改變或優化路由。如果一個路由器發送非法的重定向報文,就可以偽造路由表,錯誤引導非本地的數據報。另外,各個路由器都會定期向其相鄰的路由器廣播路由信息,如果使用RIP特權的主機的520端口廣播非法路由信息,也可以達到路由欺騙的目的。解決這些問題的辦法有,通過設置主機忽略重定向信息可以防止路由欺騙;禁止路由器被動使用RIP和限制被動使用RIP的范圍。
2.6 DNS欺騙
網絡上的所有主機都信任DNS服務器,如果DNS服務器中的數據被攻擊者破壞,就可以進行DNS欺騙。
2.7 攔截TCP連接
攻擊者可以使TCP連接的兩端進入不同步狀態,入侵者主機向兩端發送偽造的數據包。冒充被信任主機建立TCP連接,用SYN淹沒被信任的主機,并猜測3步握手中的響應(建立多個連接到信任主機的TCP連接,獲得初始序列號ISN(Initial Serial Number)和RTT,然后猜測響應的ISN,因為序列號每隔半秒加64000,每建立一個連接加64000)。預防方法:使所有的r*命令失效,讓路由器拒絕來自外面的與本地主機有相同的IP地址的包。RARP查詢可用來發現與目標服務器處在同一物理網絡的主機的攻擊。另外ISN攻擊可通過讓每一個連接的ISN隨機分配配合每隔半秒加64000來防止。
2.8 使用TCP/SYN報文段淹沒服務器
利用TCP建立連接的3步驟的缺點和服務器端口允許的連接數量的限制,竊取不可達IP地址作為源IP地址,使得服務器端得不到ACK而使連接處于半開狀態,從而阻止服務器響應響應別的連接請求。盡管半開的連接會被過期而關閉的,但只要攻擊系統發送的spoofed SYN請求的速度比過期的快就可以達到攻擊的目的。這種攻擊的方法一直是一種重要的攻擊ISP(Internet Service Provider)的方法,這種攻擊并不會損害服務,而是使服務能力削弱。解決這種攻擊的辦法是,給Unix內核加一個補丁程序或使用一些工具對內核進行配置。一般的做法是,使允許的半開連接的數量增加,允許連接處于半開狀態的時間縮短。但這些并不能從根本上解決這些問題。實際上在系統的內存中有一個專門的隊列包含所有的半開連接,這個隊列的大小是有限的,因而只要有意使服務器建立過多的半開連接就可以使服務器的這個隊列溢出,從而無法響應其他客戶的連接請求。
關于TCP/IP協議族存在的脆弱性剖析
3.1 TCP/IP協議族存在脆弱性
IP層的主要曲線是缺乏有效的安全認證和保密機制,其中最主要的因素就是IP地址問題。TCP/IP協議用IP地址來作為網絡節點的惟一標識,許多 TCP/IP服務,包括Berkeley中的R命令、NFS、X Window等都是基于IP地址對用戶進行認證和授權。當前TCP/IP網絡的安全機制主要是基于IP地址的包過濾(Packet Filtering)和認證(Authentication)技術,它的有效性體現在可以根據IP包中的源IP地址判斷數據的真實性和安全性。然而IP地址存在許多問題,協議的最大缺點就是缺乏對IP地址的保護,缺乏對IP包中源IP地址真實性的認證機制與保密措施。這也就是引起整個TCP/IP協議不安全的根本所在。
由于UDP是基于IP協議之上的,TCP分段和UDP協議數據包是封裝在IP包中在網絡上傳輸的,因此同樣面臨IP層所遇到的安全威脅。現在人們一直在想辦法解決,卻仍然無法避免的就是根據TCP連接建立時“三次握手”機制的攻擊。
3.2 應用服務不容樂觀
3.2.1 文件傳輸協議
FTP經久不衰的原因在于它可以在互聯網上進行與平臺無關的數據傳輸,它基于一個客戶機/服務器架構。FTP 將通過兩個信道(端口)傳輸,一個傳輸數據(TCP 端口 20),另一個傳輸控制信息(TCP 端口 21)。在控制信道之上,雙方(客戶機和服務器)交換用于發起數據傳輸的命令。一個 FTP 連接包含4個步驟:用戶鑒權→建立控制信道→建立數據信道→關閉連接。FTP 的連接控制使用 TCP (Transmission Control Protocol, 傳輸控制協議),它保障了數據的可靠傳輸。因此,FTP 在數據傳輸中不需要關心分組丟失和數據錯誤檢測。
匿名FTP作為互聯網上廣泛應用的服務,安全等級的低下受到了黑客的頻繁光顧。匿名FTP 是真的匿名,并沒有記錄誰請求了什么信息,誰下載了什么文件,上傳了什么東西(有可能是木馬)。FTP存在著致命的安全缺陷,FTP使用標準的用戶名和口令作為身份驗證,缺乏有效的訪問權限的控制機制,而其口令和密碼的傳輸也都是明文的方式。
3.2.2 Web服務
Web服務器位于宿主基礎結構的前端,它與Internet直接相連,負責接收來自客戶端的請求,創建動態Web頁并響應請求數據。最初WWW服務只提供靜態的HTML頁面,為改變人們對網絡互動請求的愿望,開始引入了CGI程序,CGI程序讓主頁活動起來。CGI程序可以接收用戶的輸入信息,一般用戶是通過表格把輸入信息傳給CGI程序的,然后CGI程序可以根據用戶的要求進行一些處理,一般情況下會生成一個HTML文件,并傳回給用戶。很多CGI 程序都存在安全漏洞,很容易被黑客利用做一些非法的事情。現在很多人在編寫CGI程序時,可能對CGI軟件包中的安全漏洞并不了解,而且大多數情況下不會重新編寫程序的所有部分,只是對其加以適當的修改,這樣很多CGI程序就不可避免的具有相同的安全漏洞。很多 SQL Server 開發人員并沒有在代碼編寫開始的時候就從安全防護基礎開始,這樣就無法確保您開發的代碼的安全性,其結果就造成了無法將應用程序的運行控制在所需的最低權限之內。
3.3 提高網絡可信度
前面的IPv4存在的弊端,很多安全防范技術被忽略了,它不可避免地被新一代技術IPv6取代。IPsec安全協議就是事后 發展的一種協議(如圖3-1),而NAT(網絡地址轉換,Network Address Translation)解決了IP地址短缺的問題,卻增加了安全風險,使真正的端到端的安全應用難以實現。端到端安全性的兩個基本組件——鑒權和加密都是IPv6協議的集成組件;而在IPv4中,它們只是附加組件,因此,采用IPv6安全性會更加簡便、一致。
在現在的網絡環境中,尤其是園區網當中,由于不存在NAT地址轉換的問題,所以IPSec具備允許部署可信計算基礎架構的基本特征。IPSec數據包驗證能夠確保整個IP報頭、下一層協議(例如TCP、UPD或ICMP)報頭以及數據包有效負載的數據完整性。 華夏網管ofAdmin.Com
另外,針對數據包的單向Hash算法用以提供校驗和。通信發起方計算校驗和并在發送之前將其附加到數據包中;響應方則在收到數據包后為其計算校驗和。如果響應方所計算出的校驗和與數據包中附帶的校驗和完全匹配,則證明數據包在傳輸過程中未被修改。校驗和的單向計算特性意味著其取值無法在傳輸過程中進行修改,這也就保證了端到端的數據傳輸過程的可信程度。
TCP/IP狀態轉移
4.1 TCP狀態轉移圖和定時器
應于連接建立或終止、流量控制和數據傳輸。幾類主要的定時器及其功能如下TCP狀態轉移圖控制了一次連接的初始化、建立和終止,該圖由定義的狀態以及這些狀態之間的轉移弧構成。TCP狀態轉移圖與定時器密切相關,不同的定時器:
①連接定時器:在連接建立階段,當發送了SYN包后,就啟動連接定時器。如果在75秒內沒有收到應答,則放棄連接建立。
②FIN-WAIT-2定時器:當連接從FIN-WAIT-1狀態轉移到FIN-WAIT-2狀態時,將一個 FIN-WAIT-2定時器設置為10分鐘。如果在規定時間內該連接沒有收到一個帶有置位FIN的TCP包,則定時器超時,再定時為75秒。如果在該時間段內仍無FIN包到達,則放棄該連接。
③TIME-WAIT定時器:當連接進入TIME-WAIT狀態時,該定時器被激活。當定時器超時時,與該連接相關的內核數據塊被刪除,連接終止。
④維持連接定時器:其作用是預測性地檢測連接的另一端是否仍為活動狀態。如果設置了SO-KEEPALIVE套接字選擇項,則TCP機狀態是ESTABLISHED或CLOSE-WAIT。
4.2 網絡入侵方式
4.2.1 偽造IP地址
入侵者使用假IP地址發送包,利用基于IP地址證實的應用程序。其結果是未授權的遠端用戶進入帶有防火墻的主機系統。
假設有兩臺主機A、B和入侵者控制的主機X。假設B授予A某些特權,使得A能夠獲得B所執行的一些操作。X的目標就是得到與B相同的權利。為了實現該目標,X必須執行兩步操作:首先,與B建立一個虛假連接;然后,阻止A向B報告網絡證實系統的問題。主機X必須假造A的IP地址,從而使B相信從X發來的包的確是從A發來的。
我們同時假設主機A和B之間的通信遵守TCP/IP的三次握手機制。握手方法是:
A→:SYN(序列號=M)
B→A:SYN(序列號=N),ACK(應答序號=M+1)
A→B:ACK(應答序號=N+1)
主機X偽造IP地址步驟如下:首先,X冒充A,向主機B發送一個帶有隨機序列號的SYN包。主機B響應,向主機A發送一個帶有應答號的SYN+ACK包、該應答號等于原序列號加1。同時,主機B產生自己發送包序列號,并將其與應答號一起發送。為了完成三次握手,主機X需要向主機B回送一個應答包,其應答號等于主機B向主機A發送的包序列號加1。假設主機X與A和B不同在一個子網內,則不能檢測到B的包,主機X只有算出B的序列號,才能創建TCP連接。其過程描述如下:
X→B:SYN(序列號=M),SRC=A
B→A:SYN(序列號=N),ACK(應答號=M+1)
X→B:ACK(應答號=N+1),SRC=A
同時,主機X應該阻止主機A響應主機B的包。為此,X可以等到主機A因某種原因終止運行,或者阻塞主機A的操作系統協議部分,使它不能響應主機B。 一旦主機X完成了以上操作,它就可以向主機B發送命令。主機B將執行這些命令,認為他們是由合法主機A發來的。
4.2.2 TCP狀態轉移的問題
上述的入侵過程,主機X是如何阻止主機A向主機B發送響應在的,主機調通過發送一系列的SYN包,但不讓A向調發送SYN-ACK包而中止主機A的登錄端口。如前所述,TCP維持一個連接建立定時器。如果在規定時間內(通常為75秒)不能建立連接,則TCP將重置連接。在前面的例子中,服務器端口是無法在75秒內作出響應的。
下面我們來討論一下主機X和主機A之間相互發送的包序列。X向A發送一個包,其SYN位和FIN位置位,A向X發送ACK包作為響應: X→A:SYN FIN(系列號=M)A→X:ACK(應答序號=M+1)從上面的狀態轉移可以看出,A開始處于監聽(LISTEN)狀態。當它收到來自X的包后,就開始處理這個包。值得注意的是,在TCP協議中,關于如何處理SYN和FIN同時置位的包并未作出明確的規定。我們假設它首先處理SYN標志位,轉移到SYN-RCVD狀態。然后再處理FIN標志位,轉移到CLOSE-WAIT狀態。如果前一個狀態是ESTABLISHED,那么轉移到CLOSE-WAIT狀態就是正常轉移。但是,TCP協議中并未對從SYN-RCVD狀態到CLOSE-WAIT狀態的轉移作出定義。但在幾種TCP應用程序中都有這樣的轉移,例如開放系統SUN OS4.2, SUR4和ULTRX4.3
因此,在這些TCP應用程序中存在一條TCP協議中未作定義的從狀態SYN-RCVD到狀態CLOSE-WAIT的轉移弧,在上述入侵例子中,由于三次握手沒能徹底完成,因此并未真正建立TCP連接,相應的網絡應用程序并未從核心內獲得連接。但是,主機A的TCP機處CLOSE-WAIT狀態,因此它可以向X發送一個FIN包終止連接。這個半開放連接保留在套接字偵聽隊列中,而且應用進程不發送任何幫助TCP執行狀態轉移的消息。因此,主機A的TCP機被鎖在了CL0SE-WAIT狀態。如果維持活動定時器特征被使用,通常2小時后TCP將會重置連接并轉移到CLOSED狀態。當TCP機收到來自對等主機的RST時,就從TABLISHED,FINWAIT-1和FIN-WAIT-2狀態轉移到CLOSED狀態。這些轉移是很重要的,因為它們重置TCP機且中斷網絡連接。但是,由于到達的數據段只根據源IP地址和當前隊列窗口號來證實。因此入侵者可以假裝成已建立了合法連接的一個主機,然后向另一臺主機發送一個帶有適當序列號的RST段,這樣就可以終止連接了!
從上面的分析我們可以看到幾種TCP應用程序中都存在外部狀態轉移。這會給系統帶來嚴重的安全性問題。
4.2.3 定時器問題
正如前文所述,一旦進入連接建立過程,則啟動連接定時器。如果在規定時間內不能建立連接,則TCP機回到CLOSED狀態。
我們來分析一下主機A和主機X的例子。主機A向主機X發送一個SYN包,期待著回應一個SYN-ACK包。假設幾乎同時,主機X想與主機A建立連接,向A發送一個SYN包。A和X在收到對方的SYN包后都向對方發送一個SYN-ACK包。當都收到對方的SYN-ACK包后,就可認為連接已建立。在本文中,假設當主機收到對方的SYN包后,就關閉連接建立定時器。
X→A:SYN(序列號=M)
A→X:SYN(序列號=N)
X→A:SYN(序列號=M),ACK(應答號=N+1)
A→X:SYN(序列號=N),ACK(應答號=M+1)
①主機X向主機A發送一個FTP請求。在X和A之間建立起一個TCP連接來傳送控制信號。主機A向X發送一個SYN包以啟動一個TCP連接用來傳輸數據,其狀態轉移到SYN-SENT狀態。
②當X收到來自A的SYN包時,它回送一個SYN包作為響應。
③主機X收到來自A的SYN-ACK包,但不回送任何包。
④主機A期待著接收來自X的SYN-ACK。由于X不回送任何包,因此A被鎖在SYN-RCVD狀態。這樣,X就成功地封鎖了A的一個端口。
4.3 利用網絡監控設備觀測網絡入侵
我們在局域網上安裝一個網絡監控設備觀測通過網絡的包,從而判斷是否發生了網絡入侵。下面我們將討論在幾種入侵過程中網絡監控設備可觀測到的序列包。
4.3.1 偽造IP地址
最初,網絡監控設備會監測到大量的TCP SYN包從某個主機發往A的登錄端口。主機A會回送相應的SYN-ACK包。SYN包的目的是創建大量的與主機A的半開放的TCP連接,從而填滿了主機A的登錄端口連接隊列。
大量的TCP SYN包將從主機X經過網絡發往主機B,相應地有SYN-ACK包從主機B發往主機X。然后主機X將用RST包作應答。這個SYN/SYN-ACK/RST包序列使得入侵者可以知道主機B的TCP序列號發生器的動作。
主機A向主機B發送一個SYN包。實際上,這是主機X發送的一個“偽造”包。收到這個包之后,主機B將向主機A發送相應的SYN-ACK包。主機A向主機B發送ACK包。按照上述步驟,入侵主機能夠與主機B建立單向TCP連接。
4.3.2 虛假狀態轉移
當入侵者試圖利用從SYN-RCVD到CLOSE-WAIT的狀態轉移長時間阻塞某服務器的一個網絡端口時,可以觀察到如下序列包:
①從主機X到主機B發送一個帶有SYN和FIN標志位置位的TCP包。
主機B首先處理SYN標志,生成一個帶有相應ACK標志位置位的包,并使狀態轉移到SYN-RCVD,然后處理FIN標志,使狀態轉移到CLOSE-WAIT,并向X回送ACK包。
②主機X不向主機B發送其它任何包。主機的TCP機將固定在CLOSE-WAIT狀態。直到維持連接定時器將其重置為CLOSED狀態。
因此,如果網絡監控設備發現一串SYN-FIN/ACK包,可推斷入侵者正在阻塞主機B的某個端口。
4.3.3 定時器問題
如果一入侵者企圖在不建立連接的情況下使連接建立定時器無效,我們可以觀察到以下序列包:
①主機X從主機B收到一個TCP SYN包。
②主機X向主機B回送一個SYN包。
主機X不向主機B發送任何ACK包。因此,B被阻塞在SYN-RCVD狀態,無法響應來自其它客戶機的連接請求。
TCP/IP協議的安全隱患
造成操作系統漏洞的一個重要原因,就是協議本身的缺陷給系統帶來的攻擊點。網絡協議是計算機之間為了互聯共同遵守的規則。目前的互聯網絡所采用的主流協議TCP/IP,由于在其設計初期人們過分強調其開發性和便利性,沒有仔細考慮其安全性,因此很多的網絡協議都存在嚴重的安全漏洞,給Internet留下了許多安全隱患。另外,有些網絡協議缺陷造成的安全漏洞還會被黑客直接用來攻擊受害者系統。本文就TCP/IP協議自身所存在的安全問題和協議守護進程進行了詳細討論,指出針對這些安全隱患的攻擊。
1 TCP協議的安全問題
TCP使用三次握手機制來建立一條連接,握手的第一個報文為SYN包;第二個報文為SYN/ACK包,表明它應答第一個SYN包同時繼續握手的過程;第三個報文僅僅是一個應答,表示為ACK包。若A放為連接方,B為響應方,其間可能的威脅有:
1. 攻擊者監聽B方發出的SYN/ACK報文。
2. 攻擊者向B方發送RST包,接著發送SYN包,假冒A方發起新的連接。
3. B方響應新連接,并發送連接響應報文SYN/ACK。
4. 攻擊者再假冒A方對B方發送ACK包。
這樣攻擊者便達到了破壞連接的作用,若攻擊者再趁機插入有害數據包,則后果更嚴重。
TCP協議把通過連接而傳輸的數據看成是字節流,用一個32位整數對傳送的字節編號。初始序列號(ISN)在TCP握手時產生,產生機制與協議實現有關。攻擊者只要向目標主機發送一個連接請求,即可獲得上次連接的ISN,再通過多次測量來回傳輸路徑,得到進攻主機到目標主機之間數據包傳送的來回時間RTT。已知上次連接的ISN和RTT,很容易就能預測下一次連接的ISN。若攻擊者假冒信任主機向目標主機發出TCP連接,并預測到目標主機的TCP序列號,攻擊者就能偽造有害數據包,使之被目標主機接受。
IP協議的安全問題
IP協議在互連網絡之間提供無連接的數據包傳輸。IP協議根據IP頭中的目的地址項來發送IP數據包。也就是說,IP路由IP包時,對IP頭中提供的源地址不作任何檢查,并且認為IP頭中的源地址即為發送該包的機器的IP地址。這樣,許多依靠IP源地址做確認的服務將產生問題并且會被非法入侵。其中最重要的就是利用IP欺騙引起的各種攻擊。
以防火墻為例,一些網絡的防火墻只允許網絡信任的IP數據包通過。但是由于IP地址不檢測IP數據包中的IP源地址是否為放送該包的源主機的真實地址,攻擊者可以采用IP源地址欺騙的方法來繞過這種防火墻。另外有一些以IP地址作為安全權限分配依據的網絡應用,攻擊者很容易使用IP源地址欺騙的方法獲得特權,從而給被攻擊者造成嚴重的損失。事實上,每一個攻擊者都可以利用IP不檢驗IP頭源地址的特點,自己填入偽造的IP地址來進行攻擊,使自己不被發現。
TCP/IP協議安全問題的防范
TCP協議安全問題的防范
對于SYN Flood攻擊,目前還沒有完全有效的方法,但可以從以下幾個方面加以防范:
1. 對系統設定相應的內核參數,使得系統強制對超時的SYN請求連接數據包的復位,同時通過縮短超時常數和加長等候隊列使得系統能迅速處理無效的SYN請求數據包。
2. 建議在該網段的路由器上做些配置的調整,這些調整包括限制SYN半開數據包的流量和個數。
3. 建議在路由器的前端多必要的TCP攔截,使得只有完成TCP三次握手過程的數據包才可以進入該網段,這樣可以有效的保護本網段內的服務器不受此類攻擊。
IP協議安全問題的防范
1. 拋棄基于地址的信任策略。這是最簡單的方法。
2. 進行包過濾。如果網絡是通過路由器接入Internet的,那么可以利用路由器來進行包過濾。確認只有內部LAN可以使用信任關系,而內部LAN上的主機對于LAN以外的主機要慎重處理。路由器可以過濾掉所有來自于外部而希望與內部建立連接的請求。
3. 使用加密技術。阻止IP欺騙的一種簡單的方法是在通信時要求加密傳輸和驗證。當有多種手段并存時,加密方法可能最為適用。
TCP/IP各層的安全性和提高各層安全性的方法
1. 網絡層的安全性
在過去的十年里,已經提出了一些方案對網絡層的安全協議進行標準化。例如,安全協議3號(SP3)就是美國國家安全局以及標準技術協會作為安全數據網絡系統(SDNS)的一部分而制定的。網絡層安全協議(NLSP)是由國際標準化組織為無連接網絡協議(CLNP)制定的安全協議標準。集成化NLSP(I-NLSP)是由美國國家科技研究所提出的包括IP和CLNP在內的統一安全機制。SWIPE是另一個網絡層的安全協議,由Ioannidis和Blaze提出并實現原型。所有這些提案的共同點多于不同點。事實上,他們用的都是IP封裝技術。其本質是,純文本的包被加密,封裝在外層的IP報頭里,用來對加密的包進行Internet上的路由選擇。到達另一端時,外層的IP報頭被拆開,報文被解密,然后送到收報地點。
網絡安全性的主要優點是它的透明性,也就是說,安全服務的提供不需要應用程序、其他通信層次和網絡部件做任何改動。它最主要的缺點是:網絡層一般屬于不間進程和相應條例的包不做區別。對所有去往同一地址的包,它將按照同樣的加密密鑰和訪問控制策略來處理。這可能導致提供不了所需要的功能,也會導致性能下降。針對面向主機的密鑰分配的這些問題,RFC 1825允許(甚至可以說是推薦)使用面向用戶的密鑰分配,其中,不同的連接會得到不同的加密密鑰。但是,面向用戶的密鑰分配需要對相應的操作系統內核作比較大的改動。
簡而言之,網絡層是非常適合提供基于主機對主機的安全服務的。相應的安全協議可以用來在Internet上建立安全的IP通道和虛擬私有網。例如,利用它對IP包的加密和解密功能,可以簡捷地強化防火墻系統的防衛能力。RSA數據安全公司已經發起了一個倡議,來推進多家防火墻和TCP/IP軟件廠商聯合開發虛擬私有網,該倡議被稱為S-WAN(安全廣域網)倡議,其目標是制定和推薦網絡層的安全協議標準。
2. 傳輸層的安全性
在網絡應用編程中,通常使用廣義的進程間通信(IPC)機制來與不同層次的安全協議打交道。在Internet中提供安全服務的首先一個想法便是強化它的IPC界面,如BSD、Sockets等,具體做法包括雙端實體的認證,數據加密密鑰的交換等。Netscape通信公司遵循了這個思路,制定了建立在可靠的傳輸服務(如TCP/IP所提供)基礎上的安全接層協議(SSL)。
網絡安全機制的主要優點是它的透明性,即安全服務的提供不要求應用層做任何改變。這對傳輸層來是說是做不到的。原則上,任何TCP/IP應用,只要應用傳輸層安全協議,比如說SSL或IPC,就必定要進行若干修改以增加相應的功能,并使用不同的IPC界面。于是,傳輸層安全機制的主要缺點就是要對傳輸層IPC界面和應用程序兩端都進行修改。可是,比起Internet層和應用層的安全機制來,這里修改還是相當小的。另一個缺點是,基于UDP的通信很難在傳輸層建立起安全機制來。同網絡層安全機制相比,傳輸層安全機制的主要優點是它提供基于進程對進程的(而不是主機對主機的)安全服務。這一成就如果再加上應用級的安全服務,就可以再向前跨越一大步了。
3. 應用層的安全性
網絡層的安全協議允許為主機(進程)之間的數據通道增加安全屬性,這以為著真正的數據通道還是建立在主機(或進程)之間,但卻不可能區分在同一通道上傳輸的一個具體文件的安全性要求。比如說,如果一個主機與另一個主機之間建立起一條安全的IP通道,那么所有在這條通道上傳輸的IP包就到要自動的被加密。同樣,如果一個進程和另一個進程之間通過傳輸層安全協議建立起了一條安全的數據通道,那么兩個進程間傳輸的所有消息就都要自動的被加密。
一般來說,在應用層提供安全服務有幾種可能的做法,一個是對每個應用(及應用協議)分別進行修改。一些重要的TCP/IP應用已經這樣做了。在RFC1421至1424中,IETF規定了私用強化郵件(PEM)來為基于SMTP的電子郵件系統提供安全服務。Internet業界采納PEM的步子太慢的原因是PEM依賴于一個既存的、完全可操作的PKI(公鑰基礎結構)。建立一個符合PEM規范的PKI需要多方在一個共同點上達成信任。作為一個中間步驟,Phil Zimmermann開發了一個軟件包,叫做PGP(Pretty Good Privacy)。PGP符合PEM的絕大多數規范,但不必要求PKI的存在。相反,它采用了分布式的信任模型,即由每個用戶自己決定該信任哪些其他用戶。因此,PGP不是去推廣一個全局的PKI,而是讓用戶自己建立自己的信任之網。
總結:
總起來說,TCP/IP安全性的進展實際上與ICA思想的安全保證是有所協同與匯聚的,比起防火墻等措施來已更上一層樓。因此,基于TCP/IP協議的安全計算問題應以科學求實、積極創新的原則而努力推進,決不能不求創新,甚至悲觀失望。
評論
查看更多