|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來(lái)的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 TCP/IP序列號(hào)生成方法
TCP的Initial Sequence Number(ISN)的預(yù)測(cè)
(圖1)
正常的TCP連接基于一個(gè)三次握手(3-way handshake),一個(gè)客戶端(Client)向服務(wù)器(Server)發(fā)送一個(gè)初始化序列號(hào)ISNc, 隨后,服務(wù)器相應(yīng)這個(gè)客戶端ACK(ISNc),并且發(fā)送自己的初始化序列號(hào)ISNs,接著,客戶端響應(yīng)這個(gè)ISNs(如下圖),三次握手完成。
C ---〉S: (ISNc)
S ---〉C: ACK(ISNc)+ ISNs
C ---〉S: ACK(ISNs)
C ---〉S: data
and / or
S ---〉C: data
下面,我以Windows2000 Advanced Server為例,來(lái)說(shuō)一下兩臺(tái)主機(jī)是如何進(jìn)行三次握手。
(圖2)
(圖3)
我們可以看到:
1) Smartboy首先發(fā)送一個(gè)seq:32468329的包給服務(wù)器202.116.128.6。
2) 然后, 202.116.128.6響應(yīng)主機(jī)Smartboy, 它送給Smartboy自己的
seq:3333416325 而且響應(yīng)Smartboy的ack:3240689240。
3) Smartboy再響應(yīng)服務(wù)器202.116.128.6, seq:3240689240, ack:3333416326。
三次握手完畢,兩臺(tái)幾建立起連接。
可以看出,在三次握手協(xié)議中,Clinet一定要監(jiān)聽(tīng)服務(wù)器發(fā)送過(guò)來(lái)的ISNs, TCP使用的sequence number是一個(gè)32位的計(jì)數(shù)器,從0-4294967295。TCP為每一個(gè)連接選擇一個(gè)初始序號(hào)ISN,為了防止因?yàn)檠舆t、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時(shí)間變化的規(guī)律,對(duì)于成功地進(jìn)行IP欺騙攻擊很重要。
在Unix系統(tǒng)里,基于遠(yuǎn)程過(guò)程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進(jìn)行安全校驗(yàn),其實(shí)質(zhì)是僅僅根據(jù)源IP地址進(jìn)行用戶身份確認(rèn),以便允許或拒絕用戶RPC。這就給與了那些攻擊者進(jìn)行IP地址欺騙的機(jī)會(huì)。
讓我們看X是如何冒充T來(lái)欺騙S,從而建立一個(gè)非法連接 :
X---->S: SYN(ISNx ) , SRC = T
S---->T: SYN(ISNs ) , ACK(ISNT) (*)
X---->S: ACK(ISNs+1 ) , SRC = T (**)
X---->S: ACK(ISNs +1) , SRC = T, 攻擊命令(可能是一些特權(quán)命令)
但是,T必須要在第(**)中給出ISNs, 問(wèn)題是ISNs在第(*)步中發(fā)給了T(X當(dāng)然很難截取到),幸運(yùn)的是,TCP協(xié)議有一個(gè)約定: ISN變量每秒增加250,000次,這個(gè)增加值在許多版本比較舊的操作系統(tǒng)中都是一個(gè)常量,在FreeBSD4.3中是125000次每秒,這就給X一個(gè)可乘之機(jī)。
看一下X是如何猜出ISNs :
a、首先, X發(fā)送一個(gè)SYN包來(lái)獲取服務(wù)器現(xiàn)在的ISNs
X ---〉S: (ISNx)
S ---〉X: ACK(ISNx)+ ISNs# (1)
b、緊接著,X冒充T向服務(wù)器發(fā)送SYN包
X ---〉S: SYN(ISNx ) , SRC = T (2)
c、于是,服務(wù)器發(fā)出一個(gè)響應(yīng)包給T(這個(gè)包X是收不到的)
S ---〉T: SYN(ISNs$) , ACK(ISNT ) (3)
d、X計(jì)算ISNs$:
ISNs$ = ISNs# + RTT×Increment of ISN (4)
其中,RTT(Round Trip Time),是一個(gè)包往返X和S所用的時(shí)間,可以通過(guò)Ping 來(lái)得到。
(圖4)
上圖顯示了round trip times (RTT) 大概是0。
Increment of ISN是協(xié)議棧的初始序列號(hào)每秒鐘增加的值,以Unix為例,當(dāng)沒(méi)有外部連接發(fā)生時(shí),服務(wù)器的ISN每秒增加128,000,有連接的時(shí)候,服務(wù)器的ISN每秒增加64,000。
e、于是,
X ---> S : ACK(ISNs$) 。俺淇尚胖鳈C(jī)成功了)
X ---> S : 惡意的命令或竊取機(jī)密消息的命令
在評(píng)價(jià)以下的解決方案時(shí)有幾點(diǎn)要注意:
1.該解決方案是否很好地滿足TCP的穩(wěn)定性和可操作性的要求? 2.該解決方案是否容易實(shí)現(xiàn)? 3.該解決方案對(duì)性能的影響如何? 4.該解決方案是否經(jīng)得起時(shí)間的考驗(yàn)?
以下的幾種方案各有各的優(yōu)點(diǎn)和缺點(diǎn),它們都是基于增強(qiáng)ISN生成器的目標(biāo)提出的。
配置和使用密碼安全協(xié)議
TCP的初始序列號(hào)并沒(méi)有提供防范連接攻擊的相應(yīng)措施。TCP的頭部缺少加密選項(xiàng)用于強(qiáng)加密認(rèn)證,于是,一種叫做IPSec的密碼安全協(xié)議的技術(shù)提出了。IPSec提供了一種加密技術(shù)(End to end cryptographic),使系統(tǒng)能驗(yàn)證一個(gè)包是否屬于一個(gè)特定的流。這種加密技術(shù)是在網(wǎng)絡(luò)層實(shí)現(xiàn)的。其它的在傳輸層實(shí)現(xiàn)的解決方案(如SSL/TLS和SSH1/SSH2), 只能防止一個(gè)無(wú)關(guān)的包插入一個(gè)會(huì)話中,但對(duì)連接重置(拒絕服務(wù))卻無(wú)能為力,原因是因?yàn)檫B接處理是發(fā)生在更低的層。IPSec能夠同時(shí)應(yīng)付著兩種攻擊(包攻擊和連接攻擊)。它直接集成在網(wǎng)絡(luò)層的安全模型里面。
上面的解決方案并不需要對(duì)TCP協(xié)議做任何得修改,RFC2385(“基于TCP MD5簽名選項(xiàng)的BGP會(huì)話保護(hù))和其他的技術(shù)提供了增加TCP頭部的密碼保護(hù),但是,卻帶來(lái)了收到拒絕服務(wù)攻擊和互操作性和性能方面的潛在威脅。使用加密安全協(xié)議有幾個(gè)優(yōu)于其它方案的地方。TCP頭部加密防止了Hijacking和包擾亂等攻擊行為,而TCP層仍然能夠提供返回一個(gè)簡(jiǎn)單增加ISN的機(jī)制,使方案提供了最大程度的可靠性。但實(shí)現(xiàn)IPSec非常復(fù)雜,而且它需要客戶機(jī)支持,考慮到可用性,許多系統(tǒng)都選擇使用RFC 1948。
使用RFC1948
在RFC1948中,Bellovin提出了通過(guò)使用4-tuples的HASH單向加密函數(shù),能夠使遠(yuǎn)程攻擊者無(wú)從下手(但不能阻止同一網(wǎng)段的攻擊者通過(guò)監(jiān)聽(tīng)網(wǎng)絡(luò)上的數(shù)據(jù)來(lái)判斷ISN)。
Newsham 在他的論文 [ref_newsham]中提到:
RFC 1948 [ref1]提出了一種不容易攻擊(通過(guò)猜測(cè))的TCP ISN的生成方法。此方法通過(guò)連接標(biāo)識(shí)符來(lái)區(qū)分序列號(hào)空間。每一個(gè)連接標(biāo)識(shí)符由本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口來(lái)組成,并由一個(gè)函數(shù)計(jì)算標(biāo)識(shí)符分的序列號(hào)地址空間偏移值(唯一)。此函數(shù)不能被攻擊者獲得,否則,攻擊者可以通過(guò)計(jì)算獲得ISN。于是,ISN就在這個(gè)偏移值上增加。ISN的值以這種方式產(chǎn)生能夠抵受上面提到的對(duì)ISN的猜測(cè)攻擊。
一旦全局ISN空間由上述方法來(lái)生成,所有的對(duì)TCP ISN的遠(yuǎn)程攻擊都變得不合實(shí)際。但是,需要指出的,即使我們依照RFC 1948來(lái)實(shí)現(xiàn)ISN的生成器,攻擊者仍然可以通過(guò)特定的條件來(lái)獲得ISN(這一點(diǎn)在后面敘述).
另外,用加密的強(qiáng)哈希算法(MD5)來(lái)實(shí)現(xiàn)ISN的生成器會(huì)導(dǎo)致TCP的建立時(shí)間延長(zhǎng)。所以,有些生成器(如Linux kernel )選擇用減少了輪數(shù)的MD4函數(shù)來(lái)提供足夠好的安全性同時(shí)又把性能下降變得最低。削弱哈希函數(shù)的一個(gè)地方是每幾分鐘就需要對(duì)生成器做一次re-key 的處理,經(jīng)過(guò)了一次re-key的處理后,安全性提高了,但是,RFC793提到的可靠性卻變成另一個(gè)問(wèn)題。
我們已經(jīng)知道,嚴(yán)格符合RFC1948的ISN生成方法有一個(gè)潛在的危機(jī):
一個(gè)攻擊者如果以前合法擁有過(guò)一個(gè)IP地址,他通過(guò)對(duì)ISN進(jìn)行大量的采樣,可以估計(jì)到隨后的ISN的變化規(guī)律。在以后,盡管這個(gè)IP地址已經(jīng)不屬于此攻擊者,但他仍然可以通過(guò)猜測(cè)ISN來(lái)進(jìn)行IP欺騙。
以下,我們可以看到RFC 1948的弱點(diǎn):
ISN = M + F(sip, sport, dip, dport, )
其中
ISN 32位的初始序列號(hào)
M 單調(diào)增加的計(jì)數(shù)器
F 單向散列哈希函數(shù) (例如 MD4 or MD5)
sip 源IP地址
sport 源端口
dip 目的IP地址
dport 目的端口
哈希函數(shù)可選部分,使遠(yuǎn)程攻擊者更難猜到ISN.
ISN自身的值是按照一個(gè)常數(shù)值穩(wěn)定增加的,所以F()需要保持相對(duì)的穩(wěn)定性。而根據(jù)Bellovin 所提出的,是一個(gè)系統(tǒng)特定的值(例如機(jī)器的啟動(dòng)時(shí)間,密碼,初始隨機(jī)數(shù)等),這些值并不 會(huì)經(jīng)常變。
但是,如果Hash函數(shù)在實(shí)現(xiàn)上存在漏洞(我們無(wú)法保證一個(gè)絕對(duì)安全的Hash函數(shù),況且,它的實(shí)現(xiàn)又與操作系統(tǒng)密切相關(guān)),攻擊者就可以通過(guò)大量的采樣,來(lái)分析,其中,源IP地址,源端口,目的IP地址,目的端口都是不變的,這減少了攻擊者分析的難度。
Linux TCP的ISN生成器避免了這一點(diǎn)。它每5分鐘計(jì)算一次值,把泄漏的風(fēng)險(xiǎn)降到了最低。
有一個(gè)辦法可以做的更好:
取M = M + R(t)
ISN = M + F(sip, sport, dip, dport, )
其中
R(t) 是一個(gè)關(guān)于時(shí)間的隨機(jī)函數(shù)
很有必要這樣做,因?yàn)樗构粽卟聹y(cè)ISN的難度更大了(弱點(diǎn)在理論上還是存在的)。
網(wǎng)絡(luò)的神奇作用吸引著越來(lái)越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來(lái)越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢(shì),對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。
|