關于ftp服務程序中不安全因素研究 |
發(fā)布時間: 2012/8/14 11:21:08 |
FTP(File Tranfer Protocol)是一種很古老的協(xié)議來的了,自unix始就一直有使用的了,F(xiàn)TP因為本身不但可以提供多用戶同時下載的功能外,還可以讓用戶上載文件,在不斷的發(fā)展中,還可以使用ftp遠程執(zhí)行命令,由于FTP一般需要帳戶和密碼的,而且對于不同的帳戶可提供不同的權限,由于這么多的功能,所以一直至今還是相當流行的。不過,以下我會說說FTP服務程序很可能出現(xiàn)的安全方面的問題。
FTP的連接一般是有兩個連接的,一個是客戶程和服務器傳輸命令的,另一個是數(shù)據(jù)傳送的連接。FTP服務程序一般會支持兩種不同的模式,一種是Port模式,一種是Passive模式(Pasv Mode),我先說說這兩種不同模式連接方式的分別。 先假設客戶端為C,服務端為S. Port模式: 當客戶端C向服務端S連接后,使用的是Port模式,那么客戶端C會發(fā)送一條命令告訴服務端S(客戶端C在本地打開了一個端口N在等著你進去數(shù)據(jù)連接),當服務端S收到這個Port命令后,就會向客戶端打開的那個端口N進行連接,這種數(shù)據(jù)連接就生成了。 Pasv模式: 當客戶端C向服務端S連接后,服務端S會發(fā)信息給客戶端C,這個信息是(服務端S在本地打開了一個端口M,你現(xiàn)在去連接我吧),當客戶端C收到這個信息后,就可以向服務端S的M端口進行連接,連接成功后,數(shù)據(jù)連接也建立了。 從上面的解釋中,大家應該可以看到兩種模式主要的不同是數(shù)據(jù)連接建立的不同,對于Port模式,是客戶端C在本地打開一個端口等服務端S去連接建立數(shù)據(jù)連接;而Pasv模式就是服務端S打開一個端口等待客戶端C去建立一個數(shù)據(jù)連接。 兩種模式看起來其實都是沒什么問題,但其實都是隱藏著安全方面的問題的。 對于Port模式,這種模式多是用于因為服務端有防火墻,無法使用Pasv在服務端打開端口讓客戶端去連接而被逼使用的,但由于連接本身是由服務端本身向外連接的,這本身就存在了一個安全的問題了,因為如果這個連接一旦被hijack,由于連接是由服務器本身向外連的,防火墻將不會有任何動作去處理這個連接。 對于Pasv模式,看起來是比Port模式安全很多不過認真想一想的話,還是會發(fā)現(xiàn)它本身的問題的。由于服務端會打開一個端口等客戶端去連接,但如果這個打開的端口并沒有檢測連接的IP是否那個是那個客戶端的IP,那么安全問題的出現(xiàn)了。因為有很多FTP服務器打開的數(shù)據(jù)端口等客戶端連接是隨機的,但都會在一定范圍內的,例如是20000-21000這些端口間。如果FTP服務器并沒有在接收數(shù)據(jù)端口的連接時檢測連接過來的 IP是不是已經是合法登陸的用戶的話,那么其他并沒有登陸的用戶就很有機會寫程序hijack這個連接了。以下給一個例子說明一下: 服務端S接收到客戶端C(IP=12.12.12.12)的命令連接使用的是Pasv模式,服務端S打開了端口20000等待數(shù)據(jù)連接,在這時,一位黑客(IP=11.11.11.11)掃描了服務端S的20000到20100的端口,發(fā)現(xiàn)了20000端口打開了,馬上就連接上去服務端S的20000這個端口了。在這情況中,如果服務端S并沒有檢測11.11.11.11這個IP是不是合法登陸的用戶的IP的話,那么真正的客戶端C的數(shù)據(jù)連接就被人 hijack了,如果客戶端C發(fā)送給服務端S的命令是下載某個文件的話,那么那個文件只會發(fā)送到那個黑客中去了。這種情況下,黑客可以是隨機掃描并 hijack到不同的連接,或者可以同時對那些端口不停的連接,那么合法用戶的連接就會很多被hijack了,hijack后黑客會做什么,那就視乎那位黑客的能力和想做什么了。 解決: 對于Port模式,由于那是FTP本身的問題,所以沒有什么解決的好方法。或者可以的話,只是允許Pasv模式而不允許Port模式。 對于Pasv模式,只要在接收到數(shù)據(jù)連接時檢測IP是不是合法用戶的請求,就可以避免連接被hijack的問題。 以上hijack連接的都屬于比較高級的"黑客"才有機會實現(xiàn)的,因為對于不同的FTP服務程序是有所不同的,而且一般是需要自己先研究過那個FTP服務程序然后再寫程序才有可能實現(xiàn)的。以下說說一般用戶都可以因為寫FTP服務程序對于安全的不注重而進行通過FTP而入侵到系統(tǒng)的問題。 這個問題其實平時都是很常見的了,一般都是對于用戶登入FTP后可以跳轉到的目錄的權限限制問題。 很多用過的FTP程序(最基本的FTP服務,只提供上傳,下載,連用戶名和密碼都不需要那種),如anonymouse ftp(aftp)那類,根本不會限制登陸用戶可以跳轉到的目錄,就是說登入的用戶可以隨意查看系統(tǒng)不同目錄的文件,下載不同目錄的文件或者上傳文件到任何目錄中去的,可以下載任何文件或上傳任何文件到任何目錄,這問題有多嚴重,我也不需要說了吧。 有的FTP程序,雖然提供了用戶名和密碼,但一樣沒有對于用戶可訪問目錄進行任何限制,xfocus的出品,xftpd就是一個很好的例子,用戶登入后,一樣是可以上面所說的,用戶可 以下載系統(tǒng)任何文件或上傳任何文件到任何目錄中去的。 有的FTP,就是對于要限制可訪問的目錄的檢測不夠全面,導致登入用戶可以使用一些特殊的字符而可以訪問到限制訪問的目錄中去。好的一個例子就是舊版的 slimftpd了。這種情況一般稱為"Directory Traveling Vulnerability",很多舊版的共享的FTP服務程序都曾存在過這些問題的。 如果你要建立一個FTP服務器,我可以給的建議就是選擇一個比較穩(wěn)定和安全的FTP程序(當然可以考慮自己寫的),然后在真正投入使用前對于上面所提及到的安全問題都自己檢測一下,如果是自己寫的話可以發(fā)布些免費版本(不是全功能的)給用戶去測試一下,測試沒問題后再投入正式使用。 上面所寫都是在和朋友開發(fā)FTP服務程序時研究FTP協(xié)議時看到或在測試時的一些小心得,錯漏的地方也是難免的,如果看到有什么錯誤的地方可以跟貼指出。 本文出自:億恩科技【mszdt.com】 |