FTP協議分析

 根據是使用Port模式還是Passive模式,FTP使用不同的TCP端口號,在詳細描述FTP前,我們來簡單討論一下TCP端口號的一些基本概念。TCP使用端口號來標識所發送和接收的應用,端口號可以幫助TCP來分離字節流並且幫相應字節傳遞給正確的應用程序。
  TCP端口號可以是半永久的和暫時的。服務器端監聽在半永久的端口上來讓客戶端訪問。客戶端使用暫時的端口在本地標識一個對話,客戶端端口只在使用TCP服務時候才存在,而服務器端口只要服務器在運行就一直在監聽。
  TCP端口可以歸爲3類:
  1、衆所周知的端口來標識在TCP上運行的標準服務,包括FTP、HTTP、TELNET、SMTP等,這些端口號碼範圍爲0-1023;
  2、註冊端口號用來標識那些已經向IANA(Internet Assigned Numbers Assigned Numbers Authority)註冊的應用,註冊端口號爲1024-49151;
  3、私有端口號是非註冊的並且可以動態地分配給任何應用,私有端口爲49152-65535;註冊的端口號本來打算只給註冊的應用使用,可近年來端口號已經陷入了到達極限的困境,你可能會看到本來應該是給註冊應用使用的註冊端口被非註冊應用用做暫時的端口。RFC1700詳細標註了衆所周知的和註冊的端口號,然而不幸的是,這個RFC文檔自從1994年以來一直沒有被更新,然後你仍可以從IANA得到一個及時更新的端口列表,詳細URL爲:
  [url]http://www.iana.org/assignments/port-numbers[/url]
  >>2.0 FTP Port模式和FTP Passive模式
  當你對一個FTP問題進行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive 模式。因爲這兩種行爲迥異,所以這兩種模式引起的問題也不同;在過去,客戶端缺省爲active(port)模式;近來,由於Port模式的安全問題,許多客戶端的FTP應用缺省爲Passive模式。
  >>2.1 FTP Port模式
  Port模式的FTP步驟如下:
  1、 客戶端發送一個TCP SYN(TCP同步)包給服務器段衆所周知的FTP控制端口21,客戶端使用暫時的端口作爲它的源端口;
  2、 服務器端發送SYN ACK(同步確認)包給客戶端,源端口爲21,目的端口爲客戶端上使用的暫時端口;
  3、 客戶端發送一個ACK(確認)包;客戶端使用這個連接來發送FTP命令,服務器端使用這個連接來發送FTP應答;
  4、 當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求,客戶端軟件使用PORT命令,這個命令包含了一個暫時的端口,客戶端希望服務器在打開一個數據連接時候使用這個暫時端口;PORT命令也包含了一個IP地址,這個IP地址通常是客戶自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客戶端告訴服務器端打開與另臺主機的連接;
  5、 服務器端發送一個SYN包給客戶端的暫時端口,源端口爲20,暫時端口爲客戶端在PORT命令中發送給服務器端的暫時端口號;
  6、 客戶端以源端口爲暫時端口,目的端口爲20發送一個SYN ACK包;
  7、 服務器端發送一個ACK包;
  8、 發送數據的主機以這個連接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都需要對方進行ACK確認(注:因爲TCP協議是一個面向連接的協議)
  9、 當數據傳輸完成以後,發送數據的主機以一個FIN命令來結束數據連接,這個FIN命令需要另一臺主機以ACK確認,另一臺主機也發送一個FIN命令,這個FIN命令同樣需要發送數據的主機以ACK確認;
  10、 客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束後,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。
        FTP Port模式會給網絡管理人員在許多方面帶來很多問題,首先,在PORT命令消息中的IP地址和端口號的編碼不是直白地顯示。另外,應用層的協議命令理論上不應該包含網絡地址信息(注:IP地址),因爲這打破了協議層的原則並且可能導致協同性和安全性方面的問題。 
  當使用FTP時候,網絡中的防火牆必須要聲明相應的端口,防火牆必須要跟蹤FTP對話然後檢查PORT命令,防火牆必須要參與從服務器端到客戶端在PORT命令中指定的端口連接的建立過程。如果網絡中使用了NAT(注:網絡地址翻譯),那麼NAT的網關同樣也需要聲明相應的端口,網關需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址,然後重新計算TCP的Checksum ;如果網關沒有正確地執行這個操作,FTP就失敗了。
  ***可能會利用FTP支持第三方特性這一特點,在PORT命令中設置IP地址和端口號參數來指定一臺目標主機的地址和端口號(有時候稱這種***爲FTP反彈***),例如***可以讓一臺FTP 服務器不斷地從它的源端口20發送TCP SYN包給一系列目的端口,讓FTP服務器看起來正在進行端口掃描,目的主機不知道***來自***的主機,看起來***象是來自FTP服務器。一些常用的FTP應用在PORT命令中設置地址爲0.0.0.0,這樣做的意圖是讓FTP服務器只需要與打開控制連接的相同客戶進行數據連接,設置地址爲0.0.0.0可能會讓防火牆不知所措。例如,CISCO PIX IOS 6.0以上版本的PIX(注:CISCO硬件防火牆設備,6.0以上版本爲其修正了相關的FTP協議)要求數據連接的IP地址與已經存在的控制連接的IP地址必須相同。這樣做的原因是防止***用PORT命令來***別的機器,雖然一些FTP應用設置IP地址爲0.0.0.0不是有意圖的***,但在PIX修正協議環境下的確引起了一些問題,同時對其他不允許第三方模式和避免FTP反彈***的防火牆來說,這也
        >>2.2 FTP Passive模式
  下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與Port模式FTP最後三步相同。
  1、客戶端發送一個TCP SYN(TCP同步)包給服務器段衆所周知的FTP控制端口21,客戶端使用暫時的端口作爲它的源端口;
  2、服務器端發送SYN ACK(同步確認)包給客戶端,源端口爲21,目的端口爲客戶端上使用的暫時端口;
  3、客戶端發送一個ACK(確認)包;客戶端使用這個連接來發送FTP命令,服務器端使用這個連接來發送FTP應答;
  4、當用戶請求一個列表(List)或者發送或接收文件時候,客戶端軟件發送PASV命令給服務器端表明客戶端希望進入Passive模式;
  5、服務器端進行應答,應答包括服務器的IP地址和一個暫時的端口,這個暫時的端口是客戶端在打開數據傳輸連接時應該使用的端口;
  6、客戶端發送一個SYN包,源端口爲客戶端自己選擇的一個暫時端口,目的端口爲服務器在PASV 應答命令中指定的暫時端口號;
  7、服務器端發送SYN ACK包給客戶端,目的端口爲客戶端自己選擇的暫時端口,源端口爲PASV 應答中指定的暫時端口號;
  8、客戶端發送一個ACK包;
  9、發送數據的主機以這個連接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送( 一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都需要對方進行ACK確認;
  10、當數據傳輸完成以後,發送數據的主機以一個FIN命令來結束數據連接,這個FIN命令需要另一臺主機以ACK確認,另一臺主機也發送一個FIN命令,這個FIN命令同樣需要發送數據的主機以ACK確認;
  11、客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束後,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。 
  一個PASV請求要求服務器在服務器選擇的一個新的端口上接受數據連接,PASV命令沒有任何參數,服務器端的迴應只是一行顯示服務器IP地址和服務器接受連接的TCP端口號。大多數人認爲在防火牆網絡環境中Passive模式比Port模式的問題小,但我們注意到在Passive 模式下,客戶端打開一個暫時的目的端口連接,一些防火牆或者CISCO設備的訪問列表(ACL)可能會阻止這種連接,同樣服務器的迴應也是從一個暫時的端口到一個暫時的端口,防火牆或者CISCO的訪問列表也會阻止這種連接。在CISCO路由器上你可以用訪問列表關鍵字"established "來避免第二個問題,"established"關鍵字告訴路由器允許帶ACK字端的包通過,服務器端的SYN ACK包帶有ACK字端。在新版本PIX IOS中也可以通過fixit關鍵字建立針對ftp協議的深層狀態檢測過濾,其他大多數狀態檢測防火牆例如LinuxNetfilters也支持ftp協議的狀態檢測,進行準確的PASV動態端口過濾。
        >>2.3 用戶名和口令的明文傳輸
  FTP另一個聲名狼藉的問題是它以明文方式發送用戶名和口令,也就是不加密地發送。任何人只要在網絡中合適的位置放置一個協議分析儀就可以看到用戶名和口令;FTP發送的數據也是以明文方式傳輸,通過對ftp連接的監控和數據收集就可以收集和重現ftp的數據傳輸並實現協議連接回放。事實上很多用戶把相同的用戶名和口令用在不同的應用中,這樣這個問題可能看起來更爲糟糕;如果***收集到FTP口令,他們也可能就得到了你在線帳號或者其他一些機密數據的口令
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章