運維安全系列基礎服務之 FTP 服務(系列一)

OneAPM官方技術部落格發表於2015-12-30

做了多年運維工程師,積攢了一些經驗,和大家分享下。個人認為,運維安全話題的系列,主要包括下面四個方面:

  • 基礎服務
  • 網路層
  • 應用層
  • 雲安全

今天主要講的是基礎服務裡面的[FTP服務][ftp]。

檔案傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網路上進行檔案傳輸的一套標準協議。它屬於網路傳輸協議的應用層。

FTP 是一個8位的客戶端-伺服器協議,能操作任何型別的檔案而不需要進一步處理,就像 MIME 或 Unicode 一樣。但是,FTP 有著極高的延時,

這意味著,從開始請求到第一次接收需求資料之間的時間,會非常長;並且不時的必須執行一些冗長的登陸程式。 (https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE)

從現在來看,FTP 服務應該算是一個「漏洞百出」的 TCP/IP 協議。在Google搜尋ftp 攻擊或者其它類似FTP安全的關鍵詞,會列出成千上萬的結果。

特別是還有anonymous ftp這種 buggy 的設計。為什麼會出現這種情況呢,這還需要從 FTP 協議設計的目的來看,RFC959 中開篇介紹中就列出了 FTP 協議的4個目的:

  • to promote sharing of files
  • to encourage indirect or implicit
  • to shield a user from variations in file storage systems among hosts
  • to transfer data reliably and efficiently

這些目的中沒有任何關於安全方面的描述,很多 FTP 工具也僅僅是滿足上面列出的 FTP 協議的目的,所以 FTP 協議被當做黑客攻擊的目標就不足為奇了。下面主要從兩個方面來講講 FTP 的安全問題,最後給出一些安全使用 FTP 的建議。

  • anonymous ftp
  • ftp bounce attack

Anonymous FTP

Anonymous FTP 也稱作匿名 FTP 服務。上面說過,FTP 最主要的目的就是為了在網際網路上共享檔案和資料,通常使用 FTP 服務是需要在服務端註冊賬號後才能使用的,而匿名 FTP 是建立了一個特殊的名為anonymous的使用者 ID,方便 Internet 上的任何人在任何地方無需註冊賬號就可使用該使用者 ID 來進行檔案共享。既然任何人都可以使用這個賬號,這也為黑客侵入提供了便利。通常的做法是:

  1. 通過匿名賬號的寫許可權上傳木馬實施攻擊;
  2. 通過啟動 FTP daemon 的系統賬號許可權進行攻擊;
  3. 通過匿名賬號啟動系統 shell;
  4. 即使沒有上述所有許可權,也可以通過大規模的登入/退出操作讓系統日誌快速增長,從而吃滿伺服器空間讓伺服器掛掉;

所以匿名 FTP 服務是一項非常危險的服務,如非必要,建議關閉此服務,使用 HTTP/HTTPS 服務來提供檔案共享服務。以vsftpd 為例,關閉匿名 FTP 服務的方法是:

sh
cat /etc/vsftpd.conf
# Access rights
anonymous_enable=NO
no_anon_password=NO

然後重啟 vsftp 服務即可。

即使需要保留匿名 FTP,也有以下建議:

  • 關閉匿名使用者的上傳資料權利,並提供下載資料檔案的校驗檔案
  • 使用無特權賬號和組(比如 nobody)來啟動 FTP daemon
  • 給匿名 FTP 賬號使用假的 shell(/bin/false or /bin/true)
  • 限制 FTP 賬號在一定時間段內的登入次數

FTP bounce attack

FTP bounce attack(FTP跳轉攻擊)是利用 FTP 規範中的漏洞來攻擊知名網路伺服器的一種方法,並且使攻擊者很難被跟蹤。首先攻擊者通過 FTP 伺服器傳送一個 FTP"PORT" 命令給目標 FTP 伺服器,其中包含該主機的網路地址和被攻擊的服務的埠號。這樣,客戶端就能命令 FTP 伺服器發一個檔案給被攻擊的服務。這個檔案可能包括根被攻擊的服務有關的命令(如 SMTP,NNTP 等)。由於是命令第三方去連線到一種服務,而不是直接連線,就使得跟蹤攻擊者變得困難,並且還避開了基於網路地址的訪問限制。如下圖所示:

![ftp bounce attack][ftp_bounce_attack]

可以看出,實施 FTP 跳轉攻擊的關鍵是利用 FTP 協議中的 PORT 命令來開啟目標機器上的特點埠來實施攻擊。所以阻止 FTP 跳轉攻擊的策略也基本都是圍繞這一步來進行的。一般 FTP 跳轉攻擊首先都需要上傳一個攻擊檔案到 FTP 伺服器,然後再傳送到目標機器,所以第一個方法也是上面提到的,禁止 FTP 伺服器的寫入功能。當然,即使禁止了 FTP 伺服器的寫入功能,攻擊者還是可以通過傳送其它命令的方式進行攻擊,所以這個不能完全杜絕 FTP 跳轉攻擊。另外,FTP 服務的預設埠是20,21,所以避免跳轉攻擊的另外一個建議就是在伺服器上不要開啟資料連結到小於1024的 TCP 埠號。當然最徹底的辦法就是禁用 PORT 命令,但這會使 FTP 伺服器喪失代理的功能。

本文系 OneAPM 架構師左偉原創文章。如今,多樣化的攻擊手段層出不窮,傳統安全解決方案越來越難以應對網路安全攻擊。OneASP 自適應安全平臺整合了預測、預防、檢測和響應的能力,為您提供精準、持續、視覺化的安全防護。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格

[參考資料] https://www.ietf.org/rfc/rfc959.txt https://hakin9.org/wp-content/uploads/2014/05/f81.jpg https://www.giac.org/paper/gsec/748/ftp-security-hole-about/101645 http://www.cnpaf.net/rfc/rfc2577.txt http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1214 http://www.ouah.org/ftpbounce.html

本文轉自 OneAPM 官方部落格

相關文章