題:
FTPS(FTP + S)是否比服務器端的SFTP提供更好的安全性?
Stéphane C.
2016-04-28 12:47:13 UTC
view on stackexchange narkive permalink

昨天我與一些第三方系統管理員就服務器之間的文件傳輸接口的設置進行了交流。

我建議使用SFTP,因為我們的應用程序對此具有很好的支持。我的對話者絕對希望我們目前不支持並且需要開發的FTP + S(FTP + TLS)。

我辯稱,與SFTP相比,FTP + S並沒有任何真正的好處,因為兩者提供可靠的流量加密。 SFTP隨時可用,並且可以通過公共密鑰身份驗證使其更加安全。最後但並非最不重要的一點是,它的單一連接模式使在公司防火牆之後使用起來更加方便。 ,並且打開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服務器。參見http://www.proftpd.org/docs/contrib/mod_sftp.html
如果服務器已經出於管理目的而運行SSH,則可能首選使用SFTP,以將攻擊面限制為僅一項服務,而不是兩項。
我的印像是TLS還支持通過客戶端證書進行公鑰身份驗證。
值得強調的是,這裡存在一個常見錯誤,這似乎是您的第三方系統管理員正在犯的錯誤(實際上,大多數回答者似乎也沒有提到這一點,儘管有幾個人確實提到了這一點,例如@Steffen):** SFTP!= FTP-over-SSH **。實際上,SFTP是與SSH系列相關的子協議,但它與SSH截然不同且獨立,並且*與FTP完全無關。聽起來他可能正在考慮使用SecureFTP(SSH-FTP上的FTP)之類的東西,但他提到了很多缺點。在此處查看更多信息:http://security.stackexchange.com/q/858/33
我接受了史蒂芬·烏爾里希(Steffen Ulrich)的回答,因為它提供的信息最豐富,但是Marcelm和FjodrSo的帖子也是不錯的補充讀物。
七 答案:
Steffen Ullrich
2016-04-28 13:03:20 UTC
view on stackexchange narkive permalink

從理論上講,它們提供的安全性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服務器。
歷史上是@Mat:。但是我已經很長時間沒有聽說過此類問題了,因此我認為今天的服務器默認情況下不提供SITE或僅限於少數情況。而使用SFTP,您通常需要自己將SSH服務器限制為僅允許SFTP。
非常感謝您提供詳細的答案,這不是“是/否”的答案,而是傾向於確認通過適當的努力,人們可以通過SFTP實現非常好的安全性,在某些情況下,甚至可以與FTP + S媲美甚至更好。在彼此意圖上有合理信任的兩個合作夥伴之間肯定足夠。
@StéphaneC。:FTPS絕對是穿越防火牆和NAT(即典型的SoHo路由器)的噩夢。因此,使用SFTP可以為需要支持其用戶的用戶節省很多麻煩。
FTP是一種[愚蠢的協議](http://mywiki.wooledge.org/FtpMustDie),並且需要終止。
*“打開各種各樣的端口(這是不安全的!)” * *沒有給出*為什麼*不安全的任何理由,我認為這有點奇怪。我通常不同意(如果您的安全性取決於關閉的端口,則可能出了點問題),但我想我會在編輯之前發表評論並提出疑問……(總體而言,好的答案-贊成)。
@Luc:我認為很明顯為什麼在防火牆中打開各種端口是個壞主意。但是我改寫了這一部分,希望它更加清楚。當然,您的安全性不應“取決於”關閉的端口,但此類限制是深度安全性的一部分。即使內部的系統被認為(大部分)是安全的,從外部到內部的各種端口上的不受限制的訪問也是一個壞主意。
@SteffenUllrich您的編輯實際上並未解釋如何通過可訪問的端口來降低系統的安全性。讓FTP服務器偵聽多個端口的安全性不比僅偵聽一個端口安全。我知道您的建議很受歡迎,但據我所知,它的流行只是養魚。
@AndréParamés:即使FTP服務器或client(!)當前未在監聽這些端口,也需要保持端口打開,因為您永遠不知道主機是否會使用這些端口。可能實際上是某些其他應用程序(例如某些特洛伊木馬或RAT工具)正在此端口上偵聽,因此可以從外部進行訪問。簡而言之-如果想使用防火牆來保護系統,則FTP可能有時會使用其中一些端口就一直保持開放狀態,這是一個壞主意。
@SteffenUllrich我知道您的特洛伊木馬程序,但是如果有人可以在您的系統上運行代碼,那麼它可能會在沒有開放端口的情況下造成足夠的破壞。我仍然認為這不是一個大問題,但這可能是一個單獨的答案。(對此已經有一些問題[1](http://security.stackexchange.com/q/78802)[2](http://security.stackexchange.com/q/9461)[3](http://security.stackexchange.com/q/96568)[4](http://security.stackexchange.com/q/13714)[5](http://security.stackexchange.com/q/10729)[6](http://security.stackexchange.com/q/9461),但沒有一個答案是詳盡無遺的。)
Sftp具有能夠使用ssh主控制連接的優點,這是一個優點,因為即使僅使用10個sftp連接來解決高延遲,您也只能建立1個TCP連接,並且僅發送一次pass / key 1次。通過內部流水線處理您的衛星連接
marcelm
2016-04-28 15:28:52 UTC
view on stackexchange narkive permalink

系統管理員提出了一個有效的觀點。(但是他的人際交往能力可能需要工作)

SSH是一個複雜的協議,openssh實現了很多功能。所有這些功能提供攻擊向量,並且很難確定這些向量都不能被利用。

即使openssh沒有錯誤(不是),也知道所有正確的關閉方法不需要的功能,並且了解這些選項可能如何相互作用本身就需要付出巨大的努力。而且這些相互作用可能會因版本而異。

例如,請考慮以下 sshd_config 片段,旨在將某些用戶限制為僅SFTP(甚至將其鎖定到其主目錄):

 匹配組sftponly ChrootDirectory%h ForceCommand internal-sftp  

並且足夠確定:

 %ssh somehost此服務僅允許sftp連接。 sed。 

但是請稍候...

  ssh -N -L 9000:localhost:80 somehost  

糟糕,我現在已經將 somehost 上的端口80轉發到了主機上的9000端口,這意味著我們可以連接到 somehost 上的端口80,就像我們來自本地主機一樣。端口80沒什麼大不了的,但是僅 僅在localhost上偵聽的服務(例如管理服務或數據庫)呢?

那僅僅是TCP轉發。至少, SSH還允許X11轉發和SSH代理轉發,我什至都不知道這兩者的含義。

我們確實大量使用ssh / sftp,因為就我們的情況而言,優勢大於這些風險。但這是一個有效的關注點,我們不應該掉以輕心。對於僅sftp就足夠的用例,我們最終得出了以下結論:

 匹配組sftponly ChrootDirectory%h X11Forwarding否AllowTcpForwarding否AllowAgentForwarding否ForceCommand internal-sftp  

我們希望這足以確保 just sftp訪問,但是我們不能完全確定。(建議;;

儘管如此,為了能夠造成任何損害,攻擊者仍然需要獲得過去的認證,這可能非常困難。然後,我了解到您需要確保所有門都關閉,並且如果您對用戶的信任有限,這可能會使SFTP更具風險
@StéphaneC。真正。但是您提到他是第三方系統管理員。那麼,為什麼他會信任您並為您提供潛在的超出您需要的訪問權限?這不僅是您的惡意意圖;如果您的機器受到威脅怎麼辦?;)
正確,但是如上所述,此協議的多路套接字體系結構可能涉及復雜性和潛在的固件問題。我想這是一個權衡。這是否超過了SFTP的潛在(或幾乎是理論上的)安全風險?我很難告訴...
確實是一個權衡。老實說,如果我不得不讓我不熟悉的第三方與我們的服務器進行文件訪問,那麼我可能不會使用sftp。但是對我們來說,這主要是內部的,並且有時是受信任的第三方提供的,因此對我們來說,ssh / sftp win的優勢。
我還記得一件事,但無法驗證。如果您為ssh系列設置了公共密鑰身份驗證,那麼即使在客戶端由於使用了auth密鑰而忘記了主機密鑰的情況下,嘗試在那之後進行一次MITM也不起作用。
請記住,儘管OpenSSH很複雜並且具有很大的攻擊面,但它也廣泛使用了特權分離,例如seccomp,它是特權降低的子級,只能通過管道,rlimits等進行通信。我不相信任何ftps客戶端都具有類似的功能。因此,很難說OpenSSH在被更廣泛地鎖定時具有更多的攻擊面。
@marcelm關於“說實話,如果我不得不讓我不十分熟悉文件的第三方訪問我們的其中一台服務器,我可能不會使用sftp。”,您將如何在第三方之間進行文件傳輸?我在搜索了常見的“ FTPS-sftp優點/缺點”後來到此頁面,並想為什麼不問其他問題:)
FjodrSo
2016-04-28 17:02:21 UTC
view on stackexchange narkive permalink

這兩種協議都有優點和缺點,正如此比較文章很好地解釋。

這是說,由於該問題專門針對安全性,因此有一些注意事項選擇在某些特定條件下最佳的協議時應考慮到這一點。

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 FTP數據連接的NAT,這會通過運行未加密的控制連接來破壞部分安全性。 >

另一方面,我們有 SFTP ,它是SSH的子系統。此處的主要挑戰是SSH密鑰是“公正密鑰”,它們不是由CA頒發的,也沒有包含頒發者聲明或密鑰鏈,因此SSH服務器密鑰必須由客戶端明確信任

有人可能會認為將SSH服務器配置為僅允許SFTP(無外殼,無命令,無轉發隧道,無X11)可能很困難。這實際上取決於:如果您正在運行Linux和OpenSSH,那也許是正確的,但是那裡有大量的SSH / SFTP服務器使這種配置變得輕而易舉,所以我不必將其列為潛在的缺陷,除非-就像我說的那樣-使用Linux / OpenSSH。

SFTP的兩個顯著優勢包括:

  • ECDSA密鑰交換:在安全性方面,一個521位ECDS(X)密鑰等效於一個15360位RSA密鑰,並且簽名計算所需的CPU週期減少了9倍
  • 固有的前饋保密 :與任何需要額外配置工作才能完成此操作的啟用SSL / TLS的服務器相反,SSH協議可以在會話中重新協商實際的通道加密密鑰,並提供固有的前向保密性。 li>

因此,最終的選擇實際上取決於您,但是sysadmin所做的論點公然無效,並且是否存在現有的SFTP服務器。配置正確(如所述),則沒有理由(特別是沒有與安全相關的原因)切換到FTPS(或FTPES)。

您是否可以推荐一個SFTP服務器,該服務器可以輕鬆設置僅文件傳輸模式?我可能會考慮在其他項目的其他端口上運行類似的操作。
查看Syncplify.me服務器(公開:這是我工作的公司)。我認為我無法在評論中添加鏈接,但是我敢肯定您可以輕鬆地在Google中對其進行搜索。;)
@StéphaneC。ProFTPD的mod_sftp模塊還實現了SFTP(和SCP),但是沒有外殼訪問。
@FjodrSo如果正在使用支持該密碼的密碼套件,那麼ChangeCipherSpec不會在TLS中重新協商會話密鑰嗎?
-1
我不會稱ECDSA為優勢,因為它與DSA存在相同的問題。現在,如果您另一方面說EdDSA ...
Steve Sether
2016-05-20 22:23:47 UTC
view on stackexchange narkive permalink

許多人提出了關於兩種協議之間差異的有效觀點。但是我認為出於您的目的,問題實際上是“ SFTP是否足夠安全?”而不是“哪一個更安全”?如您所說,除了安全性之外,您還有其他問題。

事實證明這是一個很難解決的問題。 SSH已被廣泛使用和廣泛研究。沒有已知的協議設計缺陷。但是,安全漏洞通常與協議無關,而與實現無關。畢竟,SMTP本身並不是“不安全的”,並且設計相對簡單,但是16年前,Commendon SendMail應用程序是實現軟件安全性不佳的典型代表之一,並且在其中存在一個又一個漏洞。

關鍵是,即使協議設計合理且簡單,實現也可能是複雜性,附加功能和安全噩夢的巢穴。

所以我認為更多的是選擇一個好的實現而不是一個好的協議。兩種協議都很好,而且兩種實現方式都可能執行不佳。

我對FTPS並不完全熟悉,所以我不知道它是否有任何受人尊敬的實現。但是,對於SSH而言,OpenSSH通常被認為是高質量的,並且從一開始就考慮到安全性(特權分離等)。

KHChiu
2017-03-25 06:47:33 UTC
view on stackexchange narkive permalink

就像您一樣,我認為兩者與我在網上尋找差異時幾乎一樣。

但是,在現實生活中,這是另一回事了。以下是我的經驗:

  1. 對於我的NAS,我開啟了3個月的FTPS功能。防火牆設置還可以。我只需要打開FTP端口和FTPS傳輸使用的其他端口。到目前為止,還算不錯,沒什麼大不了的。

  2. 三個月後,我想,嗯,我也可能同時啟用了SFTP協議,因為它更常見並且更容易實現管理。然後發生了一些有趣的事情。打開SFTP端口10分鐘後,我的NAS遭受了一些蠻力攻擊。嘗試輸入密碼失敗10次後,NAS會自動阻止攻擊IP,並通過電子郵件通知我。想像一下,如果攻擊者控制了數千台具有不同IP的計算機,那麼我的NAS將無法將其全部阻止。另外,如果我們公司的員工決定設置非常簡單的密碼,那麼使用暴力攻擊的人最終可能會進入我們的系統。

  3. ol>

    現在,我禁用了SFTP,攻擊停止了,我很高興沒有人嘗試進入我們的文件服務器。

任何可公開訪問的服務都可能面臨攻擊,我正在運行一些Web服務器,並且auth.log充滿了“ root:admin123”樣式的登錄嘗試,通常在租用它們後的幾分鐘內即可完成。至於用強力猜測一個很強的密碼,祝他們好運。我認為您不能為此負責,也可以使用備用端口並僅允許公共密鑰身份驗證。
所有這些軼事表明,攻擊者不斷錘擊您的端口22,希望使用不安全的SSH密碼來捕獲您。這在開放網絡上並不少見,並不意味著SSH本身是不安全的。即使不會嚴重影響安全性,僅從端口22進行更改也將停止所有這些日誌條目。
該協議很普遍,已經存在了很長時間,有更多針對它的暴力嘗試,那又如何呢?這並不改變我的觀點,即SFTP是最安全的文件傳輸方法之一。
Richard R. Matthews
2017-03-25 23:38:54 UTC
view on stackexchange narkive permalink

否,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。參見https://crypto.stackexchange.com/questions/15051/why-does-openssh-use-only-sha1-for-signing-and-verifying-of-digital-signatures
Frank
2016-04-29 08:23:48 UTC
view on stackexchange narkive permalink

無論用哪種方式說話,答案都是直截了當的。服務器端工具由提供文件的人控制,並且如果知道所有安全功能,從理論上講是安全的。

用戶端方法與用戶相同。在這些日子裡,我們不懷疑兩者之間的關係。每個人都必須確保自己有足夠的能力保護自己。因此,用戶轉向了防火牆選項。

您為用戶選擇的任何選項都可以通過這種方式輕易地推翻。因此,我們不必擔心用戶(收件人)。在這個問題上,這種說法現在已經過時了。

您應該擔心的是您自己的證券。這意味著服務器端。您要控制發布的信息。它發布後,有多少關注不再是審慎的。超出那一點根本不是您的責任。結果只會影響到您。如果尚無相關數據,則沒有任何後果。

一個真正可控的解決方案是使用完全由您自己設計的具有加密功能的FTP源。不要依賴任何第三方。但這也是過時的,因為很難從頭到尾構建自己的庫。

基於您提供的術語不足,您需要一個簡單的ssh ftp。為此,您可以建議防火牆規則和iptables配置(如果在Linux中)。無論走哪種方式,您似乎都對所見即所得感到困惑。

即使構建一個完整的支持庫很容易,我也不建議您運行自己的協議或FTP實現,而不是運行完善的解決方案。他們的維護者在主流SSH / FTPS服務器的安全性上投入了大量的時間和經驗,這是您難以匹敵的。特別是如果這不是您的主要業務價值。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...