Sftp和ftp 差別、工作原理等(匯總ing)


Sftp和ftp over ssh2的差別

近期使用SecureFx,涉及了兩個不同的安全文件傳輸協議:
-sftp
-ftp over SSH2
這兩種協議是不同的。sftp是ssh內含的協議,僅僅要sshdserver啟動了,它就可用,它本身不須要ftpserver啟動。ftp over SSH2則象一個二傳手。
 
1、SFTP的工作模式:
圖1顯示了SFTP的工作模式,它是作為SSH2的一個子服務工作的。
圖 1 SFTP工作模式
2、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程序來下載所須要的文件。

1、FTP架構

          如同其它的非常多通訊協議,FTP通訊協議也採用客戶機 / server(Client / Server )架構。用戶能夠通過各種不同的FTPclient程序,借助FTP協議,來連接FTPserver,以上傳或者下載文件。


      
2、FTP通訊port知識
          FTPserver和client要進行文件傳輸,就須要通過port來進行。FTP協議須要的port一般包含兩種:
        控制鏈路--------TCPport21
          全部你發往FTPserver的命令和server反饋的指令都是通過server上的21port傳送的。
        數據鏈路--------TCPport20
          數據鏈路主要是用來傳送數據的,比方client上傳、下載內容,以及列文件夾顯示的內容等。
3、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

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

10eb551f749.jpg

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

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

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協議
一、協議簡單介紹
FTP協議和HTTP協議相似,都是採用的TCP連接,但與HTTP協議不同的是,HTTP協 議的全部數據都是通過80port進行傳輸(這里不考慮SSL),而FTP把數據和命令分開來處理,我們暫且把它們分別命名為“命令通道”和“數據通道”。命 令通道通常是在我們熟悉的21port,而數據通道通常是一個高port。比如客戶機要從FTPserver上獲取某個文件,首先由客戶機登錄server,與server建立連 接,這就是我們前面講的“命令通道”,客戶機從這條通道將請求文件的命令發往server,server接到此命令后將與客戶機又一次建立一條連接,這就是我們面前講的 “數據通道”,文件數據將通過數據通道傳送到客戶機。這里我們用圖1-1來表示文件傳輸中的處理過程

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

 


二、數據表示
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 server上的口令
PORT 客戶IP地址和port
QUIT 從server上注銷
RETR 取一個文件
STOR 存一個文件
SYST server返回系統類型
TYPE 說明文件類型
USER server上的username

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

五、連接管理
我們在前面講了FTP的命令傳輸和傳輸數據是通過不同的port進行傳輸的,連接管理也就理所當然的成了FTP協議的核心問題。當中最關鍵的又是數據通道的管理。
數據通道有下面三大用途:
1>從客戶向server發送一個文件。
2>從server向客戶發送一個文件。
3>從server向客戶發送文件域文件夾列表。
當中傳輸模式又有主動FTP和被動FTP之分。主動FTP的一般步驟例如以下:
1、客戶發出命令建立數據連接。
2、客戶通常在client主機上為所在數據連接選擇一個暫時port號。客戶從該port公布一個被動的打開。
3、客戶使用PORT命令從命令通道把數據通道的port發向server。
4、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和傳輸數據過程更加安全。
一、FTPserver軟件漏洞
這 類安全隱患不是本文討論的重點,可是在這里必須把它提出來,由於它對於FTP服務供應商來說就是惡夢,也是倍受黑客們關注的焦點,經常使用的FTP服務軟件有 Wu-ftpd, ProFTPD,vsftpd,以及windows下經常使用的Serv-U等,最常見也最可怕的漏洞就是緩沖區溢出,近來Wu-ftpd和Serv-U的溢 出漏洞層出不窮,ProFTPD也出現過緩沖區溢出,眼下比較安全的還是vsftp,必競是號稱很安全的FTP。

二、明文口令
前面講過了,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。

三、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

四、通過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


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


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

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

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

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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM