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

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

今天主要讲的是基础服务里面的[FTP服务][ftp]。

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。

FTP 是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像 MIME 或 Unicode 一样。但是,FTP 有着极高的延时,

这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。

(https://zh.wikipedia.org/wiki/文件传输协议)

从现在来看,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 官方博客

运维安全系列基础服务之 FTP 服务(系列一)的更多相关文章

  1. SAMBA服务和FTP服务讲解(week3_day1)--技术流ken

    samba服务 Smb主要作为网络通信协议; Smb是基于cs架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 第一步:安装samba [root@ken ~] ...

  2. 末学者笔记——SAMBA服务、FTP服务讲解

    samba服务 一.概念: Smb主要作为网络通信协议; Smb是基于cs(client,sever)架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS   二. ...

  3. SANBA服务和FTP服务

    1.samba服务 Smb主要作为网络通信协议:Smb是基于cs(client/server)架构(架构还有bs,broswer/server):完成linux与windows之间的共享:linux与 ...

  4. SAMBA服务和FTP服务讲解

    rz sz window和Linux之间小文件的传输 yum install lrzsz -y rz:window文件传送到linux中 sz:把Linux文件传送到window 防火墙: 立即关闭但 ...

  5. Zabbix 3.4.11监控 apache服务,ftp服务的配置

    一 zabbix 的安装部署 略 二监控 apache服务的配置 首先在本机下载模板:https://github.com/rdvn/zabbix-templates/archive/m aster. ...

  6. web服务,ftp服务以及共享实现

    在开始服务前一定要确保可以ping通外网,在虚拟机联网但ping 不通外网下 确认vim /etc/sysconfig/network-scripts/ifcfg-ens33 (nmcli conne ...

  7. FTP服务端 FTP服务端搭建教程

    FTP服务端搭建教程如下:一.需要准备以下工具:1.微型FTP服务端.2.服务器管理工具二.操作步骤:1.下载微型FTP服务端.(站长工具包可下载:http://zzgjb.iis7.com/ )2. ...

  8. linux服务之FTP服务篇

    一.FTP协议 FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP (File Transfer ...

  9. Linux学习66 运维安全-通信加密和解密技术入门

    一.Linux Service and Security 1.OpenSSL(ssl/tls)协议 2.OpenSSH(ssh)协议 3.bind(dns) 4.web(http):httpd(apa ...

随机推荐

  1. iOS之NSURLSessionDownloadTask下载

    #import "ViewController.h" @interface ViewController ()<NSURLSessionDownloadDelegate,NS ...

  2. Android开发——避免内存泄露

    本文翻译自Avoiding memory leak——Post by Romain Guy 著作权归原作者所有.转载请注明出处,由JohnTsai翻译 Android应用被分配的堆的大小限制为16MB ...

  3. Redis与Memcached对比

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富,有字符串.链表.集合和有序集合.支持在服务器端计算集合的并,交和补集等.还支持多 ...

  4. HTML5十五大新特性

    HTML5想必大家都很熟悉了.然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性. 一起来看下: 1.新的文档类型  (New Doctype) 目前 ...

  5. android studio环境搭建-笔记1

    自己干了几年测试(功能性的),最近比较闲,就自己学习下android(以前也有所接触,但那是几年前的一点皮毛,都忘记了). 先搭建谷歌推出的android studio(以前用eclipse搭建总觉得 ...

  6. sqlite 数据库打开失败

    今天在做Android电子词典的时候,数据库打不开,报错为:Could not open the database in read/write mode. 后来才发现犯了一个低级错误,没有设置权限. ...

  7. JS中(function(){xxx})(); 这种写法是什么意思?

    自执行匿名函数: 常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命 ...

  8. Eclipse使用Maven创建Web项目

    一.Maven插件下载.jdk下载 1.maven下载地址: http://maven.apache.org/download.cgi 2.jdk下载地址: http://www.oracle.com ...

  9. Android清空画布

    public void clear() { Paint paint = new Paint(); paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR ...

  10. ABP手机端调用API时的CORS

    这个问题其实很早就考虑了,当时因为也没有特别着急去解决这个问题,就一直拖着.... 好吧,拖延症是不好的,所有不懒得做的,终将会逼着你去再很短的时间内去解决问题...实现项目 改写一个已有的webfo ...