眼下在网络上,假设你想把文件和其它人共享。最方便的办法莫过于将文件放FTPserver上,然后其它人通过FTPclient程序来下载所须要的文件。
1、FTP架构
如同其它的非常多通讯协议,FTP通讯协议也採用客户机 / server(Client / Server )架构。用户能够通过各种不同的FTPclient程序,借助FTP协议,来连接FTPserver,以上传或者下载文件。
起初,FTP并非应用于IP网络上的协议,而是ARPANEt网络中计算机间的文件传输协议, ARPANET是美国国防部组建的老网络,于1960-1980年使用。在那时, FTP的主要功能是在主机间快速可靠地传输文件。眼下FTP仍然保持其可靠性,即使在今天,它还同意文件远程存取。这使得用户能够在某个系统上工作,而将 文件存贮在别的系统。比如,假设某用户执行Webserver,须要从远程主机上取得HTML文件和CGI程序在本机上工作,他须要从远程存储网站获取文件(远 程网站也需安装Webserver)。当用户完毕工作后,可使用FTP将文件传回到Webserver。採用这样的方法,用户无需使用Telnet登录到远程主机进行工 作,这样就使Webserver的更新工作变得如此的轻松。
FTP是TCP/IP的一种详细应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服 务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与server之间的连接是可靠的,并且是面向连接,为数据的传输提供了可靠 的保证。
以下,让我们来看看,一个FTP客户在和server连接是怎么样的一个过程(以标准的FTPport号为例)。
首先,FTP并不像HTTP协议那样,仅仅须要一个port作为连接(HTTP的默认port是80,FTP的默认port是21),FTP须要2个port,一个port是作 为控制连接port,也就是21这个port,用于发送指令给server以及等待server响应;还有一个port是传输数据port,port号为20(仅PORT模式),是用来建立 传输数据通道的,主要有3个作用
从客户向server发送一个文件。
从server向客户发送一个文件。
从server向客户发送文件或文件夹列表。
其次,FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于server而言的。为了让大家清楚的认识这两种模式,朗月繁星分别举例说明。
PORT模式
当FTP客户以PORT模式连接server时,他动态的选择一个port号(本次试验是6015)连接server的21port,注意这个port号一定是1024以上的,因 为1024曾经的port都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些port的资源服务。当经过TCP的三次握手后,连 接(控制信道)被建立(如图1和图2)。
图1:FTP客户使用FTP命令建立于server的连接
图2:用netstat命令查看,控制信道被建立在客户机的6015和server的20port
如今用户要列出server上的文件夹结构(使用ls或dir命令),那么首先就要建立一个数据通道,由于仅仅有数据通道才干传输文件夹和文件列表,此时用户会发出 PORT指令告诉server连接自己的什么port来建立一条数据通道(这个命令由控制信道发送给server),当server接到这一指令时,server会使用20port连接用 户在PORT指令中指定的port号,用以发送文件夹的列表(如图3)。
图3:ls命令是一个交互命令,它会首先与server建立一个传输数据通道。经验证本次试验客户机使用6044port
当完毕这一操作时,FTP客户或许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉server连接他的哪个"新"端 口,你能够先用netstat -na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态(如图4)。
图4:使用netstat命令验证上一次使用ls命令建立的传输数据通道已经关闭
当这个新的传输数据通道建立后(在微软的系统中,client一般会使用连续的port,也就是说这一次client会用6045这个port),就開始了文件传输的工作。
PASV模式
然而,当FTP客户以PASV模式连接server时,情况就有些不同了。在初始化连接这个过程即连接server这个过程和PORT模式是一样的,不同的是,当 FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向server发送PORT指令而是发送PASV指令,在这个指令中,用户告诉server自己 要连接server的某一个port,假设这个server上的这个port是空暇的可用的,那么server会返回ACK的确认信息,之后传输数据通道被建立并返回用户所要的信息 (依据用户发送的指令,如ls、dir、get等);假设server的这个port被还有一个资源所使用,那么server返回UNACK的信息,那么这时,FTP客户会 再次发送PASV命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助CUTEFTP Pro这个大家常常使用的FTPclient软件,由于微软自带的FTP命令client,不支持PASV模式。尽管你能够使用QUOTE PASV这个命令强制使用PASV模式,可是当你用ls命令列出server文件夹列表,你会发现它还是使用PORT方式来连接server的。如今我们使用 CUTEFTP Pro以PASV模式连接server(如图5)。
图5:使用CUTEFTP Pro以PASV模式连接server
请注意连接LOG里有这样几句话:
COMMAND:> PASV
227 Entering Passive Mode (127,0,0,1,26,108)
COMMAND:> LIST
STATUS:> Connecting ftp data socket 127.0.0.1: 6764...
125 Data connection already open; Transfer starting.
226 Transfer complete.
当中,227 Entering Passive Mode (127,0,0,1,26,80). 代表客户机使用PASV模式连接server的26x256+108=6764port。(当然server要支持这样的模式)
125 Data connection already open; Transfer starting.说明server的这个port可用,返回ACK信息。
再让我们看看用CUTEFTP Pro以PORT模式连接server的情况。当中在LOG里有这种记录:
COMMAND:> PORT 127,0,0,1,28,37
200 PORT command successful.
COMMAND:> LIST
150 Opening ASCII mode data connection for /bin/ls.
STATUS:> Accepting connection: 127.0.0.1:20.
226 Transfer complete.
STATUS:> Transfer complete.
当中,PORT 127,0,0,1,28,37告诉server当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个port。
Accepting connection: 127.0.0.1:20表示server接到指令后用20port连接7205port,并且被FTP客户接受。
比較分析
在这两个样例中,请注意: PORT模式建立传输数据通道是由server端发起的,server使用20port连接client的某一个大于1024的port;在PASV模式中,传输数据的通道的建立是 由FTPclient发起的,他使用一个大于1024的port连接server的1024以上的某一个port。假设从C/S模型这个角度来说,PORT对于server来说是 OUTBOUND,而PASV模式对于server是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比方使用微软的ISA Server 2000公布一个FTPserver,这一点很关键,假设设置错了,那么客户将无法连接。
最后,请注意在FTP客户连接server的整个过程中,控制信道是一直保持连接的,而传输数据通道是暂时建立的。
在本文中把重点放到了FTP的连接模式,没有涉及FTP的其它内容,比方FTP的文件类型(Type),格式控制(Format control)以及传输方式(Transmission mode)等。只是这些规范大家可能不须要花费过多的时间去了解,由于如今流行的FTPclient都能够自己主动的选择正确的模式来处理,对于FTPserver端通常 也都做了一些限制,例如以下:
类型:A S C I I或图像。
格式控制:仅仅同意非打印。
结构:仅仅同意文件结构。
传输方式:仅仅同意流方式
至于这些内容,限于篇幅在这里就不想再介绍了。希望这篇文章能对大家有些帮助,特别是正在学习ISA Server2000的朋友和一些对FTP不非常了解的朋友。
前 言
FTP(File Transfer Protocol,文件传输协议)是互联网上经常使用的协议之中的一个,人们用FTP实现互连网上的文件传输。因为TCP/IP协议族在设计时是处在一个相互信任的 平台上的,使得在网络安全越来越被重视的今天,TCP/IP协议族的安全性也成为了安全界研究的一个重点,著名的ARP欺骗,交换环境下的数据监听,中间 人攻击,以及DDOS,都利用了TCP/IP协议的脆弱性,FTP协议也或多或少的存在着一些问题,本文从FTP协议本身出来,探讨一下FTP协议的安全 性。
第一章 FTP协议
一、协议简单介绍
FTP协议和HTTP协议相似,都是採用的TCP连接,但与HTTP协议不同的是,HTTP协 议的全部数据都是通过80port进行传输(这里不考虑SSL),而FTP把数据和命令分开来处理,我们暂且把它们分别命名为“命令通道”和“数据通道”。命 令通道通常是在我们熟悉的21port,而数据通道通常是一个高port。比如客户机要从FTPserver上获取某个文件,首先由客户机登录server,与server建立连 接,这就是我们前面讲的“命令通道”,客户机从这条通道将请求文件的命令发往server,server接到此命令后将与客户机又一次建立一条连接,这就是我们面前讲的 “数据通道”,文件数据将通过数据通道传送到客户机。这里我们用图1-1来表示文件传输中的处理过程
用户接口
|
| 命令通道
用户协议解释器--------------server协议接口
|
| 数据通道
用户传输数据功能-----------server传输数据功能
二、数据表示
FTP协议规范提供了控制文件传送与存储的多种选择。在下面四个方面都须作出一个选择。
1、文件类型
(1)ASCII码文件类型 普通情况下ASCII码文件类型是默认选择的。
(2)EBCDIC文件类型 该类型传输方式要求两端都是EBCDIC系统。
(3)图像文件类型(也称二进制类型) 数据发送呈现为一个比特流,通经常使用于传输二进制文件
(4)本地文件类型 该方式在具有不同字节大小的主机之间传输二进制文件。
2、格式控制
该选项仅仅对ASCII和EBCDIC文件有效。
(1)非打印
(2)远程登录格式控制
(3)Fortran回车控制
3、结构
(1)文件结构
(2)记录结构
(3)页结构
4、传输方式
(1)流方式
(2)块方式
(3)压缩方式
三、FTP命令
FTP命令和应答是在命令通道以ASCII码开形式传送的,下面给出经常使用的命令及命令的相关说明:
命令 说 明
ABOR 放弃先前的FTP命令和数据转输
LIST 列表显示文件或文件夹
PASS server上的口令
PORT 客户IP地址和port
QUIT 从server上注销
RETR 取一个文件
STOR 存一个文件
SYST server返回系统类型
TYPE 说明文件类型
USER server上的username
四、FTP应答
FTP应答都是ASCII码形式的3位数字,并跟有报文选项。3位数字每一位都有不同的意义,这里给出一些常见的反回数字:
125 数据通道已经打开;传输開始。
200 就绪命令。
214 帮助报文。
331 username就绪,要求输入口令。
425 不能打开数据通道。
500 语法错误(未认可命令)。
501 语法错误(无效參数)。
502 未实现的MODE(方式命令)类型。
五、连接管理
我们在前面讲了FTP的命令传输和传输数据是通过不同的port进行传输的,连接管理也就理所当然的成了FTP协议的核心问题。当中最关键的又是数据通道的管理。
数据通道有下面三大用途:
1>从客户向server发送一个文件。
2>从server向客户发送一个文件。
3>从server向客户发送文件域文件夹列表。
当中传输模式又有主动FTP和被动FTP之分。主动FTP的一般步骤例如以下:
1、客户发出命令建立数据连接。
2、客户通常在client主机上为所在数据连接选择一个暂时port号。客户从该port公布一个被动的打开。
3、客户使用PORT命令从命令通道把数据通道的port发向server。
4、server在命令通道上接收port号,并向client主机上的port发存一个主动的打开。这时server的数据通道使用的是20port。
而被动FTP与主动FTP不同的是它不是由客户主机开一个暂时port,而是由server开一个暂时port等待客户机的连接。Fedora自带的vsftp就是採用的被动的传输模式。以下是从登录vsftp,到运行ls,再到退出的全过程。
[xinhe@xinhe xinhe]$ ftp -d xxx.xxx.xxx.xxx
Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).
220 Welcome to ylyz FTP service.
Name (xxx.xxx.xxx.xxx:xinhe): xplore
---> USER xinhe
331 Please specify the password.
Password:
---> PASS XXXX
230 Login successful.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)
---> LIST
150 Here comes the directory listing.
drwxr-xr-x 11 48 48 4096 Jul 21 10:52 xxx
drwxr-xr-x 19 48 48 4096 Jul 31 14:18 xxxx
drwx------ 2 0 0 16384 Jun 23 03:18 lost+found
drwxr-xr-x 3 510 510 4096 Aug 03 05:42 software
drwxr-xr-x 2 510 510 4096 Jun 30 09:34 tmp
drwxr-xr-x 6 510 510 4096 Jun 27 08:17 xxxxx
drwxrwxr-x 10 501 501 4096 Aug 12 20:35 xxxxxxx
-rw-r--r-- 1 510 510 12649185 Aug 12 20:34 xxxx
drwxr-xr-x 7 501 12 4096 Jul 03 15:13 xinhe
drwxr-xr-x 7 510 510 4096 Aug 13 19:08 zwell
226 Directory send OK.
Ftp> bye
---> QUIT
221 Goodbye.
以上就是登录某台vsftp的server,运行了一个ls然后再退出的全过程,以上是採用的被动传输模式,关键看这一句:
---> PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)
这一句告诉了我们server的IP和开暂时数据port,接着便是登录到这一暂时port 52297 ,暂时port的算法:204*256+73。为了更清楚的了解之过程,我们对这一过程的数据传送进行了监视。下面是客户机登录暂时port过程中的一段
08/24-15:24:24.052846 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4A
192.168.10.8:32791 -> xxx.xxx.xxx.xxx:52297 TCP TTL:64 TOS:0x0 ID:39780 IpLen:20 DgmLen:60 DF
******S* Seq: 0x42206DD2 Ack: 0x0 Win: 0x16D0 TcpLen: 40
TCP Options (5) => MSS: 1460 SackOK TS: 849590 0 NOP WS: 0
注:因为測式过程中的server是公网上的真实server,故屏弊其地址。
第二章 安全隐患
以上我们讨论了FTP协议本身和FTP的详细传输过程,在这一过程中,非常多地方都存在着安全隐患,随着互联网和普及了深入,网络安全也越来越被人们 重视,在这里我把一些常见的关于FTP的安全隐患提出来,希望引起人们对FTP安全的重视,使FTPserver和传输数据过程更加安全。
一、FTPserver软件漏洞
这 类安全隐患不是本文讨论的重点,可是在这里必须把它提出来,由于它对于FTP服务供应商来说就是恶梦,也是倍受黑客们关注的焦点,经常使用的FTP服务软件有 Wu-ftpd, ProFTPD,vsftpd,以及windows下经常使用的Serv-U等,最常见也最可怕的漏洞就是缓冲区溢出,近来Wu-ftpd和Serv-U的溢 出漏洞层出不穷,ProFTPD也出现过缓冲区溢出,眼下比較安全的还是vsftp,必竞是号称很安全的FTP。
二、明文口令
前面讲过了,TCP/IP协议族的设计在地相互信任和安全的基础上的,FTP的设计当然也没有採用加密传送,这种话,FTP客户与server之前全部的数据传送都是通过明文的方式,当然也包含了口令。
至 从有了交换环境下的数据监听之后,这样的明文传送就变得十分危急,由于别人可能从传输过程过捕获一些敏感的信息,如username和口令等。像HTTPS和SSH都 採用加密攻克了这一问题。而FTP仍然是明文传送,而像UINX和LINUX这类系统的ftp账号通常就是系统帐号,(vsftp就是这样做的)。这样黑 客就能够通过捕获FTP的username和口令来取得系统的帐号,假设该帐号能够远程登录的话,通常採用本地溢出来获得root权限。这样这台FTPserver就被黑 客控制了。
下面是我捕获的明文传送的数据:
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.511233 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4F
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36423 IpLen:20 DgmLen:65 DF
***AP*** Seq: 0x407F7F77 Ack: 0x1BD963BF Win: 0x16D0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 848536 1353912910
55 53 45 52 20 78 70 6C 6F 72 65 0D 0A USER xinhe..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.557058 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x42
xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0x0 ID:29145 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 1353916422 848536
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.560516 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x64
xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0x0 ID:29146 IpLen:20 DgmLen:86 DF
***AP*** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 1353916426 848536
33 33 31 20 50 6C 65 61 73 65 20 73 70 65 63 69 331 Please speci
66 79 20 74 68 65 20 70 61 73 73 77 6F 72 64 2E fy the password.
0D 0A ..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.571556 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x42
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36424 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x407F7F84 Ack: 0x1BD963E1 Win: 0x16D0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 848542 1353916426
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:21.364315 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x54
192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0x10 ID:36425 IpLen:20 DgmLen:70 DF
***AP*** Seq: 0x407F7F84 Ack: 0x1BD963E1 Win: 0x16D0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 849321 1353916426
50 41 53 53 20 78 70 6C 6F 72 65 5F 32 30 30 34 PASS test
0D 0A ..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
这样就我们就能够看到该ftpserver上的username是:xinhe和password:test。
三、FTP旗标
这个问题相对来说不是非常严重,如今非常多服务软件都有这类问题,黑客在发起攻击之前一般要先确定对方所用的版本。这样便于选择攻击程序。下面是一个样例:
[xinhe@xinhe xinhe]$ ftp xxx.xxx.xxx.xxx
Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).
220-Serv-U FTP Server v5.1 for WinSock ready...
220 S TEAM
这此信息我们可知该server使用的服务软件可能就是Serv-U 5.1
四、通过FTPserver进行port扫描
FTPclient所发送的PORT命令告诉serverFTPserver传送数据时应当连向的IP和port,通常,这就是FTP客户所在机器的IP地址及其所绑定的port。然而FTP协议本身并没有要求客户发送的PORT命令中必须指定自已的IP。
利用这一点,黑客就能够通过第三方FTPserver对目标机器进行port扫描,这样的方式一般称为FTP反射,对黑客而言,这样的扫描方式具有下面两个长处:
(1)提供匿名性
因为port扫描的源地址为FTPserver的IP地址,而不是黑客的机器,所以这样的方式非常好的隐藏了黑客的真实IP。
(2)避免堵塞
因为通过第三方FTPserver进行扫描,即使目标机器通过加入内核ACL或无效路由来自己主动堵塞对其进行扫描的机器,但黑客能够过只是的FTPserver来完毕其扫描工作。
Nmap就能够实现这一扫描过程,下面是一次利用ftpserver进行扫描的实例。
[xinhe@xinhe xinhe]$ nmap -b xinhe:[email protected]:21 -v xxx.xxx.xxx.xxx
Hint: if your bounce scan target hosts aren't reachable from here, remember to use -P0 so we don't try and ping them prior to the scan
Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at 2004-08-24 20:16 CST
Resolved ftp bounce attack proxy to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).
Machine xxx.xxx.xxx.xxx MIGHT actually be listening on probe port 80
Host xxx.xxx.xxx.xxx appears to be up ... good.
Attempting connection to ftp://xinhe:[email protected]:21
Connected:220 Welcome to FTP service.
Login credentials accepted by ftp server!
Initiating TCP ftp bounce scan against xxx.xxx.xxx.xxx at 20:16
Adding open port 237/tcp
Deleting port 237/tcp, which we thought was open
Changed my mind about port 237
Adding open port 434/tcp
Deleting port 434/tcp, which we thought was open
Changed my mind about port 434
Adding open port 1509/tcp
Deleting port 1509/tcp, which we thought was open
Changed my mind about port 1509
Adding open port 109/tcp
Deleting port 109/tcp, which we thought was open
Changed my mind about port 109
Adding open port 766/tcp
Deleting port 766/tcp, which we thought was open
Changed my mind about port 766
Adding open port 1987/tcp
Deleting port 1987/tcp, which we thought was open
Changed my mind about port 1987
Adding open port 5998/tcp
Deleting port 5998/tcp, which we thought was open
Changed my mind about port 5998
Adding open port 1666/tcp
Deleting port 1666/tcp, which we thought was open
Changed my mind about port 1666
Adding open port 506/tcp
Deleting port 506/tcp, which we thought was open
Changed my mind about port 506
caught SIGINT signal, cleaning up
五、数据劫持
我们在前面讲了FTP的传输数据过程,相同FTP协议本身本并没有要求传输命令的客户IP和进行传输数据的客户IP一致,这样黑客就有可能劫持到客户和server之间传送的数据。依据传输数据的模式可把数据劫持分为主动数据劫持和被动数据劫持。
1、被动数据劫持
跟据前面讲的被动传输过程我们可以看出,在FTPclient发出PASV或PORT命令之后而且在发出数据请求之前,存在一个易受攻击的窗体。假设黑客能猜到这个port,就行连接并载取或替换正在发送的数据。
要实现被动数据劫持就必须知道server上打开的暂时port号,然后非常多server并非随机选取port,而是採用递增的方式,这样黑客要猜到这个port号就不是非常难了。
2、主动数据劫持
主动数据劫持比被动数据劫持要困难非常多,由于在主动传输的模式下是由客户打开暂时port来进行传输数据,而黑客是非常难找到客户的IP和暂时port的。
第三章 安全策略
一、使用较比安全的系统和FTP服务软件
这里安全的系统主要是最好不要採用windows系统作服务 器,由于系统本身的安全性就非常成问题,windows每年都要暴N个漏洞,一旦有溢出漏洞非常可能就能拿到管理员权限。一旦系统被入侵了,执行在此系统之上 的服务也就无安全性可言。Linux和BSD都将是不错的选择。
服务软件採用漏洞比較少的,如vsftp,并且确保版本号的更新。
二、使用密文传输username和口令
这里我们能够採用scp和sftp,也能够使用SSH来转发。这样即使黑客能监听到客户与server之间的数据交换,没有密钥也得不到口令。使用SSH转发有一些条件限制,首先要求server和client都是主动模式,然后是server必须同意命令通道之外的机器向其发送PORT命令。
三、更改服务软件的旗标
更改服务软件的旗标能起到迷惑攻击者的作用,至少能迷惑非常多扫描器,造成扫描器的误报,但更改旗标并非解决安全问题的根本办法,安全漏洞不会由于旗标不同而消失,只是更改总比不改要好一些。如今大多数的服务端软件都能够在配置文件中更改该FTP的旗标。
四、加强协议安全性
这一点是服务软件的提供商须要做的,一是对PORT命令进行检查,PORT后的IP应和客户主机是同一IP,我们对 FTP的攻击非常多都是通过构造特殊的PORT命令来实现的,所以PORT命令的使用对于攻击者来说就显得尤为重要了。做到这一点并非非常easy,Wu- ftpd就花了几年的时间。眼下针对数据劫持还没什么完美的防御方法,眼下能做的就是检查命令通道和数据通道的IP地址是不是一致,但这也不能百分之百地 防止数据劫持的发生。由于客户机和黑客可能处于同一内网。
后 记
网络已深入到社会生活的方方面面,网络安全也越来越显得重要,FTP协议安全仅仅是网络安全中一个非常小的部分,网络安全还有 非常多工作要做,这篇文章因为时间的关系写得比較浅显,没有把FTP服务软件的源代码拿出来讲(非常多好的东西都是开源的),我想假设能把源代码拿来对比源代码讲 FTP的传输过程,这样我们会对FTP的传输过程有一个本质的了解,也更easy从中找到某些不为人知的安全隐患。