FTP协议安全分析
文章目錄
- 前 言
- 第一章 FTP協議
- 一、協議簡介
- 二、數據表示
- (一)文件類型
- (二)格式控制
- (三)結構
- (四)傳輸方式
- 三、FTP命令
- 四、FTP應答
- 五、連接管理
- 第二章 安全隱患
- 一、FTP服務器軟件漏洞
- 二、明文口令
- 三、FTP旗標
- 四、通過FTP服務器進行端口掃描
- 五、數據劫持
- 第三章 安全策略
- 一、使用較比安全的系統和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服務器上獲取某個文件,首先由客戶機登錄服務器,與服務器建立連接,這就是我們前面講的“命令通道”,客戶機從這條通道將請求文件的命令發往服務器,服務器接到此命令后將與客戶機重新建立一條連接,這就是我們面前講的“數據通道”,文件數據將通過數據通道傳送到客戶機。
二、數據表示
FTP協議規范提供了控制文件傳送與存儲的多種選擇。在以下四個方面都須作出一個選擇。
(一)文件類型
(1)ASCII碼文件類型 一般情況下ASCII碼文件類型是默認選擇的。
(2)EBCDIC文件類型 該類型傳輸方式要求兩端都是EBCDIC系統。
(3)圖像文件類型(也稱二進制類型) 數據發送呈現為一個比特流,通常用于傳輸二進制文件
(4)本地文件類型 該方式在具有不同字節大小的主機之間傳輸二進制文件。
(二)格式控制
該選項只對ASCII和EBCDIC文件有效。
(1)非打印
(2)遠程登錄格式控制
(3)Fortran回車控制
(三)結構
(1)文件結構
(2)記錄結構
(3)頁結構
(四)傳輸方式
(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協議的核心問題。其中最關鍵的又是數據通道的管理。
數據通道有以下三大用途:
其中傳輸模式又有主動FTP和被動FTP之分。主動FTP的一般過程如下:
而被動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服務器就被黑客控制了。
以下是我捕獲的明文傳送的數據:
這樣就我們就可以看到該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服務器進行掃描的實例。
五、數據劫持
我們在前面講了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的傳輸過程有一個本質的了解,也更容易從中找到某些不為人知的安全隱患。
總結
- 上一篇: 哪吒汽车宣布已完成70亿元Crossov
- 下一篇: MacBook/MacOS/Mac OS