Sftp和ftp 區別、工作原理等(彙總ing)

Sftp和ftp over ssh2的區別

最近使用SecureFx,涉及了兩個不同的安全文件傳輸協議:
-sftp
-ftp over SSH2
這兩種協議是不同的。sftp是ssh內含的協議,只要sshd服務器啓動了,它就可用,它本身不需要ftp服務器啓動。ftp over SSH2則象一個二傳手。
 
1、SFTP的工作模式:
圖1顯示了SFTP的工作模式,它是作爲SSH2的一個子服務工作的。
圖 1 SFTP工作模式
2、FTP over SSH2
此協議還是基於ftp協議的。在此協議中SSH2服務器起了一個橋樑作用,把數據在客戶端和ftp之間轉發。ftp協議本身包括兩個通道,一個是控制通道,另一個是數據通道。
FTP over SSH2有兩種情況,半安全連接(Less Secure Connection)和安全連接(Full Secure Connection)。在半安全連接時,ftp客戶端先和SSH2服務器連接,在這個連接中無論控制通道和數據通道都是加密的。但是SSH2服務器和 ftp服務器之間就不是加密的了,如果ftp服務器運行在另外一臺機器上,SSH2服務器和ftp直接就是明文傳輸。見圖2。
 
圖 2半安全連接
 
圖3是安全連接模式的情形,SSH2服務器和FTP服務器在同一臺服務器上。
  
圖 3 安全連接




FTP(文件傳輸協議)工作原理

 

目前在網絡上,如果你想把文件和其他人共享。最方便的辦法莫過於將文件放FTP服務器上,然後其他人通過FTP客戶端程序來下載所需要的文件。

1、FTP架構

          如同其他的很多通訊協議,FTP通訊協議也採用客戶機 / 服務器(Client / Server )架構。用戶可以通過各種不同的FTP客戶端程序,藉助FTP協議,來連接FTP服務器,以上傳或者下載文件。


      
2、FTP通訊端口知識
          FTP服務器和客戶端要進行文件傳輸,就需要通過端口來進行。FTP協議需要的端口一般包括兩種:
       控制鏈路--------TCP端口21
          所有你發往FTP服務器的命令和服務器反饋的指令都是通過服務器上的21端口傳送的。
       數據鏈路--------TCP端口20
          數據鏈路主要是用來傳送數據的,比如客戶端上傳、下載內容,以及列目錄顯示的內容等。
3、FTP連接的兩種方式
          在數據鏈路的建立上,FTP         Server         爲了適應不同的網絡環境,支持兩種連接模式:主動模式(Port)和被動模式(Pasv)。其實這兩種連接模式主要是針對數據鏈路進行的,和控制鏈路無關。
       主動模式
          主動模式是這樣工作的:客戶端把自己的高位端口和服務器端口21建立控制鏈路。所有的控制命令比如Is或get都是通過這條鏈路傳送的。
          當客戶端需要服務器端給它傳送數據時,客戶端會發消息給服務器端,告訴自己的位置和打開的高位端口(一般大於1024的端口都就叫高位端口),等候服務器 的20端口和客戶端打開的端口進行連接,從而進行數據的傳輸。當服務器端收到信息後,就會和客戶端打開的端口連接,這樣數據鏈路就建立起來了。

          採用主動模式連接服務器的客戶端,當它位於NAT或者防火牆的保護之後時會碰到連接失敗的問題。這是因爲當防火牆接到服務器發送過來的信息的時候,並不知道應該發送給內部網絡中的哪一臺客戶端造成的。
      被動模式
         被動模式是這樣工作的:當客戶端發送數據請求後,服務器也會發信息給客戶端,告訴客戶端:服務器在本地打開了一個高位端口P,你現在來連接我吧。當客戶端收到該信息時,就會去連接服務器端的端口P,連接成功後,數據鏈路就建立了。

          從上面的解釋中我們可以看到,兩種模式主要的不同是數據連接建立的不同。對於Port模式,是客戶端在本地打開一個端口等服務器去連接建立數據連接,而Pasv模式就是服務器打開一個端口等待客戶端去建立一個數據連接。


淺析文件傳輸協議 (ftp) 的工作原理

 

起初,FTP並不是應用於IP網絡上的協議,而是ARPANEt網絡中計算機間的文件傳輸協議, ARPANET是美國國防部組建的老網絡,於1960-1980年使用。在那時, FTP的主要功能是在主機間高速可靠地傳輸文件。目前FTP仍然保持其可靠性,即使在今天,它還允許文件遠程存取。這使得用戶可以在某個系統上工作,而將 文件存貯在別的系統。例如,如果某用戶運行Web服務器,需要從遠程主機上取得HTML文件和CGI程序在本機上工作,他需要從遠程存儲站點獲取文件(遠 程站點也需安裝Web服務器)。當用戶完成工作後,可使用FTP將文件傳回到Web服務器。採用這種方法,用戶無需使用Telnet登錄到遠程主機進行工 作,這樣就使Web服務器的更新工作變得如此的輕鬆。

    FTP是TCP/IP的一種具體應用,它工作在OSI模型的第七層,TCP模型的第四層上,即應用層,使用TCP傳輸而不是UDP,這樣FTP客戶在和服 務器建立連接前就要經過一個被廣爲熟知的"三次握手"的過程,它帶來的意義在於客戶與服務器之間的連接是可靠的,而且是面向連接,爲數據的傳輸提供了可靠 的保證。

    下面,讓我們來看看,一個FTP客戶在和服務器連接是怎麼樣的一個過程(以標準的FTP端口號爲例)。

    首先,FTP並不像HTTP協議那樣,只需要一個端口作爲連接(HTTP的默認端口是80,FTP的默認端口是21),FTP需要2個端口,一個端口是作 爲控制連接端口,也就是21這個端口,用於發送指令給服務器以及等待服務器響應;另一個端口是數據傳輸端口,端口號爲20(僅PORT模式),是用來建立 數據傳輸通道的,主要有3個作用 


從客戶向服務器發送一個文件。 


從服務器向客戶發送一個文件。 


從服務器向客戶發送文件或目錄列表。 

    其次,FTP的連接模式有兩種,PORT和PASV。PORT模式是一個主動模式,PASV是被動模式,這裏都是相對於服務器而言的。爲了讓大家清楚的認識這兩種模式,朗月繁星分別舉例說明。
PORT模式

    當FTP客戶以PORT模式連接服務器時,他動態的選擇一個端口號(本次試驗是6015)連接服務器的21端口,注意這個端口號一定是1024以上的,因 爲1024以前的端口都已經預先被定義好,被一些典型的服務使用,當然有的還沒使用,保留給以後會用到這些端口的資源服務。當經過TCP的三次握手後,連 接(控制信道)被建立(如圖1和圖2)。

10eb54cbb80.jpg


圖1:FTP客戶使用FTP命令建立於服務器的連接

10eb54d6372.jpg


圖2:用netstat命令查看,控制信道被建立在客戶機的6015和服務器的20端口

    現在用戶要列出服務器上的目錄結構(使用ls或dir命令),那麼首先就要建立一個數據通道,因爲只有數據通道才能傳輸目錄和文件列表,此時用戶會發出 PORT指令告訴服務器連接自己的什麼端口來建立一條數據通道(這個命令由控制信道發送給服務器),當服務器接到這一指令時,服務器會使用20端口連接用 戶在PORT指令中指定的端口號,用以發送目錄的列表(如圖3)。

10eb551f749.jpg

圖3:ls命令是一個交互命令,它會首先與服務器建立一個數據傳輸通道。經驗證本次試驗客戶機使用6044端口

    當完成這一操作時,FTP客戶也許要下載一個文件,那麼就會發出get指令,請注意,這時客戶會再次發送PORT指令,告訴服務器連接他的哪個"新"端 口,你可以先用netstat -na這個命令驗證,上一次使用的6044已經處於TIME_WAIT狀態(如圖4)。

10eb5543a0d.jpg

圖4:使用netstat命令驗證上一次使用ls命令建立的數據傳輸通道已經關閉

    當這個新的數據傳輸通道建立後(在微軟的系統中,客戶端通常會使用連續的端口,也就是說這一次客戶端會用6045這個端口),就開始了文件傳輸的工作。 

    PASV模式

    然而,當FTP客戶以PASV模式連接服務器時,情況就有些不同了。在初始化連接這個過程即連接服務器這個過程和PORT模式是一樣的,不同的是,當 FTP客戶發送ls、dir、get等這些要求數據返回的命令時,他不向服務器發送PORT指令而是發送PASV指令,在這個指令中,用戶告訴服務器自己 要連接服務器的某一個端口,如果這個服務器上的這個端口是空閒的可用的,那麼服務器會返回ACK的確認信息,之後數據傳輸通道被建立並返回用戶所要的信息 (根據用戶發送的指令,如ls、dir、get等);如果服務器的這個端口被另一個資源所使用,那麼服務器返回UNACK的信息,那麼這時,FTP客戶會 再次發送PASV命令,這也就是所謂的連接建立的協商過程。爲了驗證這個過程我們不得不借助CUTEFTP Pro這個大家經常使用的FTP客戶端軟件,因爲微軟自帶的FTP命令客戶端,不支持PASV模式。雖然你可以使用QUOTE PASV這個命令強制使用PASV模式,但是當你用ls命令列出服務器目錄列表,你會發現它還是使用PORT方式來連接服務器的。現在我們使用 CUTEFTP Pro以PASV模式連接服務器(如圖5)。 

10eb555a39a.jpg


圖5:使用CUTEFTP Pro以PASV模式連接服務器



    請注意連接LOG裏有這樣幾句話: 

COMMAND:> PASV
227 Entering Passive Mode (127,0,0,1,26,108)
COMMAND:> LIST
STATUS:> Connecting ftp data socket 127.0.0.1: 6764...
125 Data connection already open; Transfer starting.
226 Transfer complete.



    其中,227 Entering Passive Mode (127,0,0,1,26,80). 代表客戶機使用PASV模式連接服務器的26x256+108=6764端口。(當然服務器要支持這種模式)
125 Data connection already open; Transfer starting.說明服務器的這個端口可用,返回ACK信息。

    再讓我們看看用CUTEFTP Pro以PORT模式連接服務器的情況。其中在LOG裏有這樣的記錄: 

COMMAND:> PORT 127,0,0,1,28,37
200 PORT command successful.
COMMAND:> LIST
150 Opening ASCII mode data connection for /bin/ls.
STATUS:> Accepting connection: 127.0.0.1:20.
226 Transfer complete.
STATUS:> Transfer complete.


    其中,PORT 127,0,0,1,28,37告訴服務器當收到這個PORT指令後,連接FTP客戶的28x256+37=7205這個端口。
Accepting connection: 127.0.0.1:20表示服務器接到指令後用20端口連接7205端口,而且被FTP客戶接受。

    比較分析

    在這兩個例子中,請注意: PORT模式建立數據傳輸通道是由服務器端發起的,服務器使用20端口連接客戶端的某一個大於1024的端口;在PASV模式中,數據傳輸的通道的建立是 由FTP客戶端發起的,他使用一個大於1024的端口連接服務器的1024以上的某一個端口。如果從C/S模型這個角度來說,PORT對於服務器來說是 OUTBOUND,而PASV模式對於服務器是INBOUND,這一點請特別注意,尤其是在使用防火牆的企業裏,比如使用微軟的ISA Server 2000發佈一個FTP服務器,這一點非常關鍵,如果設置錯了,那麼客戶將無法連接。

    最後,請注意在FTP客戶連接服務器的整個過程中,控制信道是一直保持連接的,而數據傳輸通道是臨時建立的。

    在本文中把重點放到了FTP的連接模式,沒有涉及FTP的其他內容,比如FTP的文件類型(Type),格式控制(Format control)以及傳輸方式(Transmission mode)等。不過這些規範大家可能不需要花費過多的時間去了解,因爲現在流行的FTP客戶端都可以自動的選擇正確的模式來處理,對於FTP服務器端通常 也都做了一些限制,如下: 


類型:A S C I I或圖像。 


格式控制:只允許非打印。 


結構:只允許文件結構。 


傳輸方式:只允許流方式 

    至於這些內容,限於篇幅在這裏就不想再介紹了。希望這篇文章能對大家有些幫助,特別是正在學習ISA Server2000的朋友和一些對FTP不很瞭解的朋友。


"+userLink+" "; $('miniAd').show(); } }, on
Failure: function(){} }}); } showMiniAd();



FTP協議安全分析 

前 言 
FTP(File Transfer Protocol,文件傳輸協議)是互聯網上常用的協議之一,人們用FTP實現互連網上的文件傳輸。由於TCP/IP協議族在設計時是處在一個相互信任的 平臺上的,使得在網絡安全越來越被重視的今天,TCP/IP協議族的安全性也成爲了安全界研究的一個重點,著名的ARP欺騙,交換環境下的數據監聽,中間 人攻擊,以及DDOS,都利用了TCP/IP協議的脆弱性,FTP協議也或多或少的存在着一些問題,本文從FTP協議本身出來,探討一下FTP協議的安全 性。

第一章 FTP協議 
一、協議簡介 
FTP協議和HTTP協議類似,都是採用的TCP連接,但與HTTP協議不同的是,HTTP協 議的所有數據都是通過80端口進行傳輸(這裏不考慮SSL),而FTP把數據和命令分開來處理,我們暫且把它們分別命名爲“命令通道”和“數據通道”。命 令通道一般是在我們熟悉的21端口,而數據通道通常是一個高端口。例如客戶機要從FTP服務器上獲取某個文件,首先由客戶機登錄服務器,與服務器建立連 接,這就是我們前面講的“命令通道”,客戶機從這條通道將請求文件的命令發往服務器,服務器接到此命令後將與客戶機重新建立一條連接,這就是我們面前講的 “數據通道”,文件數據將通過數據通道傳送到客戶機。這裏我們用圖1-1來表示文件傳輸中的處理過程

用戶接口 

| 命令通道 
用戶協議解釋器--------------服務器協議接口 

| 數據通道 
用戶數據傳輸功能-----------服務器數據傳輸功能

 


二、數據表示 
FTP協議規範提供了控制文件傳送與存儲的多種選擇。在以下四個方面都須作出一個選擇。 
1、文件類型 
(1)ASCII碼文件類型 一般情況下ASCII碼文件類型是默認選擇的。 
(2)EBCDIC文件類型 該類型傳輸方式要求兩端都是EBCDIC系統。 
(3)圖像文件類型(也稱二進制類型) 數據發送呈現爲一個比特流,通常用於傳輸二進制文件 
(4)本地文件類型 該方式在具有不同字節大小的主機之間傳輸二進制文件。

2、格式控制 
該選項只對ASCII和EBCDIC文件有效。 
(1)非打印 
(2)遠程登錄格式控制 
(3)Fortran回車控制

3、結構 
(1)文件結構 
(2)記錄結構 
(3)頁結構

4、傳輸方式 
(1)流方式 
(2)塊方式 
(3)壓縮方式

三、FTP命令 
FTP命令和應答是在命令通道以ASCII碼開形式傳送的,以下給出常用的命令及命令的相關說明: 
命令 說 明 
ABOR 放棄先前的FTP命令和數據轉輸 
LIST 列表顯示文件或目錄 
PASS 服務器上的口令 
PORT 客戶IP地址和端口 
QUIT 從服務器上註銷 
RETR 取一個文件 
STOR 存一個文件 
SYST 服務器返回系統類型 
TYPE 說明文件類型 
USER 服務器上的用戶名

四、FTP應答 
FTP應答都是ASCII碼形式的3位數字,並跟有報文選項。3位數字每一位都有不同的意義,這裏給出一些常見的反回數字: 
125 數據通道已經打開;傳輸開始。 
200 就緒命令。 
214 幫助報文。 
331 用戶名就緒,要求輸入口令。 
425 不能打開數據通道。 
500 語法錯誤(未認可命令)。 
501 語法錯誤(無效參數)。 
502 未實現的MODE(方式命令)類型。

五、連接管理 
我們在前面講了FTP的命令傳輸和數據傳輸是通過不同的端口進行傳輸的,連接管理也就理所當然的成了FTP協議的核心問題。其中最關鍵的又是數據通道的管理。 
數據通道有以下三大用途: 
1>從客戶向服務器發送一個文件。 
2>從服務器向客戶發送一個文件。 
3>從服務器向客戶發送文件域目錄列表。 
其中傳輸模式又有主動FTP和被動FTP之分。主動FTP的一般過程如下: 
1、客戶發出命令建立數據連接。 
2、客戶通常在客戶端主機上爲所在數據連接選擇一個臨時端口號。客戶從該端口發佈一個被動的打開。 
3、客戶使用PORT命令從命令通道把數據通道的端口發向服務器。 
4、服務器在命令通道上接收端口號,並向客戶端主機上的端口發存一個主動的打開。這時服務器的數據通道使用的是20端口。 
而被動FTP與主動FTP不同的是它不是由客戶主機開一個臨時端口,而是由服務器開一個臨時端口等待客戶機的連接。Fedora自帶的vsftp就是採用的被動的傳輸模式。下面是從登錄vsftp,到執行ls,再到退出的全過程。 
[xinhe@xinhe xinhe]$ ftp -d xxx.xxx.xxx.xxx 
Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 
220 Welcome to ylyz FTP service. 
Name (xxx.xxx.xxx.xxx:xinhe): xplore 
---> USER xinhe 
331 Please specify the password. 
Password: 
---> PASS XXXX 
230 Login successful. 
---> SYST 
215 UNIX Type: L8 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> ls 
ftp: setsockopt (ignored): Permission denied 
---> PASV 
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73) 
---> LIST 
150 Here comes the directory listing. 
drwxr-xr-x 11 48 48 4096 Jul 21 10:52 xxx 
drwxr-xr-x 19 48 48 4096 Jul 31 14:18 xxxx 
drwx------ 2 0 0 16384 Jun 23 03:18 lost+found 
drwxr-xr-x 3 510 510 4096 Aug 03 05:42 software 
drwxr-xr-x 2 510 510 4096 Jun 30 09:34 tmp 
drwxr-xr-x 6 510 510 4096 Jun 27 08:17 xxxxx 
drwxrwxr-x 10 501 501 4096 Aug 12 20:35 xxxxxxx 
-rw-r--r-- 1 510 510 12649185 Aug 12 20:34 xxxx 
drwxr-xr-x 7 501 12 4096 Jul 03 15:13 xinhe 
drwxr-xr-x 7 510 510 4096 Aug 13 19:08 zwell 
226 Directory send OK. 
Ftp> bye 
---> QUIT 
221 Goodbye.

以上就是登錄某臺vsftp的服務器,執行了一個ls然後再退出的全過程,以上是採用的被動傳輸模式,關鍵看這一句: 
---> PASV 
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)

這一句告訴了我們服務器的IP和開臨時數據端口,接着便是登錄到這一臨時端口 52297 ,臨時端口的算法:204*256+73。爲了更清楚的瞭解之過程,我們對這一過程的數據傳送進行了監視。以下是客戶機登錄臨時端口過程中的一段 
08/24-15:24:24.052846 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4A 
192.168.10.8:32791 -> xxx.xxx.xxx.xxx:52297 TCP TTL:64 TOS:0x0 ID:39780 IpLen:20 DgmLen:60 DF 
******S* Seq: 0x42206DD2 Ack: 0x0 Win: 0x16D0 TcpLen: 40 
TCP Options (5) => MSS: 1460 SackOK TS: 849590 0 NOP WS: 0 
注:由於測式過程中的服務器是公網上的真實服務器,故屏弊其地址。


第二章 安全隱患

以上我們討論了FTP協議本身和FTP的具體傳輸過程,在這一過程中,很多地方都存在着安全隱患,隨着互聯網和普及了深入,網絡安全也越來越被人們 重視,在這裏我把一些常見的關於FTP的安全隱患提出來,希望引起人們對FTP安全的重視,使FTP服務器和數據傳輸過程更加安全。 
一、FTP服務器軟件漏洞 
這 類安全隱患不是本文討論的重點,但是在這裏必須把它提出來,因爲它對於FTP服務供應商來說就是惡夢,也是倍受黑客們關注的焦點,常用的FTP服務軟件有 Wu-ftpd, ProFTPD,vsftpd,以及windows下常用的Serv-U等,最常見也最可怕的漏洞就是緩衝區溢出,近來Wu-ftpd和Serv-U的溢 出漏洞層出不窮,ProFTPD也出現過緩衝區溢出,目前比較安全的還是vsftp,必競是號稱非常安全的FTP。

二、明文口令 
前面講過了,TCP/IP協議族的設計在地相互信任和安全的基礎上的,FTP的設計當然也沒有采用加密傳送,這樣的話,FTP客戶與服務器之前所有的數據傳送都是通過明文的方式,當然也包括了口令。 
至 從有了交換環境下的數據監聽之後,這種明文傳送就變得十分危險,因爲別人可能從傳輸過程過捕獲一些敏感的信息,如用戶名和口令等。像HTTPS和SSH都 採用加密解決了這一問題。而FTP仍然是明文傳送,而像UINX和LINUX這類系統的ftp賬號通常就是系統帳號,(vsftp就是這樣做的)。這樣黑 客就可以通過捕獲FTP的用戶名和口令來取得系統的帳號,如果該帳號可以遠程登錄的話,通常採用本地溢出來獲得root權限。這樣這臺FTP服務器就被黑 客控制了。 
以下是我捕獲的明文傳送的數據: 
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

08/24-15:24:13.511233 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4F 
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36423 IpLen:20 DgmLen:65 DF 
***AP*** Seq: 0x407F7F77 Ack: 0x1BD963BF Win: 0x16D0 TcpLen: 32 
TCP Options (3) => NOP NOP TS: 848536 1353912910 
55 53 45 52 20 78 70 6C 6F 72 65 0D 0A USER xinhe..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

08/24-15:24:13.557058 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x42 
xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0x0 ID:29145 IpLen:20 DgmLen:52 DF 
***A**** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32 
TCP Options (3) => NOP NOP TS: 1353916422 848536

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

08/24-15:24:13.560516 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x64 
xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0x0 ID:29146 IpLen:20 DgmLen:86 DF 
***AP*** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32 
TCP Options (3) => NOP NOP TS: 1353916426 848536 
33 33 31 20 50 6C 65 61 73 65 20 73 70 65 63 69 331 Please speci 
66 79 20 74 68 65 20 70 61 73 73 77 6F 72 64 2E fy the password. 
0D 0A ..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

08/24-15:24:13.571556 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x42 
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36424 IpLen:20 DgmLen:52 DF 
***A**** Seq: 0x407F7F84 Ack: 0x1BD963E1 Win: 0x16D0 TcpLen: 32 
TCP Options (3) => NOP NOP TS: 848542 1353916426

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

08/24-15:24:21.364315 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x54 
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36425 IpLen:20 DgmLen:70 DF 
***AP*** Seq: 0x407F7F84 Ack: 0x1BD963E1 Win: 0x16D0 TcpLen: 32 
TCP Options (3) => NOP NOP TS: 849321 1353916426 
50 41 53 53 20 78 70 6C 6F 72 65 5F 32 30 30 34 PASS test 
0D 0A ..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 
這樣就我們就可以看到該ftp服務器上的用戶名是:xinhe和密碼:test。

三、FTP旗標 
這個問題相對來說不是很嚴重,現在很多服務軟件都有這類問題,黑客在發起攻擊之前一般要先確定對方所用的版本號。這樣便於選擇攻擊程序。以下是一個例子: 
[xinhe@xinhe xinhe]$ ftp xxx.xxx.xxx.xxx 
Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 
220-Serv-U FTP Server v5.1 for WinSock ready... 
220 S TEAM 
這此信息我們可知該服務器使用的服務軟件可能就是Serv-U 5.1

四、通過FTP服務器進行端口掃描 
FTP客戶端所發送的PORT命令告訴服務器FTP服務器傳送數據時應當連向的IP和端口,通常,這就是FTP客戶所在機器的IP地址及其所綁定的端口。然而FTP協議本身並沒有要求客戶發送的PORT命令中必須指定自已的IP。 
利用這一點,黑客就可以通過第三方FTP服務器對目標機器進行端口掃描,這種方式一般稱爲FTP反射,對黑客而言,這種掃描方式具有以下兩個優點: 
(1)提供匿名性 
由於端口掃描的源地址爲FTP服務器的IP地址,而不是黑客的機器,所以這種方式很好的隱藏了黑客的真實IP。 
(2)避免阻塞 
由於通過第三方FTP服務器進行掃描,即使目標機器通過添加內核ACL或無效路由來自動阻塞對其進行掃描的機器,但黑客可以過不過的FTP服務器來完成其掃描工作。 
Nmap就可以實現這一掃描過程,以下是一次利用ftp服務器進行掃描的實例。 
[xinhe@xinhe xinhe]$ nmap -b xinhe:[email protected]:21 -v xxx.xxx.xxx.xxx 
Hint: if your bounce scan target hosts aren't reachable from here, remember to use -P0 so we don't try and ping them prior to the scan

Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at 2004-08-24 20:16 CST 
Resolved ftp bounce attack proxy to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 
Machine xxx.xxx.xxx.xxx MIGHT actually be listening on probe port 80 
Host xxx.xxx.xxx.xxx appears to be up ... good. 
Attempting connection to ftp://xinhe:[email protected]:21 
Connected:220 Welcome to FTP service. 
Login credentials accepted by ftp server! 
Initiating TCP ftp bounce scan against xxx.xxx.xxx.xxx at 20:16 
Adding open port 237/tcp 
Deleting port 237/tcp, which we thought was open 
Changed my mind about port 237 
Adding open port 434/tcp 
Deleting port 434/tcp, which we thought was open 
Changed my mind about port 434 
Adding open port 1509/tcp 
Deleting port 1509/tcp, which we thought was open 
Changed my mind about port 1509 
Adding open port 109/tcp 
Deleting port 109/tcp, which we thought was open 
Changed my mind about port 109 
Adding open port 766/tcp 
Deleting port 766/tcp, which we thought was open 
Changed my mind about port 766 
Adding open port 1987/tcp 
Deleting port 1987/tcp, which we thought was open 
Changed my mind about port 1987 
Adding open port 5998/tcp 
Deleting port 5998/tcp, which we thought was open 
Changed my mind about port 5998 
Adding open port 1666/tcp 
Deleting port 1666/tcp, which we thought was open 
Changed my mind about port 1666 
Adding open port 506/tcp 
Deleting port 506/tcp, which we thought was open 
Changed my mind about port 506 
caught SIGINT signal, cleaning up


五、數據劫持 
我們在前面講了FTP的數據傳輸過程,同樣FTP協議本身本並沒有要求傳輸命令的客戶IP和進行數據傳輸的客戶IP一致,這樣黑客就有可能劫持到客戶和服務器之間傳送的數據。根據數據傳輸的模式可把數據劫持分爲主動數據劫持和被動數據劫持。 
1、被動數據劫持 
跟據前面講的被動傳輸過程我們可以看出,在FTP客戶端發出PASV或PORT命令之後並且在發出數據請求之前,存在一個易受攻擊的窗口。如果黑客能猜到這個端口,就能夠連接並載取或替換正在發送的數據。 
要實現被動數據劫持就必須知道服務器上打開的臨時端口號,然後很多服務器並不是隨機選取端口,而是採用遞增的方式,這樣黑客要猜到這個端口號就不是很難了。 
2、主動數據劫持 
主動數據劫持比被動數據劫持要困難很多,因爲在主動傳輸的模式下是由客戶打開臨時端口來進行數據傳輸,而黑客是很難找到客戶的IP和臨時端口的。


第三章 安全策略 
一、使用較比安全的系統和FTP服務軟件 
這裏安全的系統主要是最好不要採用windows系統作服務 器,因爲系統本身的安全性就很成問題,windows每年都要暴N個漏洞,一旦有溢出漏洞很可能就能拿到管理員權限。一旦系統被入侵了,運行在此係統之上 的服務也就無安全性可言。Linux和BSD都將是不錯的選擇。 
服務軟件採用漏洞比較少的,如vsftp,而且確保版本的更新。

二、使用密文傳輸用戶名和口令 
這裏我們可以採用scp和sftp,也可以使用SSH來轉發。這樣即使黑客能監聽到客戶與服務器之間的數據交換,沒有密鑰也得不到口令。使用SSH轉發有一些條件限制,首先要求服務器和客戶端都是主動模式,然後是服務器必須允許命令通道之外的機器向其發送PORT命令。

三、更改服務軟件的旗標 
更改服務軟件的旗標能起到迷惑攻擊者的作用,至少能迷惑很多掃描器,造成掃描器的誤報,但更改旗標並不是解決安全問題的根本辦法,安全漏洞不會因爲旗標不同而消失,不過更改總比不改要好一些。現在大多數的服務端軟件都可以在配置文件裏更改該FTP的旗標。

四、加強協議安全性 
這一點是服務軟件的提供商需要做的,一是對PORT命令進行檢查,PORT後的IP應和客戶主機是同一IP,我們對 FTP的攻擊很多都是通過構造特殊的PORT命令來實現的,所以PORT命令的使用對於攻擊者來說就顯得尤爲重要了。做到這一點並不是很容易,Wu- ftpd就花了幾年的時間。目前針對數據劫持還沒什麼完美的防禦方法,目前能做的就是檢查命令通道和數據通道的IP地址是不是一致,但這也不能百分之百地 防止數據劫持的發生。因爲客戶機和黑客可能處於同一內網。


後 記 
網絡已深入到社會生活的方方面面,網絡安全也越來越顯得重要,FTP協議安全只是網絡安全中一個很小的部分,網絡安全還有 很多工作要做,這篇文章由於時間的關係寫得比較淺顯,沒有把FTP服務軟件的源碼拿出來講(很多好的東西都是開源的),我想如果能把源碼拿來對照源碼講 FTP的傳輸過程,這樣我們會對FTP的傳輸過程有一個本質的瞭解,也更容易從中找到某些不爲人知的安全隱患。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章