IP欺騙原理精解及防范手段綜述
發(fā)布日期:2021-12-14 05:46 | 文章來源:站長之家
即使是很好的實(shí)現(xiàn)了TCP/IP協(xié)議,由于它本身有著一些不安全的地方,從而可以對TCP/IP網(wǎng)絡(luò)進(jìn)行攻擊。這些攻擊包括序列號欺騙,路由攻擊,源地址欺騙和授權(quán)欺騙。本文除了介紹IP欺騙攻擊方法外,還介紹怎樣防止這個(gè)攻擊手段。
上述攻擊是建立在攻擊者的計(jì)算機(jī)(包括路由)是連在INTERNET上的。這里的攻擊方法是針對TCP/IP本身的缺陷的,而不是某一具體的實(shí)現(xiàn)。
實(shí)際上,IP 欺騙不是進(jìn)攻的結(jié)果,而是進(jìn)攻的手段。進(jìn)攻實(shí)際上是信任關(guān)系的破壞。
IP欺騙原理
信任關(guān)系
在Unix領(lǐng)域中,信任關(guān)系能夠很容易得到。假如在主機(jī)A和B上各有一個(gè)帳戶,在使用當(dāng)中會發(fā)現(xiàn),在主機(jī)A上使用時(shí)需要輸入在A上的相應(yīng)帳戶,在主機(jī)B 上使用時(shí)必須輸入在B上的帳戶,主機(jī)A和B把你當(dāng)作兩個(gè)互不相關(guān)的用戶,顯然有些不便。為了減少這種不便,可以在主機(jī)A和主機(jī)B中建立起兩個(gè)帳戶的相互信任關(guān)系。在主機(jī)A和主機(jī)B上你的home目錄中創(chuàng)建.rhosts 文件。從主機(jī)A上,在你的home目錄中輸入'echo " B username " > ~/.rhosts' ;從主機(jī)B上,在你的home目錄中輸入'echo " A username " >~/.rhosts' 。至此,你能毫無阻礙地使用任何以r*開頭的遠(yuǎn)程登錄如:rlogin,rcall,rsh等,而無口令驗(yàn)證的煩惱。這些命令將允許以地址為基礎(chǔ)的驗(yàn)證,或者允許或者拒絕以IP地址為基礎(chǔ)的存取服務(wù)。
這里的信任關(guān)系是基于IP地址的。
Rlogin
Rlogin 是一個(gè)簡單的客戶/服務(wù)器程序,它利用TCP傳輸。Rlogin 允許用戶從一臺主機(jī)登錄到另一臺主機(jī)上,并且,如果目標(biāo)主機(jī)信任它,Rlogin 將允許在不應(yīng)答口令的情況下使用目標(biāo)主機(jī)上的資源。安全驗(yàn)證完全是基于源主機(jī)的IP 地址。因此,根據(jù)以上所舉的例子,我們能利用Rlogin 來從B遠(yuǎn)程登錄到A,而且不會被提示輸入口令。
TCP 序列號預(yù)測
IP只是發(fā)送數(shù)據(jù)包,并且保證它的完整性。如果不能收到完整的IP數(shù)據(jù)包,IP會向源地址發(fā)送一個(gè)ICMP 錯(cuò)誤信息,希望重新處理。然而這個(gè)包也可能丟失。由于IP是非面向連接的,所以不保持任何連接狀態(tài)的信息。每個(gè)IP數(shù)據(jù)包被松散地發(fā)送出去,而不關(guān)心前一個(gè)和后一個(gè)數(shù)據(jù)包的情況。由此看出,可以對IP堆棧進(jìn)行修改,在源地址和目的地址中放入任意滿足要求的IP地址,也就是說,提供虛假的IP地址。
TCP提供可靠傳輸??煽啃允怯蓴?shù)據(jù)包中的多位控制字來提供的,其中最重要的是數(shù)據(jù)序列和數(shù)據(jù)確認(rèn),分別用SYN和ACK來表示。TCP 向每一個(gè)數(shù)據(jù)字節(jié)分配一個(gè)序列號,并且可以向已成功接收的、源地址所發(fā)送的數(shù)據(jù)包表示確認(rèn)(目的地址ACK 所確認(rèn)的數(shù)據(jù)包序列是源地址的數(shù)據(jù)包序列,而不是自己發(fā)送的數(shù)據(jù)包序列)。ACK在確認(rèn)的同時(shí),還攜帶了下一個(gè)期望獲得的數(shù)據(jù)序列號。顯然,TCP提供的這種可靠性相對于IP來說更難于愚弄。
序列編號、確認(rèn)和其它標(biāo)志信息
由于TCP是基于可靠性的,它能夠提供處理數(shù)據(jù)包丟失,重復(fù)或是順序紊亂等不良情況的機(jī)制。實(shí)際上,通過向所傳送出的所有字節(jié)分配序列編號,并且期待接收端對發(fā)送端所發(fā)出的數(shù)據(jù)提供收訖確認(rèn),TCP 就能保證可靠的傳送。接收端利用序列號確保數(shù)據(jù)的先后順序,除去重復(fù)的數(shù)據(jù)包。TCP 序列編號可以看作是32位的計(jì)數(shù)器。它們從0至2^32-1 排列。每一個(gè)TCP連接(由一定的標(biāo)示位來表示)交換的數(shù)據(jù)都是順序編號的。在TCP數(shù)據(jù)包中定義序列號(SYN)的標(biāo)示位位于數(shù)據(jù)段的前端。確認(rèn)位(ACK)對所接收的數(shù)據(jù)進(jìn)行確認(rèn),并且指出下一個(gè)期待接收的數(shù)據(jù)序列號。
TCP通過滑動(dòng)窗口的概念來進(jìn)行流量控制。設(shè)想在發(fā)送端發(fā)送數(shù)據(jù)的速度很快而接收端接收速度卻很慢的情況下,為了保證數(shù)據(jù)不丟失,顯然需要進(jìn)行流量控制,協(xié)調(diào)好通信雙方的工作節(jié)奏。所謂滑動(dòng)窗口,可以理解成接收端所能提供的緩沖區(qū)大小。TCP利用一個(gè)滑動(dòng)的窗口來告訴發(fā)送端對它所發(fā)送的數(shù)據(jù)能提供多大的緩沖區(qū)。由于窗口由16位bit所定義,所以接收端TCP 能最大提供65535個(gè)字節(jié)的緩沖。由此,可以利用窗口大小和第一個(gè)數(shù)據(jù)的序列號計(jì)算出最大可接收的數(shù)據(jù)序列號。
其它TCP標(biāo)示位有 RST(連接復(fù)位,Reset the connection)、PSH(壓入功能,Push function)和FIN (發(fā)送者無數(shù)據(jù),No more data from sender)。如果RST 被接收,TCP連接將立即斷開。RST 通常在接收端接收到一個(gè)與當(dāng)前連接不相關(guān)的數(shù)據(jù)包時(shí)被發(fā)送。有些時(shí)候,TCP模塊需要立即傳送數(shù)據(jù)而不能等整段都充滿時(shí)再傳。一個(gè)高層的進(jìn)程將會觸發(fā)在 TCP頭部的PSH標(biāo)示,并且告訴TCP模塊立即將所有排列好的數(shù)據(jù)發(fā)給數(shù)據(jù)接收端。FIN 表示一個(gè)應(yīng)用連接結(jié)束。當(dāng)接收端接收到FIN時(shí),確認(rèn)它,認(rèn)為將接收不到任何數(shù)據(jù)了。
TCP序列號預(yù)測最早是由Morris對這一安全漏洞進(jìn)行闡述的。他使用TCP序列號預(yù)測,即使是沒有從服務(wù)器得到任何響應(yīng), 來產(chǎn)生一個(gè)TCP包序列。這使得他能欺騙在本地網(wǎng)絡(luò)上的主機(jī)。
通常TCP連接建立桓靄??次握手的序列。客戶選擇和傳輸一個(gè)初始的序列號(SEQ標(biāo)志)ISN C,并設(shè)置標(biāo)志位SYN=1,告訴服務(wù)器它需要建立連接。服務(wù)器確認(rèn)這個(gè)傳輸,并發(fā)送它本身的序列號ISN S,并設(shè)置標(biāo)志位ACK,同時(shí)告知下一個(gè)期待獲得的數(shù)據(jù)序列號是ISN=1??蛻粼俅_認(rèn)它。在這三次確認(rèn)后,開始傳輸數(shù)據(jù)。整個(gè)過程如下所示:
(C:Client S:Server)
C---S: SYN(ISN C )
S---C: SYN(ISN S ) ,ACK(ISN C )
C---S: ACK(ISN S )
C---S:數(shù)據(jù) 或S---C:數(shù)據(jù)
也就是說對一個(gè)會話,C必須得到ISN S確認(rèn)。ISN S可能是一個(gè)隨機(jī)數(shù)。
了解序數(shù)編號如何選擇初始序列號和如何根據(jù)時(shí)間變化是很重要的。似乎應(yīng)該有這種情況,當(dāng)主機(jī)啟動(dòng)后序列編號初始化為1,但實(shí)際上并非如此。初始序列號是由tcp_init函數(shù)確定的。ISN每秒增加128000,如果有連接出現(xiàn),每次連接將把計(jì)數(shù)器的數(shù)值增加64000。很顯然,這使得用于表示ISN的 32位計(jì)數(shù)器在沒有連接的情況下每9.32 小時(shí)復(fù)位一次。之所以這樣,是因?yàn)檫@樣有利于最大限度地減少舊有連接的信息干擾當(dāng)前連接的機(jī)會。這里運(yùn)用了2MSL 等待時(shí)間的概念(不在本文討論的范圍之內(nèi))。如果初始序列號是隨意選擇的,那么不能保證現(xiàn)有序列號是不同于先前的。假設(shè)有這樣一種情況,在一個(gè)路由回路中的數(shù)據(jù)包最終跳出了黑客編程循環(huán),回到了“舊有”的連接(此時(shí)其實(shí)是不同于前者的現(xiàn)有連接),顯然會發(fā)生對現(xiàn)有連接的干擾。
假設(shè)一個(gè)入侵者X有一種方法,能預(yù)測ISN S。在這種情況下,他可能將下列序號送給主機(jī)T來模擬客戶的真正的ISN S:
X---S: SYN(ISN X ) ,SRC = T
S---T: SYN(ISN S ) ,ACK(ISN X )
X---S: ACK(ISN S ) ,SRC =T
盡管消息S*T并不到X,但是X能知道它的內(nèi)容,因此能發(fā)送數(shù)據(jù)。如果X要對一個(gè)連接實(shí)施攻擊,這個(gè)連接允許執(zhí)行命令,那么另外的命令也能執(zhí)行。
那么怎樣產(chǎn)生隨機(jī)的ISN?在Berkeley系統(tǒng),最初的序列號變量由一個(gè)常數(shù)每秒加一產(chǎn)生,等到這個(gè)常數(shù)一半時(shí),就開始一次連接。這樣,如果開始了一個(gè)合法連接,并觀察到一個(gè)ISN S在用,便可以計(jì)算,有很高可信度,ISN S 用在下一個(gè)連接企圖。
Morris 指出,回復(fù)消息
S---T:SYN(ISN S ) ,ACK(ISN X )
事實(shí)上并不消失,真正主機(jī)將收到它,并試圖重新連接。這并不是一個(gè)嚴(yán)重的障礙。
Morris發(fā)現(xiàn),通過模仿一個(gè)在T上的端口,并向那個(gè)端口請求一個(gè)連接,他就能產(chǎn)生序列溢出,從而讓它看上去S*T消息丟失了。另外一個(gè)方法,可以等待知道T關(guān)機(jī)或重新啟動(dòng)。
下面詳細(xì)的介紹一下。
IP欺騙
IP欺騙由若干步驟組成,這里先簡要地描述一下,隨后再做詳盡地解釋。先做以下假定:首先,目標(biāo)主機(jī)已經(jīng)選定。其次,信任模式已被發(fā)現(xiàn),并找到了一個(gè)被目標(biāo)主機(jī)信任的主機(jī)。黑客為了進(jìn)行IP欺騙,進(jìn)行以下工作:使得被信任的主機(jī)喪失工作能力,同時(shí)采樣目標(biāo)主機(jī)發(fā)出的TCP 序列號,猜測出它的數(shù)據(jù)序列號。然后,偽裝成被信任的主機(jī),同時(shí)建立起與目標(biāo)主機(jī)基于地址驗(yàn)證的應(yīng)用連接。如果成功,黑客可以使用一種簡單的命令放置一個(gè)系統(tǒng)后門,以進(jìn)行非授權(quán)操作。
使被信任主機(jī)喪失工作能力
一旦發(fā)現(xiàn)被信任的主機(jī),為了偽裝成它,往往使其喪失工作能力。由于攻擊者將要代替真正的被信任主機(jī),他必須確保真正被信任的主機(jī)不能接收到任何有效的網(wǎng)絡(luò)數(shù)據(jù),否則將會被揭穿。有許多方法可以做到這些。這里介紹“TCP SYN 淹沒”。
前面已經(jīng)談到,建立TCP連接的第一步就是客戶端向服務(wù)器發(fā)送SYN請求。 通常,服務(wù)器將向客戶端發(fā)送SYN/ACK 信號。這里客戶端是由IP地址確定的??蛻舳穗S后向服務(wù)器發(fā)送ACK,然后數(shù)據(jù)傳輸就可以進(jìn)行了。然而,TCP處理模塊有一個(gè)處理并行SYN請求的最上限,它可以看作是存放多條連接的隊(duì)列長度。其中,連接數(shù)目包括了那些三步握手法沒有最終完成的連接,也包括了那些已成功完成握手,但還沒有被應(yīng)用程序所調(diào)用的連接。如果達(dá)到隊(duì)列的最上限,TCP將拒絕所有連接請求,直至處理了部分連接鏈路。因此,這里是有機(jī)可乘的。
黑客往往向被進(jìn)攻目標(biāo)的TCP端口發(fā)送大量SYN請求,這些請求的源地址是使用一個(gè)合法的但是虛假的IP地址(可能使用該合法IP地址的主機(jī)沒有開機(jī))。而受攻擊的主機(jī)往往是會向該IP地址發(fā)送響應(yīng)的,但可惜是杳無音信。與此同時(shí)IP包會通知受攻擊主機(jī)的TCP:該主機(jī)不可到達(dá),但不幸的是TCP會認(rèn)為是一種暫時(shí)錯(cuò)誤,并繼續(xù)嘗試連接(比如繼續(xù)對該IP地址進(jìn)行路由,發(fā)出SYN/ACK數(shù)據(jù)包等等),直至確信無法連接。
當(dāng)然,這時(shí)已流逝了大量的寶貴時(shí)間。值得注意的是,黑客們是不會使用那些正在工作的IP地址的,因?yàn)檫@樣一來,真正IP持有者會收到SYN/ACK響應(yīng),而隨之發(fā)送RST給受攻擊主機(jī)
上述攻擊是建立在攻擊者的計(jì)算機(jī)(包括路由)是連在INTERNET上的。這里的攻擊方法是針對TCP/IP本身的缺陷的,而不是某一具體的實(shí)現(xiàn)。
實(shí)際上,IP 欺騙不是進(jìn)攻的結(jié)果,而是進(jìn)攻的手段。進(jìn)攻實(shí)際上是信任關(guān)系的破壞。
IP欺騙原理
信任關(guān)系
在Unix領(lǐng)域中,信任關(guān)系能夠很容易得到。假如在主機(jī)A和B上各有一個(gè)帳戶,在使用當(dāng)中會發(fā)現(xiàn),在主機(jī)A上使用時(shí)需要輸入在A上的相應(yīng)帳戶,在主機(jī)B 上使用時(shí)必須輸入在B上的帳戶,主機(jī)A和B把你當(dāng)作兩個(gè)互不相關(guān)的用戶,顯然有些不便。為了減少這種不便,可以在主機(jī)A和主機(jī)B中建立起兩個(gè)帳戶的相互信任關(guān)系。在主機(jī)A和主機(jī)B上你的home目錄中創(chuàng)建.rhosts 文件。從主機(jī)A上,在你的home目錄中輸入'echo " B username " > ~/.rhosts' ;從主機(jī)B上,在你的home目錄中輸入'echo " A username " >~/.rhosts' 。至此,你能毫無阻礙地使用任何以r*開頭的遠(yuǎn)程登錄如:rlogin,rcall,rsh等,而無口令驗(yàn)證的煩惱。這些命令將允許以地址為基礎(chǔ)的驗(yàn)證,或者允許或者拒絕以IP地址為基礎(chǔ)的存取服務(wù)。
這里的信任關(guān)系是基于IP地址的。
Rlogin
Rlogin 是一個(gè)簡單的客戶/服務(wù)器程序,它利用TCP傳輸。Rlogin 允許用戶從一臺主機(jī)登錄到另一臺主機(jī)上,并且,如果目標(biāo)主機(jī)信任它,Rlogin 將允許在不應(yīng)答口令的情況下使用目標(biāo)主機(jī)上的資源。安全驗(yàn)證完全是基于源主機(jī)的IP 地址。因此,根據(jù)以上所舉的例子,我們能利用Rlogin 來從B遠(yuǎn)程登錄到A,而且不會被提示輸入口令。
TCP 序列號預(yù)測
IP只是發(fā)送數(shù)據(jù)包,并且保證它的完整性。如果不能收到完整的IP數(shù)據(jù)包,IP會向源地址發(fā)送一個(gè)ICMP 錯(cuò)誤信息,希望重新處理。然而這個(gè)包也可能丟失。由于IP是非面向連接的,所以不保持任何連接狀態(tài)的信息。每個(gè)IP數(shù)據(jù)包被松散地發(fā)送出去,而不關(guān)心前一個(gè)和后一個(gè)數(shù)據(jù)包的情況。由此看出,可以對IP堆棧進(jìn)行修改,在源地址和目的地址中放入任意滿足要求的IP地址,也就是說,提供虛假的IP地址。
TCP提供可靠傳輸??煽啃允怯蓴?shù)據(jù)包中的多位控制字來提供的,其中最重要的是數(shù)據(jù)序列和數(shù)據(jù)確認(rèn),分別用SYN和ACK來表示。TCP 向每一個(gè)數(shù)據(jù)字節(jié)分配一個(gè)序列號,并且可以向已成功接收的、源地址所發(fā)送的數(shù)據(jù)包表示確認(rèn)(目的地址ACK 所確認(rèn)的數(shù)據(jù)包序列是源地址的數(shù)據(jù)包序列,而不是自己發(fā)送的數(shù)據(jù)包序列)。ACK在確認(rèn)的同時(shí),還攜帶了下一個(gè)期望獲得的數(shù)據(jù)序列號。顯然,TCP提供的這種可靠性相對于IP來說更難于愚弄。
序列編號、確認(rèn)和其它標(biāo)志信息
由于TCP是基于可靠性的,它能夠提供處理數(shù)據(jù)包丟失,重復(fù)或是順序紊亂等不良情況的機(jī)制。實(shí)際上,通過向所傳送出的所有字節(jié)分配序列編號,并且期待接收端對發(fā)送端所發(fā)出的數(shù)據(jù)提供收訖確認(rèn),TCP 就能保證可靠的傳送。接收端利用序列號確保數(shù)據(jù)的先后順序,除去重復(fù)的數(shù)據(jù)包。TCP 序列編號可以看作是32位的計(jì)數(shù)器。它們從0至2^32-1 排列。每一個(gè)TCP連接(由一定的標(biāo)示位來表示)交換的數(shù)據(jù)都是順序編號的。在TCP數(shù)據(jù)包中定義序列號(SYN)的標(biāo)示位位于數(shù)據(jù)段的前端。確認(rèn)位(ACK)對所接收的數(shù)據(jù)進(jìn)行確認(rèn),并且指出下一個(gè)期待接收的數(shù)據(jù)序列號。
TCP通過滑動(dòng)窗口的概念來進(jìn)行流量控制。設(shè)想在發(fā)送端發(fā)送數(shù)據(jù)的速度很快而接收端接收速度卻很慢的情況下,為了保證數(shù)據(jù)不丟失,顯然需要進(jìn)行流量控制,協(xié)調(diào)好通信雙方的工作節(jié)奏。所謂滑動(dòng)窗口,可以理解成接收端所能提供的緩沖區(qū)大小。TCP利用一個(gè)滑動(dòng)的窗口來告訴發(fā)送端對它所發(fā)送的數(shù)據(jù)能提供多大的緩沖區(qū)。由于窗口由16位bit所定義,所以接收端TCP 能最大提供65535個(gè)字節(jié)的緩沖。由此,可以利用窗口大小和第一個(gè)數(shù)據(jù)的序列號計(jì)算出最大可接收的數(shù)據(jù)序列號。
其它TCP標(biāo)示位有 RST(連接復(fù)位,Reset the connection)、PSH(壓入功能,Push function)和FIN (發(fā)送者無數(shù)據(jù),No more data from sender)。如果RST 被接收,TCP連接將立即斷開。RST 通常在接收端接收到一個(gè)與當(dāng)前連接不相關(guān)的數(shù)據(jù)包時(shí)被發(fā)送。有些時(shí)候,TCP模塊需要立即傳送數(shù)據(jù)而不能等整段都充滿時(shí)再傳。一個(gè)高層的進(jìn)程將會觸發(fā)在 TCP頭部的PSH標(biāo)示,并且告訴TCP模塊立即將所有排列好的數(shù)據(jù)發(fā)給數(shù)據(jù)接收端。FIN 表示一個(gè)應(yīng)用連接結(jié)束。當(dāng)接收端接收到FIN時(shí),確認(rèn)它,認(rèn)為將接收不到任何數(shù)據(jù)了。
TCP序列號預(yù)測最早是由Morris對這一安全漏洞進(jìn)行闡述的。他使用TCP序列號預(yù)測,即使是沒有從服務(wù)器得到任何響應(yīng), 來產(chǎn)生一個(gè)TCP包序列。這使得他能欺騙在本地網(wǎng)絡(luò)上的主機(jī)。
通常TCP連接建立桓靄??次握手的序列。客戶選擇和傳輸一個(gè)初始的序列號(SEQ標(biāo)志)ISN C,并設(shè)置標(biāo)志位SYN=1,告訴服務(wù)器它需要建立連接。服務(wù)器確認(rèn)這個(gè)傳輸,并發(fā)送它本身的序列號ISN S,并設(shè)置標(biāo)志位ACK,同時(shí)告知下一個(gè)期待獲得的數(shù)據(jù)序列號是ISN=1??蛻粼俅_認(rèn)它。在這三次確認(rèn)后,開始傳輸數(shù)據(jù)。整個(gè)過程如下所示:
(C:Client S:Server)
C---S: SYN(ISN C )
S---C: SYN(ISN S ) ,ACK(ISN C )
C---S: ACK(ISN S )
C---S:數(shù)據(jù) 或S---C:數(shù)據(jù)
也就是說對一個(gè)會話,C必須得到ISN S確認(rèn)。ISN S可能是一個(gè)隨機(jī)數(shù)。
了解序數(shù)編號如何選擇初始序列號和如何根據(jù)時(shí)間變化是很重要的。似乎應(yīng)該有這種情況,當(dāng)主機(jī)啟動(dòng)后序列編號初始化為1,但實(shí)際上并非如此。初始序列號是由tcp_init函數(shù)確定的。ISN每秒增加128000,如果有連接出現(xiàn),每次連接將把計(jì)數(shù)器的數(shù)值增加64000。很顯然,這使得用于表示ISN的 32位計(jì)數(shù)器在沒有連接的情況下每9.32 小時(shí)復(fù)位一次。之所以這樣,是因?yàn)檫@樣有利于最大限度地減少舊有連接的信息干擾當(dāng)前連接的機(jī)會。這里運(yùn)用了2MSL 等待時(shí)間的概念(不在本文討論的范圍之內(nèi))。如果初始序列號是隨意選擇的,那么不能保證現(xiàn)有序列號是不同于先前的。假設(shè)有這樣一種情況,在一個(gè)路由回路中的數(shù)據(jù)包最終跳出了黑客編程循環(huán),回到了“舊有”的連接(此時(shí)其實(shí)是不同于前者的現(xiàn)有連接),顯然會發(fā)生對現(xiàn)有連接的干擾。
假設(shè)一個(gè)入侵者X有一種方法,能預(yù)測ISN S。在這種情況下,他可能將下列序號送給主機(jī)T來模擬客戶的真正的ISN S:
X---S: SYN(ISN X ) ,SRC = T
S---T: SYN(ISN S ) ,ACK(ISN X )
X---S: ACK(ISN S ) ,SRC =T
盡管消息S*T并不到X,但是X能知道它的內(nèi)容,因此能發(fā)送數(shù)據(jù)。如果X要對一個(gè)連接實(shí)施攻擊,這個(gè)連接允許執(zhí)行命令,那么另外的命令也能執(zhí)行。
那么怎樣產(chǎn)生隨機(jī)的ISN?在Berkeley系統(tǒng),最初的序列號變量由一個(gè)常數(shù)每秒加一產(chǎn)生,等到這個(gè)常數(shù)一半時(shí),就開始一次連接。這樣,如果開始了一個(gè)合法連接,并觀察到一個(gè)ISN S在用,便可以計(jì)算,有很高可信度,ISN S 用在下一個(gè)連接企圖。
Morris 指出,回復(fù)消息
S---T:SYN(ISN S ) ,ACK(ISN X )
事實(shí)上并不消失,真正主機(jī)將收到它,并試圖重新連接。這并不是一個(gè)嚴(yán)重的障礙。
Morris發(fā)現(xiàn),通過模仿一個(gè)在T上的端口,并向那個(gè)端口請求一個(gè)連接,他就能產(chǎn)生序列溢出,從而讓它看上去S*T消息丟失了。另外一個(gè)方法,可以等待知道T關(guān)機(jī)或重新啟動(dòng)。
下面詳細(xì)的介紹一下。
IP欺騙
IP欺騙由若干步驟組成,這里先簡要地描述一下,隨后再做詳盡地解釋。先做以下假定:首先,目標(biāo)主機(jī)已經(jīng)選定。其次,信任模式已被發(fā)現(xiàn),并找到了一個(gè)被目標(biāo)主機(jī)信任的主機(jī)。黑客為了進(jìn)行IP欺騙,進(jìn)行以下工作:使得被信任的主機(jī)喪失工作能力,同時(shí)采樣目標(biāo)主機(jī)發(fā)出的TCP 序列號,猜測出它的數(shù)據(jù)序列號。然后,偽裝成被信任的主機(jī),同時(shí)建立起與目標(biāo)主機(jī)基于地址驗(yàn)證的應(yīng)用連接。如果成功,黑客可以使用一種簡單的命令放置一個(gè)系統(tǒng)后門,以進(jìn)行非授權(quán)操作。
使被信任主機(jī)喪失工作能力
一旦發(fā)現(xiàn)被信任的主機(jī),為了偽裝成它,往往使其喪失工作能力。由于攻擊者將要代替真正的被信任主機(jī),他必須確保真正被信任的主機(jī)不能接收到任何有效的網(wǎng)絡(luò)數(shù)據(jù),否則將會被揭穿。有許多方法可以做到這些。這里介紹“TCP SYN 淹沒”。
前面已經(jīng)談到,建立TCP連接的第一步就是客戶端向服務(wù)器發(fā)送SYN請求。 通常,服務(wù)器將向客戶端發(fā)送SYN/ACK 信號。這里客戶端是由IP地址確定的??蛻舳穗S后向服務(wù)器發(fā)送ACK,然后數(shù)據(jù)傳輸就可以進(jìn)行了。然而,TCP處理模塊有一個(gè)處理并行SYN請求的最上限,它可以看作是存放多條連接的隊(duì)列長度。其中,連接數(shù)目包括了那些三步握手法沒有最終完成的連接,也包括了那些已成功完成握手,但還沒有被應(yīng)用程序所調(diào)用的連接。如果達(dá)到隊(duì)列的最上限,TCP將拒絕所有連接請求,直至處理了部分連接鏈路。因此,這里是有機(jī)可乘的。
黑客往往向被進(jìn)攻目標(biāo)的TCP端口發(fā)送大量SYN請求,這些請求的源地址是使用一個(gè)合法的但是虛假的IP地址(可能使用該合法IP地址的主機(jī)沒有開機(jī))。而受攻擊的主機(jī)往往是會向該IP地址發(fā)送響應(yīng)的,但可惜是杳無音信。與此同時(shí)IP包會通知受攻擊主機(jī)的TCP:該主機(jī)不可到達(dá),但不幸的是TCP會認(rèn)為是一種暫時(shí)錯(cuò)誤,并繼續(xù)嘗試連接(比如繼續(xù)對該IP地址進(jìn)行路由,發(fā)出SYN/ACK數(shù)據(jù)包等等),直至確信無法連接。
當(dāng)然,這時(shí)已流逝了大量的寶貴時(shí)間。值得注意的是,黑客們是不會使用那些正在工作的IP地址的,因?yàn)檫@樣一來,真正IP持有者會收到SYN/ACK響應(yīng),而隨之發(fā)送RST給受攻擊主機(jī)
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章