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地址來進行攻擊,使自己不被發現。
評論
查看更多