运维安全系列基础服务之 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 ...
随机推荐
- c#中[Flags] 枚举类型定义问题_百度知道
[Flags]的微软解释是“指示可以将枚举作为位域(即一组标志)处理.”其实就是在编写枚举类型时,上面附上Flags特性后,用该枚举变量是既可以象整数一样进行按位的“|”或者按位的“&”操作了 ...
- iOS NSDatePicker
1.NSDate类 1>NSDate是系统一个日期,时间类 2>就是返回当前的日期,时间 3>+(id)date; 4>返回未来secs秒后的日期,时间 5>+(id)d ...
- 基于Windows的套接字相关函数及示例
链接ws2_32.lib库 头文件#include <winsock2.h> int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSADa ...
- 20151225jquery学习笔记---折叠菜单UI
折叠菜单(accordion),和选项卡一样也是一种在同一个页面上切换不同内容的功能UI.它和选项卡的使用几乎没有什么太大区别,只是显示的效果有所差异罢了.一. 使用 accordion使用 acco ...
- JavaMail组件实现邮件功能
实现邮件收发功能需要3个jar包: 1.JavaMail组件保内的mail.jar和smtp.jar包 2.JAF组件包里的activition.jar. 复制到WebRoot/WEB-INF/lib ...
- Xcode6.1模拟器ios8.1模拟器不能弹出虚拟键盘及虚拟键盘无法切换中文输入的解决办法
1.不能弹出虚拟键盘的解决办法 模拟器菜单Hardware->Keyboard->Connect Hardware Keyboard取消选中,快捷键commad+shift+K 2.虚拟键 ...
- iOS控件——UIView的viewWithTag:(int)findTag方法描述
UIView拥有一个viewWithTag:(int)findTag方法,调用方式为[MyView viewWithTag:整形数字]该方法返回tag == findTag的控件.ios控件中允许多个 ...
- ImageIcon图像处理相关测试【一些特殊的处理方式】
/*************以下源码通过测试******************************/ package cn.jason.ios.images; import java.awt.F ...
- MFC设置对话框透明背景
在对话框初始化函数OnInitDialog函数中添加如下代码: SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(), ...
- Inline functions
Problems: (Page 372) There are two problems with the use of proprocessor macros in C++. The first is ...