FTP的安全问题 《转》


 作 者: 丁力

摘要

文件传输协议(File Transfer Protocol,FTP)是一个被广泛应用的协议,它使得我们能够在网络上方便地传输文件。早期FTP并没有涉及安全问题,随着互连网应用的快速增长,人们对安全的要求也不断提高。本文在介绍了FTP协议的基本特征后,从两个方面探讨了FTP安全问题的解决方案:协议在安全功能方面扩展;协议自身的安全问题以及用户如何防范之。


  1. 简介

1.1 FTP的一些特性
  早期对FTP的定义指出,FTP是一个ARPA计算机网络上主机间文件传输的用户级协议。其主要功能是方便主机间的文件传输,并且允许在其他主机上进行方便的存储和文件处理。[BA72]而现在FTP的应用范围则是Internet。

根据FTP STD 9定义,FTP的目标包括:[PR85]
  1) 促进文件(程序或数据)的共享
  2) 支持间接或隐式地使用远程计算机
  3) 帮助用户避开主机上不同的
  4) 可靠并有效地传输数据

关于FTP的一些其他性质包括:FTP可以被用户在终端使用,但通常是给程序使用的。FTP中主要采用了传输控制协议(Transmission Control Protocol,TCP)[PJ81],和Telnet 协议[PJ83]。

1.2 重要历史事件[PR85]

1971年,第一个FTP的RFC(RFC 114)由A.K. Bhushan在1971年提出,同时由MIT与Harvard实验实现。

1972年,RFC 172 提供了主机间文件传输的一个用户级协议。

1973年2月,在长期讨论(RFC 265,RFC 294,RFC 354,RFC 385,RFC 430)后,出现了一个官方文档RFC 454。

1973年8月,出现了一个修订后的新官方文档 RFC 542。确立了FTP的功能、目标和基本模型。当时数据传输协议采用NCP。

1980年,由于底层协议从NCP改变为TCP,RFC 765 定义了采用TCP的FTP。

1985年,一个作用持续至今的官方文档RFC 959(STD 9)出台。

1.3 FTP模型[PR85]

就模型而言,从1973年以来并没有什么变化。下图是FTP使用模型:

-------------
  |/---------\|
  || User || --------
  ||Interface|| User |
  |\----^----/| --------
  ---------- | | |
  |/------\| FTP Commands |/----V----\|
  ||Server|| User ||
  || PI || FTP Replies || PI ||
  |\--^---/| |\----^----/|
  | | | | | |
  -------- |/--V---\| Data |/----V----\| --------
  | File ||Server|| User || File |
  |System| || DTP || Connection || DTP || |System|
  -------- |\------/| |\---------/| --------
  ---------- -------------

Server-FTP USER-FTP

注: 1. data connection 可以双向使用(双工)
  2. data connection 不需要一直存在.

图一 FTP使用模型
  术语
  User PI(user-protocol interpreter): 用户协议解释器
  Server PI(Server-protocol interpreter): 服务协议解释器
  control connection:控制连接
  Data connection:数据连接
  FTP Commands:FTP命令。描述Data connection的参数,文件操作类型
  FTP Replies:FTP命令

在图一描述的模型中,User PI创建control connection。control connection遵从Telnet协议。在用户初始化阶段,标准FTP命令被User PI生成并通过control connection 传到服务器处理。Server PI将相应的标准FTP应答通过control connection回传给User PI。数据传输由Data connection完成。
  User DTP 在特定端口监听,由Server DTP 用指定参数初始化连接。

另一种情形是用户希望在两台非本地的主机上传递文件。用户与两个服务器建立control connection,安排两个服务器间的文件传输。下图描述了这样的模型。

Control ------------ Control
  ---------->| User-FTP || "B" |
  -------------- Port (A) Port (B) --------------


  图二 服务器间交互模型


  2.FTP协议的安全扩展[HL97]

2.1 一些安全地进行文件传输实践

a. 通过FTP传输预先被加密的文件
  b. 通过E-mail传输预先被加密的文件
  c. 通过PEM消息
  d. 通过使用Kerberos的rcp命令.

2.2 在RFC 2228 之前的FTP并不安全
  虽然FTP采用 TELNET 协议执行connection control操作,而且 TELNET 协议
  后来又增补了认证和加密选项,但在RFC 1123 中禁止在connection control中进行 TELNET 选项协商。另外 TELNET 协议也没有提供完整性保护,而且也没有data connection 的保护。

2.3 扩展命令
  AUTH (Authentication/Security Mechanism),认证与安全机制
  ADAT (Authentication/Security Data),认证与安全数据
  PROT (Data Channel Protection Level),数据通道保护层次
  PBSZ (Protection Buffer Size),保护缓冲大小
  CCC (Clear Command Channel),清空命令通道
  MIC (Integrity Protected Command),完整性保护命令
  CONF (Confidentiality Protected Command), 保密保护命令
  ENC (Privacy Protected Command),私有性保护命令

一种新的返回类型(6yz)也被引入以保护返回值。

2.4 协议状态图

下图描述了在一个提高了安全性的FTP实现中认证和和授权的流程。方形的块表示客户端需要发出的命令的状态,菱形的块表示服务器需要发出响应的状态。


  ,------------------, USER
  __\| Unauthenticated |_________\
  | /| (new connection) | /|
  | `------------------ |
  | | |
  | | AUTH |
  | V |
  | / \ |
  | 4yz,5yz / \ 234 |
  |------------->. |
  | \ / | |
  | \_/ | |
  | | | |
  | | 334 | |
  | V | |
  | ,--------------------, | |
  | | Need Security Data |----------- | |
  \ / | |
  \_/ | |
  | | |
  | 235 | |
  V | |
  ,---------------. | |
  ,--->| Authenticated |------------->.
  | \ / |
  | \_/ |
  | | |
  | | 3yz |
  | V |
  | ,---------------. |
  | | Need Password | |
  | `--------------- |
  | | |
  | | PASS |
  | V |
  | / \ |
  | 4yz,5yz / \ 2yz |
  |------------->|
  | \ / |
  | \_/ |
  | | |
  | | 3yz |
  | V |
  | ,--------------. |
  | | Need Account | |
  | `-------------- |
  | | |
  | | ACCT |
  | V |
  | / \ |
  | 4yz,5yz / \ 2yz |
  `------------->|
  \ / |
  \_/ |
  | |
  | 3yz |
  V |
  ,-------------. |
  | Authorized |/________|
  | (Logged in) |\
  `-------------


  3. 协议的安全问题及防范措施[AO99]

3.1 防范反弹攻击(The Bounce Attack)

a. 漏洞

FTP规范[PR85]定义了“代理FTP”机制,即服务器间交互模型。支持客户建
  立一个FTP控制连接,然后在两个服务间传送文件。同时FTP规范中对使用TCP的端口号没有任何限制,而从0-1023的TCP端口号保留用于众所周知的网络服务。所以,通过“代理FTP”,客户可以命令FTP服务器攻击任何一台机器上的众所周知的服务。

b. 反弹攻击

客户发送一个包含被攻击的机器和服务的网络地址和端口号的FTP“PORT”
  命令。这时客户要求FTP服务器向被攻击的服务发送一个文件,这个文件中应包含与被攻击的服务相关的命令(例如:SMTP、NNTP)。由于是命令第三方去连接服务,而不是直接连接,这样不仅使追踪攻击者变得困难,还能避开基于网络地址的访问限制。


  c. 防范措施

最简单的办法就是封住漏洞。首先,服务器最好不要建立TCP端口号在1024
  以下的连接。如果服务器收到一个包含TCP端口号在1024以下的PORT命令,服务器可以返回消息504([PR85]中定义为“对这种参数命令不能实现”)。
  其次,禁止使用PORT命令也是一个可选的防范反弹攻击的方案。大多数的文件传输只需要PASV命令。这样做的缺点是失去了使用“代理FTP”的可能性,但是在某些环境中并不需要“代理FTP”。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3