FTP的安全隐患及更安全的替代方案
关键要点:
你是否使用FTP部署或传输文件?鉴于该协议的古老性和在众多托管公司中的广泛流行,可以说你可能正在使用。
但是,你是否意识到这可能会为你和你的企业带来安全问题?让我们深入探讨一下这种情况。
FileZilla、CyberDuck、Transmit或Captain FTP等程序可以是安全的。它们可能实现一些措施,例如隐藏密码,防止他人查看。但是,如果你使用FTP传输数据,这些措施实际上会被削弱。
我直截了当地说,我写这篇文章的原因是8月份在SitePoint上进行的一次有趣的讨论。讨论主要集中在FileZilla上,对它有多不安全(或不是)做了一系列断言。
争论的一个关键方面集中在是否应该将密码与FileZilla一起存储。其中一条评论链接到一篇描述性文章,该文章表明,尽管在使用软件时会隐藏你的凭据,但如果你保存了凭据,它们很容易被检索。
如果你没有读过这篇文章,FileZilla会将连接详细信息存储在一个简单的XML文件中,如下所示:
<code class="language-xml"><?xml version="1.0" encoding="UTF-8" standalone="yes"?><filezilla3></filezilla3> <servers></servers> <server></server> <host>localhost</host> <port>21</port> <protocol>0</protocol> <type>0</type> <user>anonymous</user> <pass>user</pass> <logontype>1</logontype> <timezoneoffset>0</timezoneoffset> <pasvmode>MODE_DEFAULT</pasvmode> <maximummultipleconnections>0</maximummultipleconnections> <encodingtype>Auto</encodingtype> <bypassproxy>0</bypassproxy> <name>test site</name> <comments> </comments> <localdir> </localdir> <remotedir> </remotedir> <syncbrowsing>0</syncbrowsing>test site > > ></code>
你可以看到它存储了关于连接的大量信息,这样你就不需要记住它了。但是请注意,它也以明文形式存储你的密码?
当然,当你使用该程序时,它会隐藏密码,如上面的屏幕截图所示,这样就无法从你的肩膀上读取。
但是,如果你可以访问计算机,那么从计算机中提取密码就没有意义了。公平地说,在最新版本的FileZilla中,默认情况下不允许存储密码。
有人建议,至少配置文件应该加密,或者以在授予访问权限之前请求主密码的方式设置,就像1Password和KeePassX一样。
Louis Lazaris随后链接到Stack Exchange上的一个讨论,试图反驳这一观点。以下是这篇文章的核心内容:
你看,加密凭据需要一个加密密钥,该密钥需要存储在某个地方。如果你的用户帐户上运行了恶意软件,那么他们和你(或任何其他在同一级别运行的应用程序)拥有的东西一样多。这意味着他们也将能够访问加密密钥或加密加密密钥的密钥等等。
我相信上述断言并没有完全理解1Password和KeePassX等程序的设计考虑。专门设计为密码和其他安全信息的安全保管库的应用程序,可能不像这个答案暗示的那样容易破解。
例如,1Password最近的一篇博客文章列出了对抗黑客的关键机制。
这些包括128位和256位对称密钥、SHA512和PBKDF2加密——以及一系列其他用于保护被访问的数据文件的特性,同时保留了它们易用性和简单性。
因此,推断使用安全的加密保管库实际上并不更安全是不正确的,特别是考虑到所有这些可用的技术。
但是,关于是否应该保存凭据的论点是无关紧要的,因为使用FTP本身忽略了一个关键点——你的凭据和数据是以明文形式发送的。不相信我?请阅读Deccanhosts博客上的《为什么FTP不安全》。
如果你不知道,通过使用简单的分组嗅探器,如Wireshark,你可以检索到使用的用户名和密码,以及发送的文件中存储的任何其他凭据,以及算法、数据库结构以及存储在其中的任何其他内容。
鉴于长期以来,将这些信息存储在.ini和配置文件中是一种常见做法,我建议相当大量的易于下载的软件,如WordPress、Joomla等,将以这种方式开发。
FTP的设计初衷并非为了安全性;它被设计为一项公共服务。这种设计中固有地包含了一系列进一步的假设,这些假设也没有考虑到安全性。Zend的高级软件工程师Enrico Zimuel甚至说得更远:永远不要使用FTP——永远!
是的,安全更改后来出现了,但它们是附加的——而不是内置的。没有防止暴力攻击的保护,虽然SSH隧道是可能的,但它很困难,因为你需要加密命令和数据通道。因此,你的选择有限。当你试图实现它们时,难度系数并不总是微不足道的。
你是一个网站管理员吗?你是否为你的FTP用户启用了chroot监狱?如果你不熟悉chroot这个术语,它是一种限制用户移动和访问权限的方法。从他们登录的目录开始,他们可以进入任何子目录,但不能移动到该目录之外。
在我让你相信一切都糟透了之前——并非如此。今天周围的一些FTP程序——特别是前面提到的那些程序——也支持一些更安全的FTP衍生产品和替代方案。让我们来看看它们。
FTPS是安全FTP,就像HTTPS是安全HTTP一样,它运行在SSL(安全套接字层)和TLS(传输层安全)之上。用户凭据和数据不再以明文形式发送;而是先加密,然后再传输。
如果服务器允许,客户端软件还可以灵活地仅加密通信的一部分,而不是全部。根据目前的讨论,这似乎违反直觉。
但是,如果被传输的文件已经被加密,或者没有传输任何敏感性质的信息,那么可能不需要承担加密所需的开销。
但是,切换到FTPS确实需要付出代价(和价格)。使用FTPS需要生成自签名SSL证书,或从受信任的证书颁发机构购买证书。因此,更好的安全性是可用的,但是需要付出更多的努力和成本。
但在你退缩之前,问问自己,你的信息对你企业来说价值多少?这可能会说服你坚持下去。
现在让我们看看SFTP。SFTP或SSH文件传输协议的工作方式与FTPS不同。SFTP被设计为SSH 2.0的扩展,它创建了一个普通的FTP连接,但在已经加密的连接上执行它。FTP数据流本身并不比普通的FTP更安全,但是它运行的连接更安全。
如果你要放弃FTP,为什么要采取半途而废的措施?为什么要使用FTP?如果你安装了SFTP,你就安装了SSH工具;这些工具为你提供了各种各样的功能。
从SSH本身开始,它为远程系统提供了完整的用户访问权限,让他们可以做比标准FTP更多的事情。连接是安全的,数据可以很容易地从一个系统复制到另一个系统。
如果你是一个命令行高手,你甚至可以使用SSH上的Rsync等工具。
在一个简单的用例中,它可以用来将所有文件从本地目录递归地复制到远程计算机上的目录。第一次运行时,所有文件都会被复制。
第二次及以后的运行,它会检查文件差异,只传输差异、较新的文件,并可以选择删除远程计算机上不再存在的本地文件和目录。
问题是,授予这种访问权限本身就是一个安全问题。但是效果是可以减轻的。OpenSSH允许许多配置选择,例如不允许root访问、限制可以远程登录的用户以及将用户chroot到特定目录。
也许用户根本不需要在远程计算机上,或者在他们在那里时不需要很多权限。如果是这样,并且很可能是这样,你可以从许多旨在适应这些情况的shell中进行选择。
最好的两个是scponly和rssh。Scponly只允许用户将文件复制到远程计算机。
用户无法登录、移动、查看或更改文件。好的是它仍然可以使用rsync(和其他工具)。rssh更进一步,允许访问SCP、SFTP、rdist、rsync和CVS。
要实现它,系统管理员只需使用他们选择的工具更改用户的shell,然后编辑/etc/rssh.conf,列出允许的协议。这是一个示例配置:
<code class="language-xml"><?xml version="1.0" encoding="UTF-8" standalone="yes"?><filezilla3></filezilla3> <servers></servers> <server></server> <host>localhost</host> <port>21</port> <protocol>0</protocol> <type>0</type> <user>anonymous</user> <pass>user</pass> <logontype>1</logontype> <timezoneoffset>0</timezoneoffset> <pasvmode>MODE_DEFAULT</pasvmode> <maximummultipleconnections>0</maximummultipleconnections> <encodingtype>Auto</encodingtype> <bypassproxy>0</bypassproxy> <name>test site</name> <comments> </comments> <localdir> </localdir> <remotedir> </remotedir> <syncbrowsing>0</syncbrowsing>test site > > ></code>
此配置仅允许用户使用SCP和SFTP。
接下来,让我们考虑SSH密钥。这个过程需要一些解释,但我将尝试使其简短扼要,大量改写Stack Exchange上的这个答案:
首先,服务器的公钥用于构建安全的SSH通道,方法是协商一个对称密钥,该密钥将用于保护剩余的会话,启用通道机密性、完整性保护和服务器身份验证。通道功能安全后,将进行用户身份验证。
接下来,服务器创建一个随机值,用用户的公钥加密它并将其发送给他们。如果用户是他们应该成为的用户,他们可以解密挑战并将其发送回服务器,然后服务器确认用户的身份。这是经典的挑战-响应模型。
这项技术的关键好处是私钥永远不会离开客户端,也不会发送任何用户名或密码。如果有人拦截SSL流量,并且能够解密它(使用被破坏的服务器私钥,或者如果你在连接到服务器时接受错误的公钥)——你的私人详细信息将永远不会落入攻击者手中。
与SCP或SFTP一起使用时,这进一步减少了使用它们的所需工作量,同时提高了安全性。SSH密钥可能需要密码来解锁私钥,这似乎会使它们更难使用。
但是,有一些工具可以将此链接到你的用户会话,当你登录到你的计算机时。正确设置后,密码会自动为你提供,因此你可以充分利用该系统。
也许你以前没有听说过这个术语,但它已经存在一段时间了。我们之前在SitePoint上写过关于它的文章,就在上周。由Martin Fowler创造的持续交付定义为:
一种软件开发纪律,你以这样一种方式构建软件,即软件可以随时发布到生产环境。
实现它的方法有很多,但是Codeship和Beanstalk等服务在很大程度上消除了痛苦。
以下是如何工作的粗略比喻。你设置你的软件项目,包括你的测试代码和部署脚本,并将所有这些存储在版本控制下。我假设你正在使用在线服务,例如GitHub或Bitbucket。
在你的代码分支中进行提交或发布后,每次向这些服务之一推送时,该服务都会运行你的应用程序的测试。如果测试通过,则会部署你的应用程序,无论是测试还是生产。
假设一切顺利,它随后会自动为你处理部署。之后你会收到通知,告知部署成功或失败。
如果成功,你可以继续下一个特性或错误修复。如果出现问题,你可以检查它以查找问题的原因。请查看下面的简短视频,该视频展示了使用Codeship实际部署测试存储库的过程。
你必须做什么?将提交推送到Github存储库——就是这样!你不需要记住运行脚本、脚本在哪里、要传递给它们的选项和开关(尤其是在周五晚上很晚的时候,你宁愿在任何地方而不是工作)。
我理解这相当简单,并没有涵盖所有选项和细微之处,但你明白了我的意思。
最后,让我们从使用FTP的基本安全问题转向日常使用的有效性。例如,假设你正在开发一个网站,例如一个电子商务商店,并且你的部署过程使用FTP,特别是FileZilla。
这里有一些与人为错误相关的固有问题:
所有这些都是有效的担忧,但是当使用持续交付工具时,所有这些都可以很容易地减轻。如果时间晚了,如果压力很大,如果相关人员即将离开公司或渴望休假,那么通过FTP手动传输文件就是在自找麻烦。
好吧,手动传输文件,总而言之,就是在自找麻烦。人为错误太难避免了。
我不想显得好像我是在针对FileZilla。它是一个非常好的应用程序,我已经使用了多年。并且已经使用了试图使其更安全的技术。
我的关键点在于FTP本身,而不是仅仅是FileZilla。
这就是我对FTP安全辩论的看法。我的建议——不要使用它;此外,在管理部署时,请记住安全性。毕竟,这是你的数据。
但是你的想法是什么?你还在使用FTP吗?你是否考虑过迁移?在评论中分享你的经验以及你尝试过的解决方案,这样我们都可以努力寻找一个实用且易于使用的解决方案。
FTP程序虽然对文件传输很有用,但也存在一些安全风险。主要问题是FTP不加密数据,这意味着所有传输的信息,包括敏感数据(如用户名和密码),都是以明文形式发送的。这使得网络罪犯很容易拦截和滥用这些信息。此外,FTP容易受到暴力攻击、数据包捕获和欺骗攻击等攻击。这些风险可能导致数据泄露、未经授权的访问和其他严重的安全问题。
有几种方法可以减轻与FTP程序相关的风险。最有效的方法之一是使用FTP的安全版本,例如SFTP或FTPS。这些协议在传输过程中加密数据,使网络罪犯难以拦截。此外,使用强壮、唯一的密码并定期更新它们可以帮助防止暴力攻击。保持FTP程序更新也很重要,因为更新通常包含安全补丁。
FTP或文件传输协议是一种标准的网络协议,用于通过互联网将文件从一台主机传输到另一台主机。但是,它不提供任何加密。SFTP或安全文件传输协议是FTP的安全版本,它使用SSH(安全外壳)在传输过程中加密数据。FTPS或FTP Secure是FTP的另一个安全版本,它使用SSL(安全套接字层)或TLS(传输层安全)进行加密。
是的,FTP今天仍然被广泛使用,尤其是在企业环境中用于传输大型文件或批量文件。但是,由于其安全漏洞,许多组织正在转向更安全的替代方案,如SFTP或FTPS。
要确定你的FTP程序是否安全,你应该检查它是否在文件传输过程中使用加密。FTP的安全版本,如SFTP和FTPS,在传输过程中加密数据。你通常可以在程序的文档或设置中找到此信息。此外,安全的FTP程序应该提供诸如强密码强制、双因素身份验证和定期更新等功能。
是的,将VPN(虚拟专用网络)与FTP程序一起使用可以增强安全性。VPN加密通过互联网发送的所有数据,包括你的FTP流量。这可以帮助保护你的数据不被网络罪犯拦截。
FTP的一些安全替代方案包括SFTP、FTPS和SCP(安全复制协议)。这些协议都使用加密来保护传输过程中的数据。此外,基于云的文件传输服务通常提供强大的安全措施,包括加密、双因素身份验证和访问控制。
暴力攻击是一种网络攻击,攻击者试图通过猜测密码来访问系统。由于FTP以明文形式发送密码,因此它特别容易受到暴力攻击。如果攻击者成功猜测到密码,他们可以未经授权访问系统,并可能窃取或操纵数据。
欺骗攻击(攻击者假装是合法用户或设备)可能是对FTP程序的严重威胁。为了防止这些攻击,你可以使用使用加密的FTP的安全版本,如SFTP或FTPS。此外,使用强壮、唯一的密码并定期更新它们可以帮助防止欺骗攻击。
数据包捕获,也称为数据包嗅探,是网络罪犯用来拦截和分析数据包在网络上传输时的方法。由于FTP不加密数据,因此它特别容易受到数据包捕获的影响。攻击者可以使用此方法窃取敏感信息,如用户名和密码。为了防止数据包捕获,你应该使用使用加密的FTP的安全版本,如SFTP或FTPS。
以上是FTP程序安全吗?的详细内容。更多信息请关注PHP中文网其他相关文章!