一、serv-u安全隐患及利用。
二、serv-u安装及安全设置详解。
三、serv-u相关的模式与防火墙设置。
四、关于serv-u的Banner及登录消息的设置。
Serv-U是一款十分经典的FTP服务器软件,一直被大部分管理员和虚拟主机所使用,它简单的安装和配置以及强大的管理功能也一直被管理员们称颂。但是随着使用者越来越多,也有越来越多的主机被通过Serv-U软件所入侵。
本文旨在提出一些切实可行的方法,彻底杜绝由Serv-u带来的安全隐患。
1、Serv-u的安装:
关于Serv-u的安装网上许多文章中提到要安装在一个复杂的路径,个人认为这个不是十分必要,完全可以按照你喜欢的例如:D:\soft\Serv-u目录里。但是不推荐安装在系统盘目录里,也不推荐安装在c:\Program files目录里,因为这个目录的权限的原因(详细权限设置以后再发文专门讨论)。推荐的方式是无需安装,直接使用绿色版的或直接复制在其他机器上安装好的Serv-U的目录。serv-u的用户配置文件有两种方式,一种是存放在注册表,一种是存放在ServUDaemon.ini文件,推荐使用存放在.ini文件里面的方式,这种方式便于ser-u软件的升级,也便于重装系统后的ftp用户的恢复,在权限设置上也相对方便。另外版本的选择一定要选择6.3版本以上的,现在最新的是 6.4.0.6 ,推荐使用,这里我们假设serv-u软件放在的的D:\soft\Serv-U目录里。
2、权限设置:
给serv-u单独的用户权限运行。在计算机管理中新增帐户ftp,设置用户不能更改密码,密码用不过期,并设置一个复杂的密码,更改ftp用户隶属于Guests组(默认是USERS组),当然也可以设置为不属于任何组。
启动serv-u(这时是使用默认的system权限运行的),选择本地服务器,自动开始,将serv-u设置为系统服务,这样服务器在每次重启时serv-u就会自动启动,这里我们主要利用其可以在服务中配置给serv-u单独用户。
设置D:\soft\Serv-U目录的权限为只保留administrators,ftp两个用户的权限,权限都是完全控制即可,并替换到所有子目录。
在计算机管理中找到服务,找到Serv-U FTP 服务器,右键属性,在登录选项卡中将登录身份从本地系统帐户改为此帐户,帐户选择ftp,并输入设置好的密码。确定后会提示将在服务重启后生效,接着点右键,重新启动,如果启动成功,你的serv-u就在低权限下运行了。
上传目录权限的设置:因为serv-u是用ftp这个帐户运行的,所以上传的目录给予ftp用户的完全访问权限就可以了,比如我们可以设置D、E、F盘的权限为administrators和ftp完全控制的权限,System权限也不用加了,如果serv-u用默认权限运行,则必须加入system权限才能对该目录进行ftp操作。
3、安全隐患及利用
Serv-u在本机有一个默认监听端口,默认监听127.0.0.1:43958,在本机才能连接这个管理端口,默认管理账号是LocalAdministrator,默认密码是"#l@$ak#.lk;0@P",这个密码是固定的。所以几乎所有的针对serv-u攻击的木马便是利用此来添加serv-u用户的,比如增加一个指向C盘的超级管理员用户,够可怕吧。
这里我们用一个常用的ASP木马中举例说明:(serv-u提权超强版)
提权后可以直接执行命令添加管理员帐户,并且加了个隐藏的管理员帐户(当然这个帐户隐藏方式比较低级)如果成功了,用这个帐户远程登录上去创建一个克隆的管理员帐户,再把这个删掉)。管理员如果连serv-u安全都做不很好的,对于隐藏度很高的克隆的帐号也不一定能发现,所以Serv-U的安全不容忽视。
比如俺一个朋友就喜欢用SQLDebugger 、SUPPORT_XXX等这样的帐户克隆出管理员帐户,查看属性又看不出来,很容易逃脱管理员的眼睛。
如何彻底解决这个安全隐患,有个最简单的方法就是给serv-u设置一个本地管理密码,也就是所有增加删除修改serv-u的用户及更改设置的操作,都需要经过本地密码验证。
可能有的管理员认为服务器密码就他自己知道,别人上不去,更何况增加serv-u帐户了,所以就不设置密码,认为这完全是多此一举,这就大错特错了。
这里再介绍另一种解决问题的方法,结合上面的设置本地管理密码可以让我们的Serv-u更安全。就是修改serv-u的默认管理帐号和密码,这里我们用到了UltraEdit-32这个软件。
用UltraEdit-32打开servUAdmin.exe 查找LocalAdministrator,和#l@$ak#.lk;0@P,将这两个字符串修改为等长度的字符串保存即可,注意一定是等长度的。
当然这还不够,还要打开ServUDaemon.exe,操作如法炮制,但修改后的字符串要务必与ServuAdmin.exe中修改的相同,否则Serv-u是无法进行用户管理的。
经过设置Serv-U本地管理密码和修改Serv-u文件这两步大刀阔斧的改革后,再试试刚才的木马,虽然也能提示执行命令成功,但实际服务器却没有任何变化,奈何不了了。
简单总结一下以上所说的安全要点:
1、尽量使用最新版的Serv-u,如果英文还可以,推荐直接用英文版的,如果要用中文的,一定要在其他机器进行测试,确认汉化包无流氓插件后再在正式服务器上使用。
2、设置Serv-u运行于普通用户权限,这样即使通过木马执行net localgroup administrators XXX /Add也不可能执行成功了。
3、设置Serv-u的目录权限,只给administrators和运行serv-u用户的权限,其他的都不要给,尤其是everyone权限(在服务器上使用everyone权限要十分慎重,网上有很多文章图懒法不管三七二十一加个everyone就算了的。您可不要图懒也加个everyone就算了,我所配置的服务器中没有一处是使用everyone权限的。)和guests权限,users用户权限也不要给。目的就是彻底防止通过Webshell访问到Serv-u目录,如果这一步设置不严,即使设了Serv-u密码,通过Webshell下载了你的Serv-u去破解或者用UltraEdit-32打开分析,也一样可能造成攻击。
4、磁盘目录权限,也就是你用ftp操作的目录权限例如WEB目录等,除了必要的IIS帐户权限外,只加administrators和用来运行serv-u的帐户的权限即可(可设为完全控制)。
5、务必要设置一个本地管理密码,防止通过Webshell连接默认用户名密码的方式进行攻击。
6、推荐用UltraEdit-32更改serv-u默认的帐户密码,其实也花不了很多时间。
7、端口的设置,完全可以根据个人喜好设置,个人认为与安全并无多大关系,因为即使更改了默认的21端口,如果有人想攻击,一样可以扫描出来。
只要严格注重了以上几点,那么可以说你可以安全放心的使用你的Serv-u了。当然,服务器的安全是一个整体,任何地方的疏忽都有可能造成整个服务器的安全隐患。以上所说仅仅是与Serv-U相关的安全设置,绝不代表整个服务器就安全了。这一点务必注意。下面说说防火墙的设置。
三、Serv-u相关的防火墙设置:
关于防火墙的处理最常见的一个难题是主动FTP与被动FTP的区别以及如何配置防火墙并完美地支持它们。很多管理员可能都发现,在开了防火墙的服务器上利用FTP传输总有这样那样的小问题,有时传输数据“不够流畅”。幸运地是,本文能够帮助你彻底搞清在防火墙环境中如何支持FTP这个问题上的烦恼。
FTP服务是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是命令端口(21)和数据端口(20)。但当我们发现根据(FTP工作)方式的不同数据端口并不总是20时,新的问题就出来了。
主动FTP:
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>;1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+ 1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP
任何端口到FTP服务器的21端口 (客户端初始化的连接 S)
FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口 S->C)
FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口 S->C)
大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S)
主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。
被动FTP
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在常用的FTP传输软件中也均有相关设置,例如FlashFXP的在选项-》参数设置-》代理里面就有相关选项。
在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
从任何端口到服务器的21端口 (客户端初始化的连接 S)
服务器的21端口到任何大于1023的端口 (服务器响应到客户端的控制端口的连接 S->C)
从任何端口到服务器的大于1023端口 (入;客户端初始化数据连接到服务器指定的任意端口 S)
服务器的大于1023端口到远程的大于1023的端口(出;服务器发送ACK响应和数据到客户端的数据端口 S->C)
下面简要总结一下主动与被动FTP优缺点:
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。
在安装Serv-U并初次运行的时候,防火墙会提示提示是否允许Serv-U连接网络,这里我们选择允许。这样ServUDaemon.exe就在防火墙的信任的程序当中了。
再在防火墙中添加端口,注意如果你的FTP端口是默认的21,那么需要添加两个端口,21和20。如果你的FTP端口是1000,那么还要添一个999,以此类推。值得一提的是,添加完端口后,在防火墙的高级设置里就不用设置了,以个人经验这个地方如果再开启了,反而会有些问题。之前曾因为这个地方的设置百思不得其解而郁闷过,后来终于搞懂只设一个地方即可。如图所示:
接下来设置Serv-U的PASV:如图所示,这个地方的设置关系到常遇到的FTP传输是否“流畅”的问题,尤其是在网速慢的情况。这里的端口范围要指定的一定要是服务器上空闲的一段端口范围,比如有的软件用了3306,这里就不要用3000-3500了,这个地方所说的也就是前面提到的为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这也是国内很多虚拟主机商的做法。
再来看一下传输的情况:从FlashFXP的传输日志中可以看到没传输一个文件端口就会从指定的PASV端口加一个,加到最大后再重新返回端口范围的最小端口,如此循环实现FTP文件传送。显然如果这里不能顺利的开启端口,就会造成FTP传输的停顿,也就是常说的不流畅,需要重新连接一下FTP。
总之,Serv-U涉及的防火墙方面的设置并不是很多,基本上就是防火墙模式中最常见的基于端口的和基于程序的两种方式,其他防火墙也可以按此设置即可。
四、最后补充一点关于Serv-u的Banner和登录消息设置。
大家可能都碰到的类似以下的连接FTP服务器时的提示信息,其实这个地方即使不知道对方FTP帐户密码,只要知道端口(也可能通过扫描出的端口尝试出来)用FTP传输软件连接一下就会出来了,甚至直接在DOS窗口用命令提示符open一下你的FTP服务器,也会出来类似的提示信息,这样岂不就老老实实的告诉别人你用的Serv-U做的FTP服务器并且所用的版本了么?
[右] 已连接到 60.215.XX.XX
[右] 220 Serv-U FTP Server v6.4 for WinSock ready...
[右] USER XPB
[右] 331 User name okay, need password.
[右] PASS (隐藏)
[右] 230 User logged in, proceed.
[右] SYST
[右] 215 UNIX Type: L8
[右] FEAT
[右] 211-Extension supported
[右] CLNT
其实在Serv-u中也有设置,在域的设置中有消息一项,可以自定义服务器响应消息,这里可以根据你喜欢的把这些消息改掉,例如改为Welcome to Microsoft FTP Service... 等等其他FTP服务软件的Banner,可以起到一定的迷惑作用。
其次我们说一下大家可能也常碰到的下面这种提示是如何做出来的。
程序代码
[右] 已连接到 202.194.XXX.XXX
[右] 220-欢迎登录XX大学FTP服务器...
[右] 220-你的IP地址是:211.64.XXX.XXX
[右] 220-目前服务器所在的时间是 08:56:45
[右] 220-已经有 1585 个用户在最近24小时访问过本FTP
[右] 220-本FTP服务器已经运行了 21 天,18 小时 和 6 分。
[右] 220-
[右] 220-服务器的运行情况:
[右] 220-
[右] 220-所有登录用户数量: 26 total
[右] 220-当前登录用户数量: 18
[右] 220-已经下载字节数: 372000 Kb
[右] 220-已经上传字节数: 118940 Kb
[右] 220-已经下载文件数: 92
[右] 220-已经上传文件数: 1360
[右] 220-服务器平均带宽: 810 Kb/sec
[右] 220 服务器当前带宽: 945 Kb/sec
[右] USER xpb
其实这个设置这个地方也很简单,只需要设置一个用户登录时的消息文件就可以了,设置的地方就在Serv-u的域的设置里面,就在上边设置服务器响应消息的下面,其中登录消息文件格式如下:
程序代码
您已经成功登录FTP服务器
你的IP地址是:%IP
目前服务器所在的时间是 %time
已经有 %u24h 个用户在最近24小时访问过本FTP
本FTP服务器已经运行了 %ServerDays 天,%ServerHours 小时 和 %ServerMins 分。
服务器的运行情况:
所有登录用户数量: %loggedInAll total
当前登录用户数量: %Unow
已经下载字节数: %ServerKbDown Kb
已经上传字节数: %ServerKbUp Kb
已经下载文件数: %ServerFilesDown
已经上传文件数: %ServerFilesUp
服务器平均带宽: %ServerAvg Kb/sec
服务器当前带宽: %ServerKBps Kb/sec
将此文件保存问例如logininfo.txt的文本文件,放于Serv-u目录(也可以放到其他目录,放到这里是因为不用再单独设置该文件的权限了),然后把该文件设置为登录时的消息文件,就可以了