做了多年运维工程师,积攒了一些经验,和大家分享下。个人认为,运维安全话题的系列,主要包括下面四个方面:

  • 基础服务
  • 网络层
  • 应用层
  • 云安全

今天主要讲的是基础服务里面的[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][ftpbounceattack]

可以看出,实施 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