tcp安全問題剖析
協(xié)議是互相通信的計(jì)算機(jī)雙方必須共同遵從的一組約定。TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)就是這樣的約定,它規(guī)定了計(jì)算機(jī)之間互相通信的方法。TCP/IP是為了使接入因特網(wǎng)的異種網(wǎng)絡(luò)、不同設(shè)備之間能夠進(jìn)行正常的數(shù)據(jù)通訊,而預(yù)先制定的一簇大家共同遵守的格式和約定。該協(xié)議是美國國防部高級研究計(jì)劃署為簡歷ARPANET開發(fā)的,在這個協(xié)議集中,兩個最知名的協(xié)議就是傳輸控制協(xié)議(TCP, Transfer Contorl Protocol)和網(wǎng)際協(xié)議(IP,Internet Protocol),故而整個協(xié)議集被稱為TCP/IP。之所以說TCP/IP是一個協(xié)議簇,是因?yàn)門CP/IP包括了TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等許多協(xié)議,對因特網(wǎng)中主機(jī)的尋址方式、主機(jī)的命名機(jī)制、信息的傳輸規(guī)則,以及各種各樣的服務(wù)功能均做了詳細(xì)約定,這些約定一起稱為TCP/IP。
TCP/IP協(xié)議和開放系統(tǒng)互連參考模型一樣,是一個分層結(jié)構(gòu)。協(xié)議的分層使得各層的任務(wù)和目的十分明確,這樣有利于軟件編寫和通信控制。TCP/IP協(xié)議分為4層,由下至上分別是網(wǎng)路接口層、網(wǎng)際層、傳輸層和應(yīng)用層,如圖1-1所示
圖1-1 TCP/IP 協(xié)議層次圖
1.2 TCP/IP協(xié)議的主要特點(diǎn)
?。?)開放的協(xié)議標(biāo)準(zhǔn),可以免費(fèi)使用,并且獨(dú)立于特定的計(jì)算機(jī)硬件與操作系統(tǒng);
(2)獨(dú)立于特定的網(wǎng)絡(luò)硬件,可以運(yùn)行在局域網(wǎng)、廣域網(wǎng),更適用于互聯(lián)網(wǎng)中;
?。?)統(tǒng)一的網(wǎng)絡(luò)地址分配方案,使得整個TCP/IP設(shè)備在網(wǎng)中都具有惟一的地址;
(4)標(biāo)準(zhǔn)化的高層協(xié)議,可以提供多種可靠的用戶服務(wù)。
1.3 TCP/IP協(xié)議的總體概況
目前在Internet上使用的是TCP/IP協(xié)議。TCP/IP協(xié)議叫做傳輸控制/網(wǎng)際協(xié)議,它是Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。TCP/IP是網(wǎng)絡(luò)中使用的基本的通信協(xié)議。其中IP(Internet Protocol)全名為“網(wǎng)際互連協(xié)議”,它是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議。TCP(Transfer Control Protocol)是傳輸控制協(xié)議。TCP/IP協(xié)議是能夠使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則,正是因?yàn)橛辛薚CP/IP協(xié)議,因特網(wǎng)才得以迅速發(fā)展成為世界上最大的、開放的計(jì)算機(jī)通信網(wǎng)絡(luò)。
從表面名字上看TCP/IP包括兩個協(xié)議,傳輸控制協(xié)議(TCP)和互聯(lián)網(wǎng)際協(xié)議(IP),其實(shí)TCP/IP實(shí)際上是一組協(xié)議的集合,它包括了上百個各種功能的協(xié)議。如:遠(yuǎn)程登錄、文件傳輸和電子郵件等等,而TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€基本的重要協(xié)議。IP協(xié)議之所以能使各種網(wǎng)絡(luò)互聯(lián)起來是由于它把各種不同的“幀”統(tǒng)一轉(zhuǎn)換成“IP數(shù)據(jù)報”格式,這種轉(zhuǎn)換是因特網(wǎng)的一個最重要的特點(diǎn)。所以IP協(xié)議使各種計(jì)算機(jī)網(wǎng)絡(luò)都能在因特網(wǎng)上實(shí)現(xiàn)互通,即具有“開放性”的特點(diǎn)。TCP/IP協(xié)議的基本傳輸單位是數(shù)據(jù)包(datagram)。TCP協(xié)議負(fù)責(zé)把數(shù)據(jù)分成若干個數(shù)據(jù)包,并給每個數(shù)據(jù)包加上包頭,包頭上有相應(yīng)的編號,以保證在數(shù)據(jù)接收端能將數(shù)據(jù)還原為原來的格式,IP協(xié)議在每個包頭上還要加上接收端主機(jī)地址,這樣數(shù)據(jù)通過路由器中的MAC地址來確定數(shù)據(jù)的流向,如果傳輸過程中出現(xiàn)數(shù)據(jù)丟失,數(shù)據(jù)失真等情況,TCP協(xié)議會自動要求數(shù)據(jù)重新傳輸,并重新組。??傊?,IP協(xié)議保證數(shù)據(jù)的傳輸,而TCP協(xié)議保證數(shù)據(jù)傳輸?shù)馁|(zhì)量。TCP/IP協(xié)議數(shù)據(jù)的傳輸基于TCP/IP協(xié)議的4層結(jié)構(gòu):應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、接口層。
各協(xié)議層存在的安全漏洞2.1 鏈路層存在的安全漏洞
我們知道,在以太網(wǎng)中,信道是共享的,任何主機(jī)發(fā)送的每一個以太網(wǎng)幀都會到達(dá)別的與該主機(jī)處于同一網(wǎng)段的所有主機(jī)的以太網(wǎng)接口,一般地,CSMA/CD協(xié)議使以太網(wǎng)接口在檢測到數(shù)據(jù)幀不屬于自己時,就把它忽略,不會把它發(fā)送到上層協(xié)議(如ARP、RARP層或IP層)。如果我們對其稍做設(shè)置或修改,就可以使一個以太網(wǎng)接口接收不屬于它的數(shù)據(jù)幀。例如有的實(shí)現(xiàn)可以使用雜錯接點(diǎn),即能接收所有數(shù)據(jù)幀的機(jī)器節(jié)點(diǎn)。解決該漏洞的對策是:網(wǎng)絡(luò)分段、利用交換器,動態(tài)集線器和橋等設(shè)備對數(shù)據(jù)流進(jìn)行限制、加密(采用一次性口令技術(shù))和禁用雜錯接點(diǎn)。
2.2 網(wǎng)絡(luò)層漏洞
幾乎所有的基于TCP/IP的機(jī)器都會對ICMP echo請求進(jìn)行響應(yīng)。所以如果一個敵意主機(jī)同時運(yùn)行很多個ping命令向一個服務(wù)器發(fā)送超過其處理能力的ICMP echo請求時,就可以淹沒該服務(wù)器使其拒絕其他的服務(wù)。另外,ping命令可以在得到允許的網(wǎng)絡(luò)中建立秘密通道從而可以在被攻擊系統(tǒng)中開后門進(jìn)行方便的攻擊,如收集目標(biāo)上的信息并進(jìn)行秘密通信等。解決該漏洞的措施是拒絕網(wǎng)絡(luò)上的所有ICMP echo響應(yīng)。
2.3 IP漏洞
IP包一旦從網(wǎng)絡(luò)中發(fā)送出去,源IP地址就幾乎不用,僅在中間路由器因某種原因丟棄它或到達(dá)目標(biāo)端后,才被使用。這使得一個主機(jī)可以使用別的主機(jī)的IP地址發(fā)送IP包,只要它能把這類IP包放到網(wǎng)絡(luò)上就可以。因而如果攻擊者把自己的主機(jī)偽裝成被目標(biāo)主機(jī)信任的友好主機(jī),即把發(fā)送的IP包中的源IP地址改成被信任的友好主機(jī)的IP地址,利用主機(jī)間的信任關(guān)系(Unix網(wǎng)絡(luò)軟件的開發(fā)者發(fā)明的術(shù)語)和這種信任關(guān)系的實(shí)際認(rèn)證中存在的脆弱性(只通過IP確認(rèn)),就可以對信任主機(jī)進(jìn)行攻擊。注意,其中所說的信任關(guān)系是指一個被授權(quán)的主機(jī)可以對信任主機(jī)進(jìn)行方便的訪問。所有的r*命令都采用信任主機(jī)方案,所以一個攻擊主機(jī)把自己的IP改為被信任主機(jī)的IP,就可以連接到信任主機(jī)并能利用r*命令開后門達(dá)到攻擊的目的。解決這個問題的一個辦法是,讓路由器拒絕接收來自網(wǎng)絡(luò)外部的IP地址與本地某一主機(jī)的IP地址相同的IP包的進(jìn)入。
2.4 ARP欺騙
ARP協(xié)議在對IP地址進(jìn)行解析時,利用ARP緩存(也叫ARP表)來做。ARP緩存的每一條目保存有IP地址到物理地址的映射。如果在ARP表中沒有這樣的對應(yīng)條目,ARP協(xié)議會廣播ARP請求,獲得對應(yīng)于那個IP地址的物理地址,并把該對應(yīng)關(guān)系加入到ARP表中。ARP表中的每一個條目都有一個計(jì)時器,如果計(jì)時器過期,該條目就無效,因而被從緩存中刪除。顯然,如果攻擊者暫時使用不工作的主機(jī)的IP地址,就可以偽造IP-物理地址對應(yīng)關(guān)系對,把自己偽裝成象那個暫時不使用的主機(jī)一樣??朔藛栴}的方法是,讓硬件地址常駐內(nèi)存,并可以用ARP命令手工加入(特權(quán)用戶才可以那樣做);也可以通過向RARP服務(wù)器詢問來檢查客戶的ARP欺騙。因?yàn)镽ARP服務(wù)器保留著網(wǎng)絡(luò)中硬件地址和 IP的相關(guān)信息。
2.5 路由欺騙
在路由協(xié)議中,主機(jī)利用重定向報文來改變或優(yōu)化路由。如果一個路由器發(fā)送非法的重定向報文,就可以偽造路由表,錯誤引導(dǎo)非本地的數(shù)據(jù)報。另外,各個路由器都會定期向其相鄰的路由器廣播路由信息,如果使用RIP特權(quán)的主機(jī)的520端口廣播非法路由信息,也可以達(dá)到路由欺騙的目的。解決這些問題的辦法有,通過設(shè)置主機(jī)忽略重定向信息可以防止路由欺騙;禁止路由器被動使用RIP和限制被動使用RIP的范圍。
2.6 DNS欺騙
網(wǎng)絡(luò)上的所有主機(jī)都信任DNS服務(wù)器,如果DNS服務(wù)器中的數(shù)據(jù)被攻擊者破壞,就可以進(jìn)行DNS欺騙。
2.7 攔截TCP連接
攻擊者可以使TCP連接的兩端進(jìn)入不同步狀態(tài),入侵者主機(jī)向兩端發(fā)送偽造的數(shù)據(jù)包。冒充被信任主機(jī)建立TCP連接,用SYN淹沒被信任的主機(jī),并猜測3步握手中的響應(yīng)(建立多個連接到信任主機(jī)的TCP連接,獲得初始序列號ISN(IniTIal Serial Number)和RTT,然后猜測響應(yīng)的ISN,因?yàn)樾蛄刑柮扛舭朊爰?4000,每建立一個連接加64000)。預(yù)防方法:使所有的r*命令失效,讓路由器拒絕來自外面的與本地主機(jī)有相同的IP地址的包。RARP查詢可用來發(fā)現(xiàn)與目標(biāo)服務(wù)器處在同一物理網(wǎng)絡(luò)的主機(jī)的攻擊。另外ISN攻擊可通過讓每一個連接的ISN隨機(jī)分配配合每隔半秒加64000來防止。
2.8 使用TCP/SYN報文段淹沒服務(wù)器
利用TCP建立連接的3步驟的缺點(diǎn)和服務(wù)器端口允許的連接數(shù)量的限制,竊取不可達(dá)IP地址作為源IP地址,使得服務(wù)器端得不到ACK而使連接處于半開狀態(tài),從而阻止服務(wù)器響應(yīng)響應(yīng)別的連接請求。盡管半開的連接會被過期而關(guān)閉的,但只要攻擊系統(tǒng)發(fā)送的spoofed SYN請求的速度比過期的快就可以達(dá)到攻擊的目的。這種攻擊的方法一直是一種重要的攻擊ISP(Internet Service Provider)的方法,這種攻擊并不會損害服務(wù),而是使服務(wù)能力削弱。解決這種攻擊的辦法是,給Unix內(nèi)核加一個補(bǔ)丁程序或使用一些工具對內(nèi)核進(jìn)行配置。一般的做法是,使允許的半開連接的數(shù)量增加,允許連接處于半開狀態(tài)的時間縮短。但這些并不能從根本上解決這些問題。實(shí)際上在系統(tǒng)的內(nèi)存中有一個專門的隊(duì)列包含所有的半開連接,這個隊(duì)列的大小是有限的,因而只要有意使服務(wù)器建立過多的半開連接就可以使服務(wù)器的這個隊(duì)列溢出,從而無法響應(yīng)其他客戶的連接請求。
關(guān)于TCP/IP協(xié)議族存在的脆弱性剖析3.1 TCP/IP協(xié)議族存在脆弱性
IP層的主要曲線是缺乏有效的安全認(rèn)證和保密機(jī)制,其中最主要的因素就是IP地址問題。TCP/IP協(xié)議用IP地址來作為網(wǎng)絡(luò)節(jié)點(diǎn)的惟一標(biāo)識,許多 TCP/IP服務(wù),包括Berkeley中的R命令、NFS、X Window等都是基于IP地址對用戶進(jìn)行認(rèn)證和授權(quán)。當(dāng)前TCP/IP網(wǎng)絡(luò)的安全機(jī)制主要是基于IP地址的包過濾(Packet Filtering)和認(rèn)證(AuthenTIcaTIon)技術(shù),它的有效性體現(xiàn)在可以根據(jù)IP包中的源IP地址判斷數(shù)據(jù)的真實(shí)性和安全性。然而IP地址存在許多問題,協(xié)議的最大缺點(diǎn)就是缺乏對IP地址的保護(hù),缺乏對IP包中源IP地址真實(shí)性的認(rèn)證機(jī)制與保密措施。這也就是引起整個TCP/IP協(xié)議不安全的根本所在。
由于UDP是基于IP協(xié)議之上的,TCP分段和UDP協(xié)議數(shù)據(jù)包是封裝在IP包中在網(wǎng)絡(luò)上傳輸?shù)?,因此同樣面臨IP層所遇到的安全威脅。現(xiàn)在人們一直在想辦法解決,卻仍然無法避免的就是根據(jù)TCP連接建立時“三次握手”機(jī)制的攻擊。
3.2 應(yīng)用服務(wù)不容樂觀
3.2.1 文件傳輸協(xié)議
FTP經(jīng)久不衰的原因在于它可以在互聯(lián)網(wǎng)上進(jìn)行與平臺無關(guān)的數(shù)據(jù)傳輸,它基于一個客戶機(jī)/服務(wù)器架構(gòu)。FTP 將通過兩個信道(端口)傳輸,一個傳輸數(shù)據(jù)(TCP 端口 20),另一個傳輸控制信息(TCP 端口 21)。在控制信道之上,雙方(客戶機(jī)和服務(wù)器)交換用于發(fā)起數(shù)據(jù)傳輸?shù)拿?。一個 FTP 連接包含4個步驟:用戶鑒權(quán)→建立控制信道→建立數(shù)據(jù)信道→關(guān)閉連接。FTP 的連接控制使用 TCP (Transmission Control Protocol, 傳輸控制協(xié)議),它保障了數(shù)據(jù)的可靠傳輸。因此,F(xiàn)TP 在數(shù)據(jù)傳輸中不需要關(guān)心分組丟失和數(shù)據(jù)錯誤檢測。
匿名FTP作為互聯(lián)網(wǎng)上廣泛應(yīng)用的服務(wù),安全等級的低下受到了黑客的頻繁光顧。匿名FTP 是真的匿名,并沒有記錄誰請求了什么信息,誰下載了什么文件,上傳了什么東西(有可能是木馬)。FTP存在著致命的安全缺陷,F(xiàn)TP使用標(biāo)準(zhǔn)的用戶名和口令作為身份驗(yàn)證,缺乏有效的訪問權(quán)限的控制機(jī)制,而其口令和密碼的傳輸也都是明文的方式。
3.2.2 Web服務(wù)
Web服務(wù)器位于宿主基礎(chǔ)結(jié)構(gòu)的前端,它與Internet直接相連,負(fù)責(zé)接收來自客戶端的請求,創(chuàng)建動態(tài)Web頁并響應(yīng)請求數(shù)據(jù)。最初WWW服務(wù)只提供靜態(tài)的HTML頁面,為改變?nèi)藗儗W(wǎng)絡(luò)互動請求的愿望,開始引入了CGI程序,CGI程序讓主頁活動起來。CGI程序可以接收用戶的輸入信息,一般用戶是通過表格把輸入信息傳給CGI程序的,然后CGI程序可以根據(jù)用戶的要求進(jìn)行一些處理,一般情況下會生成一個HTML文件,并傳回給用戶。很多CGI 程序都存在安全漏洞,很容易被黑客利用做一些非法的事情?,F(xiàn)在很多人在編寫CGI程序時,可能對CGI軟件包中的安全漏洞并不了解,而且大多數(shù)情況下不會重新編寫程序的所有部分,只是對其加以適當(dāng)?shù)男薷模@樣很多CGI程序就不可避免的具有相同的安全漏洞。很多 SQL Server 開發(fā)人員并沒有在代碼編寫開始的時候就從安全防護(hù)基礎(chǔ)開始,這樣就無法確保您開發(fā)的代碼的安全性,其結(jié)果就造成了無法將應(yīng)用程序的運(yùn)行控制在所需的最低權(quán)限之內(nèi)。
3.3 提高網(wǎng)絡(luò)可信度
前面的IPv4存在的弊端,很多安全防范技術(shù)被忽略了,它不可避免地被新一代技術(shù)IPv6取代。IPsec安全協(xié)議就是事后 發(fā)展的一種協(xié)議(如圖3-1),而NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換,Network Address TranslaTIon)解決了IP地址短缺的問題,卻增加了安全風(fēng)險,使真正的端到端的安全應(yīng)用難以實(shí)現(xiàn)。端到端安全性的兩個基本組件——鑒權(quán)和加密都是IPv6協(xié)議的集成組件;而在IPv4中,它們只是附加組件,因此,采用IPv6安全性會更加簡便、一致。
在現(xiàn)在的網(wǎng)絡(luò)環(huán)境中,尤其是園區(qū)網(wǎng)當(dāng)中,由于不存在NAT地址轉(zhuǎn)換的問題,所以IPSec具備允許部署可信計(jì)算基礎(chǔ)架構(gòu)的基本特征。IPSec數(shù)據(jù)包驗(yàn)證能夠確保整個IP報頭、下一層協(xié)議(例如TCP、UPD或ICMP)報頭以及數(shù)據(jù)包有效負(fù)載的數(shù)據(jù)完整性。 華夏網(wǎng)管ofAdmin.Com
另外,針對數(shù)據(jù)包的單向Hash算法用以提供校驗(yàn)和。通信發(fā)起方計(jì)算校驗(yàn)和并在發(fā)送之前將其附加到數(shù)據(jù)包中;響應(yīng)方則在收到數(shù)據(jù)包后為其計(jì)算校驗(yàn)和。如果響應(yīng)方所計(jì)算出的校驗(yàn)和與數(shù)據(jù)包中附帶的校驗(yàn)和完全匹配,則證明數(shù)據(jù)包在傳輸過程中未被修改。校驗(yàn)和的單向計(jì)算特性意味著其取值無法在傳輸過程中進(jìn)行修改,這也就保證了端到端的數(shù)據(jù)傳輸過程的可信程度。