昨天我与一些第三方sysadmin交流了有关服务器之间文件传输接口的设置。

我建议使用SFTP,因为我们的应用程序对此具有很好的支持。我的对话者绝对希望我们目前不支持并且需要开发的FTP + S(FTP + TLS)。

我认为与SFTP相比,FTP + S并没有任何真正的好处,因为两者均提供可靠的流量加密。 SFTP随时可用,并且可以通过公共密钥身份验证使其更加安全。最后但并非最不重要的一点是,它的单一连接模式使在公司防火墙后面使用起来更加方便。

sysadmin几乎称我为白痴,表示SFTP在SSH之上工作,SSH是为管理而设计的协议目的,并且为管理以外的其他用途打开SSH端口显然不是一个好主意,因为它为主机系统打开了广泛的攻击载体。

我想知道此参数是否有效。似乎有多种方法可以将SSH会话限制为仅允许SFTP文件传输。 openSSH附带有internal-sftp子系统,您可以在其中轻松设置chroot并禁用TCP转发。我什至听说过可能允许用户通过SFTP进行连接而无需在passwd文件中输入任何内容的解决方案...我看不到SFTP所没有的任何明显问题,而FTP + S所没有,但我可能会遗漏一些东西?

因此,尽管您可以对SSH施加限制,但FTP + S是否是更好的文件传输选项(从安全角度考虑)?

评论

谁在运行服务器?他们可以决定运行哪种协议。适应客户(客户)的要求是一个社会问题,强迫客户选择是相同的。如果它们是服务器并且正在运行FTPS,则您的客户端需要支持它。如果您正在运行服务器,那就是您的安全。

很抱歉,如果不清楚,但整个问题都在于论点是否有效。提供该场景是为了提供一些上下文信息,谁该有话要说是另一回事。

还有带有WebDAV扩展名的HTTPS。这具有FTPS的所有优点(但是很小),但是它缺点也在于它只能通过单个连接运行。

我要补充一点,您也可以使用传统的ftp服务器(例如proftpd)执行sftp,因此您可以进行熟悉的设置(chroot,虚拟目录等),而无需调整openssh服务器。参见proftpd.org/docs/contrib/mod_sftp.html

如果服务器已经出于管理目的而运行SSH,则可能首选使用SFTP,以将攻击面限制为仅一项服务,而不是两项。

#1 楼

从理论上讲,它们提供的安全性与FTPS和SFTP相似。
在实践中,您具有以下优点和缺点:


使用FTPS的客户端应用程序通常无法正确验证证书,实际上意味着中间的人是可能的。使用SFTP时,用户只需跳过有关主机密钥的信息并接受任何内容,因此结果是相同的。
但是具有更多知识的用户和管理员可以正确使用SSH密钥,并将其也用于身份验证,从而使SFTP与使用密码相比,使用起来容易得多。而且,如果完全禁止使用密码,那么这也将更加安全,因为不再可能发生暴力密码攻击。
FTP使用动态端口进行数据连接,并且有关这些端口的信息会通过带内传输。当涉及防火墙,NAT或类似设备时,这使本已普通的FTP(无TLS)成为噩梦。使用FTPS(FTP + TLS),情况变得更糟,因为由于控制连接的加密,防火墙上的辅助应用程序无法再找出需要打开哪些端口。这意味着要通过FTPS,您需要打开各种各样的端口,这对安全性(*)不利。 SFTP更好,因为它仅使用单个连接进行控制和数据。
FTP(S)服务器通常提供匿名访问,而SFTP服务器通常不提供匿名访问。几个FTP服务器还提供伪用户,即从同一数据库或类似数据库获取的用户,而不是系统上的真实用户。如果只有适当的用户,则没关系。
SFTP使用SSH协议,并且您必须正确配置系统以仅允许SFTP访问,而不允许SSH(终端)访问甚至是SSH转发。使用FTP会更容易,因为FTP仍然只能进行文件传输。

(*)一些评论并不真正相信打开大量端口对安全性有害。因此,让我更详细地解释一下:


FTP使用单独的TCP连接进行数据传输。用于这些连接的端口是动态的,有关这些端口的信息在控制连接内部交换。不知道当前正在使用哪个端口的防火墙只能允许较大的端口范围,有时可能会使用FTP。
这些端口需要允许从外部到内部的访问,因为在FTP被动模式下,客户端连接到服务器上有一些动态端口(即与服务器端防火墙有关),而对于FTP活动模式,服务器连接到客户端上有一些动态端口(与客户端防火墙有关)。
有许多开放的端口不受限制从外部到内部的访问并不是人们通常认为用来保护内部的限制性防火墙。这更类似于门上有一个大洞,窃贼可能会进入房屋。
要变通解决此问题,大多数防火墙都为FTP使用“辅助程序”,该辅助程序会查看FTP控制连接,以找出下一个数据连接需要打开哪些端口。一个示例是iptables的ip_conntrack_ftp。不幸的是,使用FTPS时,控制连接(通常)是加密的,因此这些助手是盲目的,无法动态打开所需的端口。这意味着FTP无法正常工作,或者需要始终打开大量端口。


评论


关于最后一个要点:就安全性/漏洞而言,SITE命令(尤其是SITE EXEC)的历史非常糟糕。 “只能执行文件传输”仅适用于理智且配置正确的FTP服务器。

–垫子
16年4月28日在10:06

FTP是一个愚蠢的协议,需要终止。

–AndréBorie
16年4月28日在12:38

“打开各种各样的端口(这是不安全的!)”没有给出任何理由说明为什么这将是不安全的,我认为这有点奇怪。我通常不同意(如果您的安全性取决于关闭的端口,则可能是错误的),但我想我会在编辑之前提出意见并询问...(总体来说,好的答案-赞成)。

–吕克
16-4-28在12:52



@Luc:我认为很明显为什么在防火墙中打开大量端口是个坏主意。但是我改写了这一部分,希望它更加清楚。当然,您的安全性不应依赖于关闭的端口,但此类限制是深度安全性的一部分。即使内部系统(大部分)被认为是安全的,从外部到内部的各种端口上的不受限制的访问也是一个坏主意。

– Steffen Ullrich
16-4-28在13:22



@SteffenUllrich您的编辑实际上并没有说明如何通过访问端口来降低系统的安全性。让FTP服务器侦听多个端口的安全性并不比仅侦听一个端口安全。我知道您的建议很受欢迎,但据我所知,它的流行只是养鱼。

–AndréParamés
16-4-28在15:14



#2 楼

系统管理员提出了一个有效的观点。
(但是他的人际交往能力可能需要工作)

SSH是一个复杂的协议,openssh实现了很多功能。
所有这些功能都提供了攻击媒介,很难确保没有任何媒介可以利用。

即使openssh没有错误(不是),也要知道所有正确的关闭方法不需要的功能,并了解这些选项之间如何相互作用,这本身就需要付出很大的努力。
这些相互作用可能会因版本而异。旨在将某些用户限制为仅SFTP(我们甚至考虑过将其锁定到其主目录):

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp


并且足够肯定:

% ssh somehost
This service allows sftp connections only.
Connection to somehost closed.


但是等等...
at意味着我们可以连接到sshd_config上的端口80,就像我们来自本地主机一样。
端口80可能没什么大不了,但是只监听本地主机的服务(例如管理服务或数据库)呢?

那只是TCP转发。
至少,SSH还允许X11转发和SSH代理转发,我什至不知道这两者的含义。

我们确实经常使用ssh / sftp,因为就我们的情况而言,优点胜过了这些风险。
但是,有一个令人担忧的现实问题,不应太轻描淡写。
我们最终将其用于仅sftp就足够的使用案例:

ssh -N -L 9000:localhost:80 somehost


我们希望这足以确保仅sftp访问,但我们不能完全确定。欢迎提出建议;)

评论


尽管如此,为了能够造成任何损害,攻击者仍然需要获得过去的认证,这可能非常困难。然后,我了解到您需要确保所有门都已关闭,并且如果您对用户的信任有限,也许这会使SFTP更具风险

–StéphaneC.
16-4-28在11:13



@StéphaneC。真正。但是您提到他是第三方系统管理员。那么,为什么他会信任您并为您提供潜在的超出您需要的访问权限?这不仅是您的恶意意图;如果您的机器受到威胁怎么办? ;)

– marcelm
16年4月28日在11:24

正确,但是如上所述,此协议的多路套接字体系结构可能涉及复杂性和潜在的固件问题。我想这是一个权衡。这是否超过了SFTP的潜在(或几乎是理论上的)安全风险?我很难告诉...

–StéphaneC.
16-04-28在12:00



确实是一个权衡。老实说,如果我不得不让我不太熟悉的第三方与我们的服务器进行文件访问,那么我可能不会选择sftp。但是对我们来说,这主要是内部的,并且有时是与受信任的第三方合作的,因此对我们来说,ssh / sftp win的优势。

– marcelm
16年4月28日在12:17

请记住,尽管OpenSSH很复杂并且具有很大的攻击面,但它也广泛使用了特权分离,例如seccomp,它是特权降低的子级,只能通过管道,rlimits等进行通信。我不相信任何ftps客户端都具有类似的功能。因此,很难说OpenSSH在被更广泛地锁定时具有更多的攻击面。

–森林
16年4月29日在7:57

#3 楼

两种协议都有优点和缺点,正如在本比较文章中很好地解释的那样。

这是说,由于问题专门针对安全性,因此在选择哪种协议时应考虑一些注意事项在某些特定条件下最好。

FTPS和FTPES使用SSL或TLS来加密控制/数据连接。这些安全通道的主要优点是它们使用X.509证书,其中包含的信息比简单密钥对(主机名,电子邮件地址,组织名称,ISSUER(CA)等)要多得多,因此它们是更容易验证。但是:



SSL 1.0,SSL 2.0:很久以前不推荐使用(不安全)

SSL 3.0:由于POODLE而最近不推荐使用

TLS 1.0:不再符合PCI合规性要求

TLS 1.1:缺少TLS 1.2的某些扩展,并且客户端支持有限,没有理由使用它
< TLS 1.2:目前的标准,到目前为止,被认为是安全/安全的。以上内容仅涵盖了通道加密协议,因此对于FTP协议本身存在安全方面的考虑。例如,已经反复使用SITE命令进行攻击,并且协议本身的固有设计要求打开防火墙上的多个端口并对其进行NAT(这可能成为管理噩梦)。此外,除非客户端请求并且服务器允许CCC(清除控制通道),否则大多数防火墙都无法正确地进行FTP数据连接的NAT,这会通过运行未加密的控制连接破坏安全性。

另一方面,我们有SFTP,它是SSH的子系统。这里的主要挑战是SSH密钥是“公正的密钥”,它们不是由CA颁发的,也不包含颁发者声明或密钥链,因此SSH服务器密钥必须由客户端明确表示信任。 >
可能有人认为将SSH服务器配置为仅允许SFTP(没有外壳,没有命令,没有转发隧道,没有X11)可能很困难。这实际上取决于:如果您正在运行Linux和OpenSSH,那也许是正确的,但是那里有大量的SSH / SFTP服务器使这种配置变得轻而易举,所以我不必将其列为潜在的缺陷,除非-就像我说的那样-使用Linux / OpenSSH。

SFTP的几个显着优势包括:



ECDSA密钥交换:521位ECDS(X)密钥在安全性方面等效于15360位RSA密钥,并且需要9倍以下的CPU周期来进行签名计算

固有的前向保密性:SSH协议可以与会话中的实际通道加密密钥进行重新协商,并提供固有的前向保密性,这与启用了SSL / TLS的服务器相反,后者需要额外的配置工作才能完成此操作

,因此最终选择实际上是取决于你们,但是sysadmin所做的论点公然无效,并且是否存在配置正确的现有SFTP服务器(例如xplained),则没有理由(尤其是与安全性无关的理由)切换到FTPS(或FTPES)。

评论


您是否可以推荐一个SFTP服务器,该服务器可以轻松设置仅文件传输模式?我可能会考虑在其他项目的其他端口上运行类似的操作。

–StéphaneC.
16年4月28日在15:11

查看Syncplify.me服务器(公开:这是我工作的公司)。我认为我无法在评论中添加链接,但是我敢肯定您可以轻松地在Google中对其进行搜索。 ;)

– FjodrSo
16年4月28日在15:13

@StéphaneC。 ProFTPD的mod_sftp模块还实现了SFTP(和SCP),但是没有外壳访问。

–卡斯塔利亚
16年4月28日在16:14

@FjodrSo如果正在使用支持该密码的密码套件,那么ChangeCipherSpec不会在TLS中重新协商会话密钥吗?

– reirab
16-4-28在20:46



SSL / TLS自1999年以来就一直支持DHE的FS,并自2006年以来就支持ECDH(E)和ECDSA -尽管SSL / TLS领域中的众多实施者并没有像一个主要的SSH实施者OpenSSH那样积极地推动ECC;例如,直到2010年,OpenSSL才使SSL / TLS中的ECC变得不那么容易。@reirab SSL / TLS中的重新协商完成了完整的握手序列,从ClientHello(如果几乎一直使用5746,则包含Renegotiation Indication)或ServerHelloRequest; CCS仅是倒数第二个步骤。 SSH可以在不重新认证的情况下进行密钥更新,尽管我不确定有人愿意这样做。

–dave_thompson_085
16年4月29日在4:16

#4 楼

许多人提出了关于两种协议之间差异的有效观点。但是我认为出于您的目的,问题实际上是“ SFTP是否足够安全?”而不是“哪一个更安全”?如您所说,除了安全性之外,您还有其他问题。

这原来是一个很难解决的问题。 SSH已被广泛使用和广泛研究。没有已知的协议设计缺陷。但是,安全漏洞通常与协议无关,而与实现无关。毕竟,SMTP本身并不是“不安全”的,并且设计相对简单,但是16年前,Commendon SendMail应用程序是实施软件安全性较差的典型代表之一,并且在其中存在很多漏洞。

关键是,即使协议经过精心设计和简单,实现也可能是复杂性,附加功能和安全噩梦的巢穴。

所以我认为这更多是关于选择一个好的实现而不是一个好的协议。两种协议都不错,而且两种实现都可能执行不佳。

我对FTPS并不完全熟悉,所以我不知道它是否有任何受人尊敬的实现。但是,对于SSH,OpenSSH通常被认为是高质量的,并且从一开始就考虑到安全性(特权分离等)。

#5 楼

像您一样,我认为两者与我在网上寻找差异时几乎都一样。

但是,在现实生活中,这是另一回事了。以下是我的经验:


对于我的NAS,我开启了FTPS功能3个月了。防火墙设置还可以。我只需要打开FTP端口和FTPS传输使用的其他端口。到目前为止,还算不错,没什么大不了的。
三个月后,我想,也许我也启用了SFTP协议,因为它更常见并且更易于管理。然后发生了一些有趣的事情。打开SFTP端口10分钟后,我的NAS遭受了一些蛮力攻击。尝试输入密码失败10次后,NAS会自动阻止攻击IP,并通过电子邮件通知我。想象一下,如果攻击者控制了数千台具有不同IP的计算机,那么我的NAS将无法将其全部阻止。另外,如果我们公司的员工决定设置非常简单的密码,那么使用暴力攻击的人最终可能会进入我们的系统。

现在我禁用了SFTP,攻击就停止了我很高兴没有人尝试进入我们的文件服务器。

评论


任何可公开访问的服务都可能遭到攻击,我正在运行一些Web服务器,并且auth.log充满了“ root:admin123”样式的登录尝试,通常在租用它们后的几分钟内即可完成。至于用强力猜测一个很强的密码,祝他们好运。我认为您不能为此负责,也可以使用备用端口并仅允许公共密钥身份验证。

–StéphaneC.
17 Mar 25'6:26



所有这些轶事表明,攻击者不断地对您的端口22进行锤击,以期用不安全的SSH密码捕获您。这在开放网络上并不少见,并不意味着SSH本身是不安全的。即使不会严重影响安全性,仅从端口22进行更改也将停止所有这些日志条目。

–胸腺
17 Sep 26'7:25



该协议很普遍,已经存在了很长时间,有更多针对它的蛮力尝试,那又如何呢?这并不改变我的观点,即SFTP是最安全的文件传输方法之一。

– pilavdzice
18年1月2日在20:56

#6 楼

不,SSH和SSL通常使用相同的密码强度。例如:RSA和AES,但SSH可以使用DSA。但是ssh使用端口22,而FTP使用FTP和FTP数据使用端口21和22。在我看来,更好的可配置性是,您必须打开2个端口,这不仅考虑防火墙是不切实际的,而且还存在潜在的安全风险,因为您必须打开2个端口。

评论


FTP [S]使用单独的数据连接,但不使用端口22。SSL / TLS可以使用DSA,但在公共网络上很少见,因为公共CA(Symantec GoDaddy等)大多不颁发DSA证书。在Intranet或封闭社区上,它工作正常(这是在WinXP上获得PFS的唯一方法)。 OTOH最近的OpenSSH(自2015年以来为7.0)默认情况下默认禁用ssh-dss,这显然是因为SSH限于使用SHA1的DSA;参见crypto.stackexchange.com/questions/15051/…

–dave_thompson_085
17年11月6日14:44



#7 楼

无论哪种方式,您的答案都是直截了当的。服务器端工具由提供文件的人控制,并且如果知道所有安全功能,从理论上讲是安全的。

用户端方法与用户相同。在这些日子里,我们不怀疑两者之间的关系。每个人都必须确保自己有足够的能力保护自己。因此,用户转向了防火墙选项。

您为用户选择的任何选项都可以通过这种方式轻易推翻。因此,我们不必担心用户(收件人)。这种说法现在在这个问题上已经过时了。这意味着服务器端。您要控制发布的信息。它发布后,有多少关注不再是审慎的。超出那一点根本不是您的责任。结果只会影响到您。如果尚无相关数据,则没有任何后果。

一个真正可控的解决方案是使用完全由您自己设计的具有加密功能的FTP源。不要依赖任何第三方。但这也已过时,因为很难从头到尾构建自己的库。

基于您提供的术语不足,您需要一个简单的ssh ftp。为此,您可以建议防火墙规则和iptables配置(如果在Linux中)。无论走哪种方式,似乎都被所见即所得所困扰。

评论


即使构建一个完整的支持库很容易,我也不建议您运行自己的协议或FTP实现,而不是运行完善的解决方案。他们的维护者在主流SSH / FTPS服务器的安全性上投入了大量的时间和经验,这是您难以匹敌的。特别是如果这不是您的主要业务价值。

–StéphaneC.
16-4-29在11:38