Sftp和ftp 差異、工做原理等(彙總ing)

Sftp和ftp over ssh2的差異

近期使用SecureFx,涉及了兩個不一樣的安全文件傳輸協議:
-sftp
-ftp over SSH2
這兩種協議是不一樣的。sftp是ssh內含的協議,僅僅要sshdserver啓動了,它就可用,它自己不需要ftpserver啓動。ftp over SSH2則象一個二傳手。
 
一、SFTP的工做模式:
圖1顯示了SFTP的工做模式,它是做爲SSH2的一個子服務工做的。
圖 1 SFTP工做模式
二、FTP over SSH2
此協議仍是基於ftp協議的。在此協議中SSH2server起了一個橋樑做用,把數據在client和ftp之間轉發。ftp協議自己包含兩個通道,一個是控制通道,還有一個是數據通道。
FTP over SSH2有兩種狀況,半安全鏈接(Less Secure Connection)和安全鏈接(Full Secure Connection)。在半安全鏈接時,ftpclient先和SSH2server鏈接,在這個鏈接中無論控制通道和數據通道都是加密的。但是SSH2server和 ftpserver之間就不是加密的了,假設ftpserver執行在另一臺機器上,SSH2server和ftp直接就是明文傳輸。見圖2。
 
圖 2半安全鏈接
 
圖3是安全鏈接模式的情形,SSH2server和FTPserver在同一臺server上。
 
圖 3 安全鏈接




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

 

眼下在網絡上,假設你想把文件和其它人共享。最方便的辦法莫過於將文件放FTPserver上,而後其它人經過FTPclient程序來下載所需要的文件。 算法

一、FTP架構 windows

          如同其它的很是多通信協議,FTP通信協議也採用客戶機 / server(Client / Server )架構。用戶可以經過各類不一樣的FTPclient程序,藉助FTP協議,來鏈接FTPserver,以上傳或者下載文件。安全


      
二、FTP通信port知識
          FTPserver和client要進行文件傳輸,就需要經過port來進行。FTP協議需要的port通常包含兩種:
        控制鏈路--------TCPport21
          所有你發往FTPserver的命令和server反饋的指令都是經過server上的21port傳送的。
        數據鏈路--------TCPport20
          數據鏈路主要是用來傳送數據的,比方client上傳、下載內容,以及列文件夾顯示的內容等。
三、FTP鏈接的兩種方式
          在數據鏈路的創建上,FTP         Server         爲了適應不一樣的網絡環境,支持兩種鏈接模式:主動模式(Port)和被動模式(Pasv)。事實上這兩種鏈接模式主要是針對數據鏈路進行的,和控制鏈路無關。
        主動模式
          主動模式是這樣工做的:client把本身的高位port和serverport21創建控制鏈路。所有的控制命令比方Is或get都是經過這條鏈路傳送的。
          當client需要server端給它傳送數據時,client會發消息給server端,告訴本身的位置和打開的高位port(通常大於1024的port都就叫高位port),等候server 的20port和client打開的port進行鏈接,從而進行數據的傳輸。當server端收到信息後,就會和client打開的port鏈接,這樣數據鏈路就創建起來了。

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

          從上面的解釋中咱們可以看到,兩種模式基本的不一樣是數據鏈接創建的不一樣。對於Port模式,是client在本地打開一個port等server去鏈接創建數據鏈接,而Pasv模式就是server打開一個port等待client去創建一個數據鏈接。


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

 

起初,FTP並不是應用於IP網絡上的協議,而是ARPANEt網絡中計算機間的文件傳輸協議, ARPANET是美國國防部組建的老網絡,於1960-1980年使用。在那時, FTP的主要功能是在主機間快速可靠地傳輸文件。眼下FTP仍然保持其可靠性,即便在今天,它還贊成文件遠程存取。這使得用戶可以在某個系統上工做,而將 文件存貯在別的系統。好比,假設某用戶執行Webserver,需要從遠程主機上取得HTML文件和CGI程序在本機上工做,他需要從遠程存儲網站獲取文件(遠 程網站也需安裝Webserver)。當用戶完畢工做後,可以使用FTP將文件傳回到Webserver。採用這樣的方法,用戶無需使用Telnet登陸到遠程主機進行工 做,這樣就使Webserver的更新工做變得如此的輕鬆。

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

    如下,讓咱們來看看,一個FTP客戶在和server鏈接是怎麼樣的一個過程(以標準的FTPport號爲例)。

    首先,FTP並不像HTTP協議那樣,僅僅需要一個port做爲鏈接(HTTP的默認port是80,FTP的默認port是21),FTP需要2個port,一個port是做 爲控制鏈接port,也就是21這個port,用於發送指令給server以及等待server響應;還有一個port是傳輸數據port,port號爲20(僅PORT模式),是用來創建 傳輸數據通道的,主要有3個做用


從客戶向server發送一個文件。


從server向客戶發送一個文件。


從server向客戶發送文件或文件夾列表。

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

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

10eb54cbb80.jpg


圖1:FTP客戶使用FTP命令創建於server的鏈接架構

10eb54d6372.jpg


圖2:用netstat命令查看,控制信道被創建在客戶機的6015和server的20port app

    現在用戶要列出server上的文件夾結構(使用ls或dir命令),那麼首先就要創建一個數據通道,因爲僅僅有數據通道才幹傳輸文件夾和文件列表,此時用戶會發出 PORT指令告訴server鏈接本身的什麼port來創建一條數據通道(這個命令由控制信道發送給server),當server接到這一指令時,server會使用20port鏈接用 戶在PORT指令中指定的port號,用以發送文件夾的列表(如圖3)。 ssh

10eb551f749.jpg

圖3:ls命令是一個交互命令,它會首先與server創建一個傳輸數據通道。經驗證本次試驗客戶機使用6044port socket

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

10eb5543a0d.jpg

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

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

    PASV模式

    然而,當FTP客戶以PASV模式鏈接server時,狀況就有些不一樣了。在初始化鏈接這個過程即鏈接server這個過程和PORT模式是同樣的,不一樣的是,當 FTP客戶發送ls、dir、get等這些要求數據返回的命令時,他不向server發送PORT指令而是發送PASV指令,在這個指令中,用戶告訴server本身 要鏈接server的某一個port,假設這個server上的這個port是空暇的可用的,那麼server會返回ACK的確認信息,以後傳輸數據通道被創建並返回用戶所要的信息 (依據用戶發送的指令,如ls、dir、get等);假設server的這個port被還有一個資源所使用,那麼server返回UNACK的信息,那麼這時,FTP客戶會 再次發送PASV命令,這也就是所謂的鏈接創建的協商過程。爲了驗證這個過程咱們不得不借助CUTEFTP Pro這個你們經常使用的FTPclient軟件,因爲微軟自帶的FTP命令client,不支持PASV模式。儘管你可以使用QUOTE PASV這個命令強制使用PASV模式,但是當你用ls命令列出server文件夾列表,你會發現它仍是使用PORT方式來鏈接server的。現在咱們使用 CUTEFTP Pro以PASV模式鏈接server(如圖5)。 

10eb555a39a.jpg


圖5:使用CUTEFTP Pro以PASV模式鏈接server



    請注意鏈接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模式鏈接server的26x256+108=6764port。(固然server要支持這樣的模式)
125 Data connection already open; Transfer starting.說明server的這個port可用,返回ACK信息。

    再讓咱們看看用CUTEFTP Pro以PORT模式鏈接server的狀況。當中在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告訴server當收到這個PORT指令後,鏈接FTP客戶的28x256+37=7205這個port。
Accepting connection: 127.0.0.1:20表示server接到指令後用20port鏈接7205port,而且被FTP客戶接受。

    比較分析

    在這兩個樣例中,請注意: PORT模式創建傳輸數據通道是由server端發起的,server使用20port鏈接client的某一個大於1024的port;在PASV模式中,傳輸數據的通道的創建是 由FTPclient發起的,他使用一個大於1024的port鏈接server的1024以上的某一個port。假設從C/S模型這個角度來講,PORT對於server來講是 OUTBOUND,而PASV模式對於server是INBOUND,這一點請特別注意,尤爲是在使用防火牆的企業裏,比方使用微軟的ISA Server 2000公佈一個FTPserver,這一點很關鍵,假設設置錯了,那麼客戶將沒法鏈接。

    最後,請注意在FTP客戶鏈接server的整個過程當中,控制信道是一直保持鏈接的,而傳輸數據通道是暫時創建的。

    在本文中把重點放到了FTP的鏈接模式,沒有涉及FTP的其它內容,比方FTP的文件類型(Type),格式控制(Format control)以及傳輸方式(Transmission mode)等。只是這些規範你們可能不需要花費過多的時間去了解,因爲現在流行的FTPclient都可以本身主動的選擇正確的模式來處理,對於FTPserver端一般 也都作了一些限制,例如如下:


類型: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協議
1、協議簡單介紹
FTP協議和HTTP協議類似,都是採用的TCP鏈接,但與HTTP協議不一樣的是,HTTP協 議的所有數據都是經過80port進行傳輸(這裏不考慮SSL),而FTP把數據和命令分開來處理,咱們暫且把它們分別命名爲「命令通道」和「數據通道」。命 令通道一般是在咱們熟悉的21port,而數據通道一般是一個高port。好比客戶機要從FTPserver上獲取某個文件,首先由客戶機登陸server,與server創建連 接,這就是咱們前面講的「命令通道」,客戶機從這條通道將請求文件的命令發往server,server接到此命令後將與客戶機又一次創建一條鏈接,這就是咱們面前講的 「數據通道」,文件數據將經過數據通道傳送到客戶機。這裏咱們用圖1-1來表示文件傳輸中的處理過程

用戶接口
|
| 命令通道
用戶協議解釋器--------------server協議接口
|
| 數據通道
用戶傳輸數據功能-----------server傳輸數據功能

 


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

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

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

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

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

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

5、鏈接管理
咱們在前面講了FTP的命令傳輸和傳輸數據是經過不一樣的port進行傳輸的,鏈接管理也就理所固然的成了FTP協議的核心問題。當中最關鍵的又是數據通道的管理。
數據通道有下面三大用途:
1>從客戶向server發送一個文件。
2>從server向客戶發送一個文件。
3>從server向客戶發送文件域文件夾列表。
當中傳輸模式又有主動FTP和被動FTP之分。主動FTP的通常步驟例如如下:
一、客戶發出命令創建數據鏈接。
二、客戶一般在client主機上爲所在數據鏈接選擇一個暫時port號。客戶從該port公佈一個被動的打開。
三、客戶使用PORT命令從命令通道把數據通道的port發向server。
四、server在命令通道上接收port號,並向client主機上的port發存一個主動的打開。這時server的數據通道使用的是20port。
而被動FTP與主動FTP不一樣的是它不是由客戶主機開一個暫時port,而是由server開一個暫時port等待客戶機的鏈接。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的server,運行了一個ls而後再退出的全過程,以上是採用的被動傳輸模式,關鍵看這一句:
---> PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)

這一句告訴了咱們server的IP和開暫時數據port,接着即是登陸到這一暫時port 52297 ,暫時port的算法:204*256+73。爲了更清楚的瞭解之過程,咱們對這一過程的數據傳送進行了監視。下面是客戶機登陸暫時port過程當中的一段
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
注:由於測式過程當中的server是公網上的真實server,故屏弊其地址。


第二章 安全隱患

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

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

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 ..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
這樣就咱們就可以看到該ftpserver上的username是:xinhe和password:test。

3、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
這此信息咱們可知該server使用的服務軟件可能就是Serv-U 5.1

4、經過FTPserver進行port掃描
FTPclient所發送的PORT命令告訴serverFTPserver傳送數據時應當連向的IP和port,一般,這就是FTP客戶所在機器的IP地址及其所綁定的port。然而FTP協議自己並無要求客戶發送的PORT命令中必須指定自已的IP。
利用這一點,黑客就可以經過第三方FTPserver對目標機器進行port掃描,這樣的方式通常稱爲FTP反射,對黑客而言,這樣的掃描方式具備下面兩個長處:
(1)提供匿名性
由於port掃描的源地址爲FTPserver的IP地址,而不是黑客的機器,因此這樣的方式很是好的隱藏了黑客的真實IP。
(2)避免堵塞
由於經過第三方FTPserver進行掃描,即便目標機器經過加入內核ACL或無效路由來本身主動堵塞對其進行掃描的機器,但黑客可以過只是的FTPserver來完畢其掃描工做。
Nmap就可以實現這一掃描過程,下面是一次利用ftpserver進行掃描的實例。
[xinhe@xinhe xinhe]$ nmap -b xinhe:test@xxx.xxx.xxx.xxx: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:test@xxx.xxx.xxx.xxx: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


5、數據劫持
咱們在前面講了FTP的傳輸數據過程,相同FTP協議自己本並無要求傳輸命令的客戶IP和進行傳輸數據的客戶IP一致,這樣黑客就有可能劫持到客戶和server之間傳送的數據。依據傳輸數據的模式可把數據劫持分爲主動數據劫持和被動數據劫持。
一、被動數據劫持
跟據前面講的被動傳輸過程咱們能夠看出,在FTPclient發出PASV或PORT命令以後並且在發出數據請求以前,存在一個易受攻擊的窗體。假設黑客能猜到這個port,就行鏈接並載取或替換正在發送的數據。
要實現被動數據劫持就必須知道server上打開的暫時port號,而後很是多server並不是隨機選取port,而是採用遞增的方式,這樣黑客要猜到這個port號就不是很是難了。
二、主動數據劫持
主動數據劫持比被動數據劫持要困難很是多,因爲在主動傳輸的模式下是由客戶打開暫時port來進行傳輸數據,而黑客是很是難找到客戶的IP和暫時port的。


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

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

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

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

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

相關文章
相關標籤/搜索