运维安全系列基础服务之 FTP 服务(系列一)
做了多年运维工程师,积攒了一些经验,和大家分享下。个人认为,运维安全话题的系列,主要包括下面四个方面:
- 基础服务
- 网络层
- 应用层
- 云安全
今天主要讲的是基础服务里面的[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 来进行文件共享。既然任何人都可以使用这个账号,这也为黑客侵入提供了便利。通常的做法是:
- 通过匿名账号的写权限上传木马实施攻击;
- 通过启动 FTP daemon 的系统账号权限进行攻击;
- 通过匿名账号启动系统 shell;
- 即使没有上述所有权限,也可以通过大规模的
登录/退出操作让系统日志快速增长,从而吃满服务器空间让服务器挂掉;
所以匿名 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 服务(系列一)的更多相关文章
- SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
samba服务 Smb主要作为网络通信协议; Smb是基于cs架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 第一步:安装samba [root@ken ~] ...
- 末学者笔记——SAMBA服务、FTP服务讲解
samba服务 一.概念: Smb主要作为网络通信协议; Smb是基于cs(client,sever)架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 二. ...
- SANBA服务和FTP服务
1.samba服务 Smb主要作为网络通信协议:Smb是基于cs(client/server)架构(架构还有bs,broswer/server):完成linux与windows之间的共享:linux与 ...
- SAMBA服务和FTP服务讲解
rz sz window和Linux之间小文件的传输 yum install lrzsz -y rz:window文件传送到linux中 sz:把Linux文件传送到window 防火墙: 立即关闭但 ...
- Zabbix 3.4.11监控 apache服务,ftp服务的配置
一 zabbix 的安装部署 略 二监控 apache服务的配置 首先在本机下载模板:https://github.com/rdvn/zabbix-templates/archive/m aster. ...
- web服务,ftp服务以及共享实现
在开始服务前一定要确保可以ping通外网,在虚拟机联网但ping 不通外网下 确认vim /etc/sysconfig/network-scripts/ifcfg-ens33 (nmcli conne ...
- FTP服务端 FTP服务端搭建教程
FTP服务端搭建教程如下:一.需要准备以下工具:1.微型FTP服务端.2.服务器管理工具二.操作步骤:1.下载微型FTP服务端.(站长工具包可下载:http://zzgjb.iis7.com/ )2. ...
- linux服务之FTP服务篇
一.FTP协议 FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP (File Transfer ...
- Linux学习66 运维安全-通信加密和解密技术入门
一.Linux Service and Security 1.OpenSSL(ssl/tls)协议 2.OpenSSH(ssh)协议 3.bind(dns) 4.web(http):httpd(apa ...
随机推荐
- 使用Keytool工具生成证书Keystore和证书签名请求文件
内容概览: keytool的几个常用的命令. 1.创建证书 2.查看证书库 3.导出证书文件 4.导入证书的信息 5.查看证书信息 6.删除密钥库中的条目 7.修改证书条目的口令 ---------- ...
- C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...
- js知识
行为=事件+由该事件触发的动作 常用事件:onXxx onLoad 打开网页事件 onUnLoad 关闭事件 onClick 单击事件 onChange ...
- Eclipse 配置SSH 详解
http://blog.csdn.net/binyao02123202/article/details/18446523 最近看了很多招聘,其中很多我想去的公司都需要一些技能,其中熟练 Java SS ...
- lucene 4.4 demo
ackage com.zxf.demo; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStr ...
- OC - 5.内存管理
一.引用计数器 1> 栈和堆 栈 ① 主要存储局部变量 ② 内存自动回收 堆 ① 主要存储需要动态分配内存的变量 ② 需要手动回收内存,是OC内存管理的对象 2> 简介 作用 ① 表示对象 ...
- 销毁session
session运行在服务器是单用户,每个session都有一个唯一的sessionid 用法:session.setAttribute("userName", "张三丰& ...
- 2014年12月20日00:33:14-遮罩+进度条-extjs form.isvalid
1.Extjs : 遮罩+进度条 2.Extjs: extjs form.isvalid http://stackoverflow.com/questions/19354433/extjs-form- ...
- 【原创】Android开发之ADB及ADB SHELl命令的应用
adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.adb的工作方式比 ...
- jquery 插件的编写
/** * 插件的学习 * 原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html#home */ ;(function($, ...