ftp未授权漏洞怎么处理
去年冬天,授权我帮一个做跨境电商的漏洞朋友看服务器。他用的处理是某云厂商的轻量级实例,跑着一个ERP系统。授权我随手用nmap扫了一下21端口,漏洞返回结果里赫然写着“Anonymous FTP login allowed”。处理他当时就愣住了——从来没人告诉过他,授权FTP服务默认配置会允许匿名登录。漏洞
这不是处理个例。很多运维人员装完vsftpd或者ProFTPD,授权改个配置文件就上线,漏洞压根没注意`anonymous_enable=YES`这行。处理更麻烦的授权是,有些老旧的漏洞网络设备、打印机、处理甚至监控摄像头,出厂就带着匿名FTP,而且固件更新遥遥无期。
FTP未授权漏洞的本质很简单:服务端允许任何人以anonymous或ftp用户登录,无需密码。登录后能干的事取决于权限配置。最轻的情况是只能读取几个公共文件,最重的情况——我见过直接能上传webshell到web目录的,因为FTP根目录和网站根目录重合了。
先确认,再动手
别急着关服务。先搞清楚几件事:这个FTP是谁在用?用来干什么?有没有替代方案?
我一般会先看连接日志。Linux下`/var/log/vsftpd.log`或者`/var/log/messages`里能找到登录记录。如果全是内部IP在固定时间传输备份文件,那说明是业务依赖,不能一刀切。如果有大量陌生IP尝试anonymous登录,那基本可以确定已经被扫描器盯上了。
用`ftp localhost`试一下匿名登录,或者用`curl ftp://localhost/`看返回什么。能列出目录就说明漏洞存在。
处理方式分三种情况
第一种:完全不需要FTP。直接停服务、卸载软件包。`systemctl stop vsftpd && systemctl disable vsftpd`,然后`apt remove vsftpd`或`yum remove vsftpd`。防火墙规则里把21端口和被动模式端口段一并封掉。这是最干净的做法。
第二种:需要FTP但只给特定人用。关掉匿名访问,改配置文件。vsftpd里设`anonymous_enable=NO`,然后为每个用户创建系统账号或虚拟账号。虚拟账号更好,因为不依赖系统用户体系,权限隔离更彻底。配合`chroot_local_user=YES`把用户锁在自家目录里。
第三种:老设备改不了配置。比如某台2008年的HP打印机,固件里FTP匿名访问关不掉,厂商早就不更新了。这种只能在网络层做文章:用ACL限制只有特定管理IP能访问21端口,或者干脆把设备划到独立VLAN里,和业务网络隔离。
别忘了被动模式端口
很多人只封了21端口,忘了FTP被动模式会随机开高端口。`pasv_min_port`和`pasv_max_port`要设成固定范围,然后在防火墙里把这段也封掉。否则匿名用户虽然连不上控制通道,但数据通道可能还开着。
我自己的习惯是,处理完漏洞后一定再扫一遍。`nmap -p21 --script ftp-anon
如果已经被入侵了
检查FTP根目录下有没有奇怪的文件,尤其是`.php`、`.jsp`、`.cgi`结尾的。看`/etc/passwd`里有没有新增用户,看crontab里有没有异常任务。FTP匿名写入配合本地文件包含漏洞,是拿shell的经典路径。
说到底,FTP这个协议本身就不该出现在公网上。它的认证是明文的,数据通道也是明文的。能换SFTP就换SFTP,能换对象存储就换对象存储。实在要留着,至少把匿名关掉、把端口锁死、把日志盯紧。这三件事做完,风险能降九成。