TCP/IP狀態(tài)轉(zhuǎn)移
4.1 TCP狀態(tài)轉(zhuǎn)移圖和定時器
應(yīng)于連接建立或終止、流量控制和數(shù)據(jù)傳輸。幾類主要的定時器及其功能如下TCP狀態(tài)轉(zhuǎn)移圖控制了一次連接的初始化、建立和終止,該圖由定義的狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移弧構(gòu)成。TCP狀態(tài)轉(zhuǎn)移圖與定時器密切相關(guān),不同的定時器:
①連接定時器:在連接建立階段,當(dāng)發(fā)送了SYN包后,就啟動連接定時器。如果在75秒內(nèi)沒有收到應(yīng)答,則放棄連接建立。
?、贔IN-WAIT-2定時器:當(dāng)連接從FIN-WAIT-1狀態(tài)轉(zhuǎn)移到FIN-WAIT-2狀態(tài)時,將一個 FIN-WAIT-2定時器設(shè)置為10分鐘。如果在規(guī)定時間內(nèi)該連接沒有收到一個帶有置位FIN的TCP包,則定時器超時,再定時為75秒。如果在該時間段內(nèi)仍無FIN包到達(dá),則放棄該連接。
?、跿IME-WAIT定時器:當(dāng)連接進(jìn)入TIME-WAIT狀態(tài)時,該定時器被激活。當(dāng)定時器超時時,與該連接相關(guān)的內(nèi)核數(shù)據(jù)塊被刪除,連接終止。
④維持連接定時器:其作用是預(yù)測性地檢測連接的另一端是否仍為活動狀態(tài)。如果設(shè)置了SO-KEEPALIVE套接字選擇項(xiàng),則TCP機(jī)狀態(tài)是ESTABLISHED或CLOSE-WAIT。
4.2 網(wǎng)絡(luò)入侵方式
4.2.1 偽造IP地址
入侵者使用假IP地址發(fā)送包,利用基于IP地址證實(shí)的應(yīng)用程序。其結(jié)果是未授權(quán)的遠(yuǎn)端用戶進(jìn)入帶有防火墻的主機(jī)系統(tǒng)。
假設(shè)有兩臺主機(jī)A、B和入侵者控制的主機(jī)X。假設(shè)B授予A某些特權(quán),使得A能夠獲得B所執(zhí)行的一些操作。X的目標(biāo)就是得到與B相同的權(quán)利。為了實(shí)現(xiàn)該目標(biāo),X必須執(zhí)行兩步操作:首先,與B建立一個虛假連接;然后,阻止A向B報告網(wǎng)絡(luò)證實(shí)系統(tǒng)的問題。主機(jī)X必須假造A的IP地址,從而使B相信從X發(fā)來的包的確是從A發(fā)來的。
我們同時假設(shè)主機(jī)A和B之間的通信遵守TCP/IP的三次握手機(jī)制。握手方法是:
A→:SYN(序列號=M)
B→A:SYN(序列號=N),ACK(應(yīng)答序號=M+1)
A→B:ACK(應(yīng)答序號=N+1)
主機(jī)X偽造IP地址步驟如下:首先,X冒充A,向主機(jī)B發(fā)送一個帶有隨機(jī)序列號的SYN包。主機(jī)B響應(yīng),向主機(jī)A發(fā)送一個帶有應(yīng)答號的SYN+ACK包、該應(yīng)答號等于原序列號加1。同時,主機(jī)B產(chǎn)生自己發(fā)送包序列號,并將其與應(yīng)答號一起發(fā)送。為了完成三次握手,主機(jī)X需要向主機(jī)B回送一個應(yīng)答包,其應(yīng)答號等于主機(jī)B向主機(jī)A發(fā)送的包序列號加1。假設(shè)主機(jī)X與A和B不同在一個子網(wǎng)內(nèi),則不能檢測到B的包,主機(jī)X只有算出B的序列號,才能創(chuàng)建TCP連接。其過程描述如下:
X→B:SYN(序列號=M),SRC=A
B→A:SYN(序列號=N),ACK(應(yīng)答號=M+1)
X→B:ACK(應(yīng)答號=N+1),SRC=A
同時,主機(jī)X應(yīng)該阻止主機(jī)A響應(yīng)主機(jī)B的包。為此,X可以等到主機(jī)A因某種原因終止運(yùn)行,或者阻塞主機(jī)A的操作系統(tǒng)協(xié)議部分,使它不能響應(yīng)主機(jī)B。 一旦主機(jī)X完成了以上操作,它就可以向主機(jī)B發(fā)送命令。主機(jī)B將執(zhí)行這些命令,認(rèn)為他們是由合法主機(jī)A發(fā)來的。
4.2.2 TCP狀態(tài)轉(zhuǎn)移的問題
上述的入侵過程,主機(jī)X是如何阻止主機(jī)A向主機(jī)B發(fā)送響應(yīng)在的,主機(jī)調(diào)通過發(fā)送一系列的SYN包,但不讓A向調(diào)發(fā)送SYN-ACK包而中止主機(jī)A的登錄端口。如前所述,TCP維持一個連接建立定時器。如果在規(guī)定時間內(nèi)(通常為75秒)不能建立連接,則TCP將重置連接。在前面的例子中,服務(wù)器端口是無法在75秒內(nèi)作出響應(yīng)的。
下面我們來討論一下主機(jī)X和主機(jī)A之間相互發(fā)送的包序列。X向A發(fā)送一個包,其SYN位和FIN位置位,A向X發(fā)送ACK包作為響應(yīng): X→A:SYN FIN(系列號=M)A→X:ACK(應(yīng)答序號=M+1)從上面的狀態(tài)轉(zhuǎn)移可以看出,A開始處于監(jiān)聽(LISTEN)狀態(tài)。當(dāng)它收到來自X的包后,就開始處理這個包。值得注意的是,在TCP協(xié)議中,關(guān)于如何處理SYN和FIN同時置位的包并未作出明確的規(guī)定。我們假設(shè)它首先處理SYN標(biāo)志位,轉(zhuǎn)移到SYN-RCVD狀態(tài)。然后再處理FIN標(biāo)志位,轉(zhuǎn)移到CLOSE-WAIT狀態(tài)。如果前一個狀態(tài)是ESTABLISHED,那么轉(zhuǎn)移到CLOSE-WAIT狀態(tài)就是正常轉(zhuǎn)移。但是,TCP協(xié)議中并未對從SYN-RCVD狀態(tài)到CLOSE-WAIT狀態(tài)的轉(zhuǎn)移作出定義。但在幾種TCP應(yīng)用程序中都有這樣的轉(zhuǎn)移,例如開放系統(tǒng)SUN OS4.2, SUR4和ULTRX4.3
因此,在這些TCP應(yīng)用程序中存在一條TCP協(xié)議中未作定義的從狀態(tài)SYN-RCVD到狀態(tài)CLOSE-WAIT的轉(zhuǎn)移弧,在上述入侵例子中,由于三次握手沒能徹底完成,因此并未真正建立TCP連接,相應(yīng)的網(wǎng)絡(luò)應(yīng)用程序并未從核心內(nèi)獲得連接。但是,主機(jī)A的TCP機(jī)處CLOSE-WAIT狀態(tài),因此它可以向X發(fā)送一個FIN包終止連接。這個半開放連接保留在套接字偵聽隊(duì)列中,而且應(yīng)用進(jìn)程不發(fā)送任何幫助TCP執(zhí)行狀態(tài)轉(zhuǎn)移的消息。因此,主機(jī)A的TCP機(jī)被鎖在了CL0SE-WAIT狀態(tài)。如果維持活動定時器特征被使用,通常2小時后TCP將會重置連接并轉(zhuǎn)移到CLOSED狀態(tài)。當(dāng)TCP機(jī)收到來自對等主機(jī)的RST時,就從TABLISHED,F(xiàn)INWAIT-1和FIN-WAIT-2狀態(tài)轉(zhuǎn)移到CLOSED狀態(tài)。這些轉(zhuǎn)移是很重要的,因?yàn)樗鼈冎刂肨CP機(jī)且中斷網(wǎng)絡(luò)連接。但是,由于到達(dá)的數(shù)據(jù)段只根據(jù)源IP地址和當(dāng)前隊(duì)列窗口號來證實(shí)。因此入侵者可以假裝成已建立了合法連接的一個主機(jī),然后向另一臺主機(jī)發(fā)送一個帶有適當(dāng)序列號的RST段,這樣就可以終止連接了!
從上面的分析我們可以看到幾種TCP應(yīng)用程序中都存在外部狀態(tài)轉(zhuǎn)移。這會給系統(tǒng)帶來嚴(yán)重的安全性問題。
4.2.3 定時器問題
正如前文所述,一旦進(jìn)入連接建立過程,則啟動連接定時器。如果在規(guī)定時間內(nèi)不能建立連接,則TCP機(jī)回到CLOSED狀態(tài)。
我們來分析一下主機(jī)A和主機(jī)X的例子。主機(jī)A向主機(jī)X發(fā)送一個SYN包,期待著回應(yīng)一個SYN-ACK包。假設(shè)幾乎同時,主機(jī)X想與主機(jī)A建立連接,向A發(fā)送一個SYN包。A和X在收到對方的SYN包后都向?qū)Ψ桨l(fā)送一個SYN-ACK包。當(dāng)都收到對方的SYN-ACK包后,就可認(rèn)為連接已建立。在本文中,假設(shè)當(dāng)主機(jī)收到對方的SYN包后,就關(guān)閉連接建立定時器。
X→A:SYN(序列號=M)
A→X:SYN(序列號=N)
X→A:SYN(序列號=M),ACK(應(yīng)答號=N+1)
A→X:SYN(序列號=N),ACK(應(yīng)答號=M+1)
?、僦鳈C(jī)X向主機(jī)A發(fā)送一個FTP請求。在X和A之間建立起一個TCP連接來傳送控制信號。主機(jī)A向X發(fā)送一個SYN包以啟動一個TCP連接用來傳輸數(shù)據(jù),其狀態(tài)轉(zhuǎn)移到SYN-SENT狀態(tài)。
?、诋?dāng)X收到來自A的SYN包時,它回送一個SYN包作為響應(yīng)。
③主機(jī)X收到來自A的SYN-ACK包,但不回送任何包。
④主機(jī)A期待著接收來自X的SYN-ACK。由于X不回送任何包,因此A被鎖在SYN-RCVD狀態(tài)。這樣,X就成功地封鎖了A的一個端口。
4.3 利用網(wǎng)絡(luò)監(jiān)控設(shè)備觀測網(wǎng)絡(luò)入侵
我們在局域網(wǎng)上安裝一個網(wǎng)絡(luò)監(jiān)控設(shè)備觀測通過網(wǎng)絡(luò)的包,從而判斷是否發(fā)生了網(wǎng)絡(luò)入侵。下面我們將討論在幾種入侵過程中網(wǎng)絡(luò)監(jiān)控設(shè)備可觀測到的序列包。
4.3.1 偽造IP地址
最初,網(wǎng)絡(luò)監(jiān)控設(shè)備會監(jiān)測到大量的TCP SYN包從某個主機(jī)發(fā)往A的登錄端口。主機(jī)A會回送相應(yīng)的SYN-ACK包。SYN包的目的是創(chuàng)建大量的與主機(jī)A的半開放的TCP連接,從而填滿了主機(jī)A的登錄端口連接隊(duì)列。
大量的TCP SYN包將從主機(jī)X經(jīng)過網(wǎng)絡(luò)發(fā)往主機(jī)B,相應(yīng)地有SYN-ACK包從主機(jī)B發(fā)往主機(jī)X。然后主機(jī)X將用RST包作應(yīng)答。這個SYN/SYN-ACK/RST包序列使得入侵者可以知道主機(jī)B的TCP序列號發(fā)生器的動作。
主機(jī)A向主機(jī)B發(fā)送一個SYN包。實(shí)際上,這是主機(jī)X發(fā)送的一個“偽造”包。收到這個包之后,主機(jī)B將向主機(jī)A發(fā)送相應(yīng)的SYN-ACK包。主機(jī)A向主機(jī)B發(fā)送ACK包。按照上述步驟,入侵主機(jī)能夠與主機(jī)B建立單向TCP連接。
4.3.2 虛假狀態(tài)轉(zhuǎn)移
當(dāng)入侵者試圖利用從SYN-RCVD到CLOSE-WAIT的狀態(tài)轉(zhuǎn)移長時間阻塞某服務(wù)器的一個網(wǎng)絡(luò)端口時,可以觀察到如下序列包:
?、購闹鳈C(jī)X到主機(jī)B發(fā)送一個帶有SYN和FIN標(biāo)志位置位的TCP包。
主機(jī)B首先處理SYN標(biāo)志,生成一個帶有相應(yīng)ACK標(biāo)志位置位的包,并使?fàn)顟B(tài)轉(zhuǎn)移到SYN-RCVD,然后處理FIN標(biāo)志,使?fàn)顟B(tài)轉(zhuǎn)移到CLOSE-WAIT,并向X回送ACK包。
?、谥鳈C(jī)X不向主機(jī)B發(fā)送其它任何包。主機(jī)的TCP機(jī)將固定在CLOSE-WAIT狀態(tài)。直到維持連接定時器將其重置為CLOSED狀態(tài)。
因此,如果網(wǎng)絡(luò)監(jiān)控設(shè)備發(fā)現(xiàn)一串SYN-FIN/ACK包,可推斷入侵者正在阻塞主機(jī)B的某個端口。
4.3.3 定時器問題
如果一入侵者企圖在不建立連接的情況下使連接建立定時器無效,我們可以觀察到以下序列包:
?、僦鳈C(jī)X從主機(jī)B收到一個TCP SYN包。
?、谥鳈C(jī)X向主機(jī)B回送一個SYN包。
主機(jī)X不向主機(jī)B發(fā)送任何ACK包。因此,B被阻塞在SYN-RCVD狀態(tài),無法響應(yīng)來自其它客戶機(jī)的連接請求。
TCP/IP協(xié)議的安全隱患
造成操作系統(tǒng)漏洞的一個重要原因,就是協(xié)議本身的缺陷給系統(tǒng)帶來的攻擊點(diǎn)。網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)之間為了互聯(lián)共同遵守的規(guī)則。目前的互聯(lián)網(wǎng)絡(luò)所采用的主流協(xié)議TCP/IP,由于在其設(shè)計(jì)初期人們過分強(qiáng)調(diào)其開發(fā)性和便利性,沒有仔細(xì)考慮其安全性,因此很多的網(wǎng)絡(luò)協(xié)議都存在嚴(yán)重的安全漏洞,給Internet留下了許多安全隱患。另外,有些網(wǎng)絡(luò)協(xié)議缺陷造成的安全漏洞還會被黑客直接用來攻擊受害者系統(tǒng)。本文就TCP/IP協(xié)議自身所存在的安全問題和協(xié)議守護(hù)進(jìn)程進(jìn)行了詳細(xì)討論,指出針對這些安全隱患的攻擊。
1 TCP協(xié)議的安全問題
TCP使用三次握手機(jī)制來建立一條連接,握手的第一個報文為SYN包;第二個報文為SYN/ACK包,表明它應(yīng)答第一個SYN包同時繼續(xù)握手的過程;第三個報文僅僅是一個應(yīng)答,表示為ACK包。若A放為連接方,B為響應(yīng)方,其間可能的威脅有:
1. 攻擊者監(jiān)聽B方發(fā)出的SYN/ACK報文。
2. 攻擊者向B方發(fā)送RST包,接著發(fā)送SYN包,假冒A方發(fā)起新的連接。
3. B方響應(yīng)新連接,并發(fā)送連接響應(yīng)報文SYN/ACK。
4. 攻擊者再假冒A方對B方發(fā)送ACK包。
這樣攻擊者便達(dá)到了破壞連接的作用,若攻擊者再趁機(jī)插入有害數(shù)據(jù)包,則后果更嚴(yán)重。
TCP協(xié)議把通過連接而傳輸?shù)臄?shù)據(jù)看成是字節(jié)流,用一個32位整數(shù)對傳送的字節(jié)編號。初始序列號(ISN)在TCP握手時產(chǎn)生,產(chǎn)生機(jī)制與協(xié)議實(shí)現(xiàn)有關(guān)。攻擊者只要向目標(biāo)主機(jī)發(fā)送一個連接請求,即可獲得上次連接的ISN,再通過多次測量來回傳輸路徑,得到進(jìn)攻主機(jī)到目標(biāo)主機(jī)之間數(shù)據(jù)包傳送的來回時間RTT。已知上次連接的ISN和RTT,很容易就能預(yù)測下一次連接的ISN。若攻擊者假冒信任主機(jī)向目標(biāo)主機(jī)發(fā)出TCP連接,并預(yù)測到目標(biāo)主機(jī)的TCP序列號,攻擊者就能偽造有害數(shù)據(jù)包,使之被目標(biāo)主機(jī)接受。
IP協(xié)議的安全問題
IP協(xié)議在互連網(wǎng)絡(luò)之間提供無連接的數(shù)據(jù)包傳輸。IP協(xié)議根據(jù)IP頭中的目的地址項(xiàng)來發(fā)送IP數(shù)據(jù)包。也就是說,IP路由IP包時,對IP頭中提供的源地址不作任何檢查,并且認(rèn)為IP頭中的源地址即為發(fā)送該包的機(jī)器的IP地址。這樣,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會被非法入侵。其中最重要的就是利用IP欺騙引起的各種攻擊。
以防火墻為例,一些網(wǎng)絡(luò)的防火墻只允許網(wǎng)絡(luò)信任的IP數(shù)據(jù)包通過。但是由于IP地址不檢測IP數(shù)據(jù)包中的IP源地址是否為放送該包的源主機(jī)的真實(shí)地址,攻擊者可以采用IP源地址欺騙的方法來繞過這種防火墻。另外有一些以IP地址作為安全權(quán)限分配依據(jù)的網(wǎng)絡(luò)應(yīng)用,攻擊者很容易使用IP源地址欺騙的方法獲得特權(quán),從而給被攻擊者造成嚴(yán)重的損失。事實(shí)上,每一個攻擊者都可以利用IP不檢驗(yàn)IP頭源地址的特點(diǎn),自己填入偽造的IP地址來進(jìn)行攻擊,使自己不被發(fā)現(xiàn)。
評論