运维安全系列基础服务之 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 ...
随机推荐
- 一种通用数据采集的schema定义形式
{ "name": "凤凰金融", "notice": { "data": "attribute", ...
- verilog 常用系统函数及例子
1.打开文件 integer file_id; file_id = fopen("file_path/file_name"); 2.写入文件:$fmonitor,$fwrite,$ ...
- 图灵API
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine( ...
- WildFly 9.0.2 启用 SSL
一.最近做个项目是需要在WildFly中启用https,但是由于WildFly的中文文档比较少所以google了一下,先是通过JBOSS的官方文档了解了一下,但是官方文档这块的配置介绍有些不全面.所以 ...
- 使用反射让Spinner选择同一选项时触发onItemSelected事件
翻看源码,Spinner判断是否触发onItemSelected,是在它的基类AdapterView里面做的: void checkSelectionChanged() { if ((mSelecte ...
- Oracle 11g gateways(透明网关)配置
配置要点主要有三点: 1.%GATEWAYS_HOME%(透明网关安装目录)\dg4msql\admin\initdg4msql.ora 内容: HS_FDS_CONNECT_INFO=localho ...
- Ext.Net学习笔记09:Ext.Net Store的用法
使用Handler处理分页 首先来创建一般处理程序,我命名为StoreHandler.ashx,然后它的处理过程代码如下: public void ProcessRequest(HttpContext ...
- Cell的重用机制
static NSString *resuseId=@"cell"; UITableViewCell *cell=[tableView dequeueReusableCellWit ...
- O-C相关05:方法的封装.
前言:在 OC 中进行封装, 就是实现设置实例变量和获取实例变量数据的方法, 常常称为 setter 方法和 getter 方法. 或称为 get set 读写器. 1,setter 方法 sette ...
- Javascript 迭代法实现数组多条件排序
多条件排序可能有很多种思路,效率也各不相同,我的方法可能只适合自己用,毕竟目的是为了实现功能,所以采用了最笨的方法,不过效果还是很理想的,经过多次测试,6列1000行数据,平均排序时间大约是:28ms ...