web-dev-qa-db-ja.com

FTPS(FTP + S)はサーバー側のSFTPよりも優れたセキュリティを提供しますか?

私は昨日、サーバー間のファイル転送インターフェースのセットアップに関して、いくつかのサードパーティのシステム管理者と交換しました。

私たちのアプリケーションはSFTPを十分にサポートしているため、SFTPの使用を提案しました。私の対談者は、現在サポートしていないFTP + S(FTP + TLS)を絶対に望んでおり、開発する必要があります。

どちらも確実なトラフィック暗号化を提供しているため、SFTPよりもFTP + Sで実際にメリットがあるとは思わなかったと私は主張しました。 SFTPはすぐに利用でき、公開鍵認証によりさらに安全にすることができます。最後に重要なことですが、その単一接続モードにより、企業のファイアウォールの背後で使用するのがはるかに便利になります。

Sysadminは私を馬鹿とほとんど呼んでおり、SFTPは管理目的で設計されたプロトコルであるSSHの上で動作し、管理以外の目的でSSHポートを開くことは、攻撃に対する幅広い攻撃ベクトルを開くため、明らかに悪い考えです。ホストシステム。

この議論が有効かどうか疑問に思っています。 SSHセッションを制限してSFTPファイル転送のみを許可するさまざまな方法があるようです。 openSSHに付属するinternal-sftpサブシステムがあります。ここでは、chrootを簡単に設定してTCP転送を無効にすることができます。ユーザーがSFTP経由で接続できるようにするためのソリューションについて、 passwdファイルのエントリ... SFTPにはFTP + Sにはない明らかな問題はありませんが、何か不足している可能性がありますか?

それで、SSHに適用できる制限にもかかわらず、FTP + Sはファイル転送のより良いオプションであり、セキュリティの観点からですか?

91
Stéphane C.

理論的にはFTPSとSFTPが提供するセキュリティは似ています。実際には、次の利点と欠点があります。

  • FTPSクライアントアプリケーションでは、証明書を適切に検証できないことがよくあります。これは、中間者が事実上可能であることを意味します。代わりにSFTPを使用すると、ユーザーはホストキーに関する情報をスキップして何でも受け入れるため、結果は同じです。
  • しかし、より多くの知識を持つユーザーと管理者は、SSHキーを適切に利用し、認証にもこれらを使用することができます。これにより、パスワードを使用するよりもSFTPがはるかに使いやすくなります。また、パスワードがまったく禁止されている場合は、ブルートフォースパスワード攻撃が不可能になるため、これもより安全になります。
  • FTPはデータ接続に動的ポートを使用し、これらのポートに関する情報はインバンドで転送されます。これにより、ファイアウォール、NATなど)が関与する場合、すでにプレーンなFTP(TLSなし)は悪夢になります。FTPS(FTP + TLS)では、制御接続ヘルパーの暗号化により、さらに悪化しますファイアウォール上のアプリケーションは、どのポートを開く必要があるかをもはや見つけることができません。これは、FTPSを渡すために、セキュリティに悪い広範囲のポートを開く必要があることを意味します(*)。SFTPは、制御とデータのための単一の接続。
  • FTP(S)サーバーはしばしば匿名アクセスを提供し、SFTPサーバーは通常提供しません。いくつかのFTP(S)サーバーは、疑似ユーザー、つまり、システム上の実際のユーザーではない、同じデータベースまたは類似のものから取得されたユーザーも提供します。とにかく適切なユーザーがいる場合、これは問題ではありません。
  • SFTPはSSHプロトコルを使用するため、SFTPアクセスのみを許可し、SSH(ターミナル)アクセスやSSH転送を許可しないようにシステムを適切に構成する必要があります。 FTPを使用すると、FTPはファイル転送しか実行できないため、これはより簡単です。

(*)いくつかのコメントは、広い範囲のポートを開くことはセキュリティに悪いことを本当に信じていません。したがって、これについて詳しく説明します。

  • FTPは、データ転送に個別のTCP接続を使用します。これらの接続に使用されるポートは動的であり、これらに関する情報は制御接続内で交換されます。現在使用されているポートを認識していないファイアウォールFTPで使用される可能性のある広いポート範囲のみを許可できます。
  • FTPパッシブモードではクライアントがサーバーの動的ポートに接続するため(つまり、サーバー側のファイアウォールに関連します)、FTPアクティブモードの場合、サーバーはクライアントの動的ポートに接続するため(関連性があるため)、これらのポートは外部から内部へのアクセスを許可する必要があります。クライアント側ファイアウォール用)。
  • 外部から内部への無制限のアクセスのために広い範囲のポートを開くことは、誰かが内部を保護する制限的なファイアウォールと通常考えるものではありません。これは、強盗が家に入る可能性があるドアに大きな穴を開けることに似ています。
  • この問題を回避するために、ほとんどのファイアウォールはFTPの「ヘルパー」を使用して、FTP制御接続を調べ、次のデータ接続のために開く必要のあるポートを特定します。 1つの例は、iptablesのip_conntrack_ftpです。残念ながらFTPSでは、制御接続は(通常)暗号化されているため、これらのヘルパーは盲目的であり、必要なポートを動的に開くことができません。これは、FTPが機能しないか、幅広いポートを常に開く必要があることを意味します。
74
Steffen Ullrich

システム管理者は有効なポイントを上げます。(ただし、彼の対人スキルには作業が必要な場合があります)

SSHは複雑なプロトコルであり、opensshは多くの機能を実装しています。このすべての機能は攻撃ベクトルを提供し、これらのベクトルが悪用可能でないことを確認することは非常に困難です。

Opensshにバグがない(そうではない)場合でも、不要な機能を閉じるための適切な可能性をすべて理解し、これらのオプションがどのように相互作用するかを理解すること自体に大きな努力が必要です。そして、これらの相互作用はバージョンごとに変わる可能性があります。

例として、次のsshd_configスニペットを検討してください。これは、特定のユーザーをSFTPのみに制限することを目的としています(ユーザーをホームディレクトリにロックすることさえ考えていました)。

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp

そして確かに:

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

ちょっと待って...

ssh -N -L 9000:localhost:80 somehost

おっと、私はsomehostのポート80をホストのポート9000に転送しました。つまり、localhostから来たかのように、somehostのポート80に接続できます。おそらくポート80では大した問題ではありませんが、onlyがローカルホストでリッスンするサービス(管理サービスやデータベースなど)はどうでしょうか?

そして、それは単なるTCP転送です。少なくとも、SSHはX11転送とSSHエージェント転送を許可します。私はこれら2つの意味を知りません。

私たちの状況では、これらのリスクを上回る利点があるため、ssh/sftpをよく使用します。しかし、これは軽視すべきではない有効な懸念事項です。 sftpで十分なユースケースの場合、これは次のようになります。

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no
    ForceCommand internal-sftp

これがjustsftpアクセスを保証するのに十分であることを願っていますが、完全に確認することはできません。 (提案を歓迎します;)

54
marcelm

この比較記事 で非常によく説明されているように、どちらのプロトコルにも長所と短所があります。

これは、特にセキュリティに関する問題であるため、特定の条件で最適なプロトコルを選択する際に考慮すべきいくつかの考慮事項があります。

[〜#〜] ftps [〜#〜]および[〜#〜] ftpes [〜#〜] SSLまたはTLSを使用して、制御/データ接続を暗号化します。これらの安全なチャネルの主な利点は、X.509証明書を使用することです。これには、単純なキーペア(ホスト名、電子メールアドレス、組織名、ISSUER(CA)など)よりもはるかに多くの情報が含まれているため、検証がはるかに簡単です。だが:

  • SSL 1.0SSL 2.0:かなり以前に非推奨(安全ではありません)
  • SSL 3.0:POODLEのために非推奨になりました
  • TLS 1.0:PCIコンプライアンスに対応できなくなりました
  • TLS 1.1:TLS 1.2の一部の拡張機能がなく、クライアントサポートが制限されているため、使用する理由がありません
  • TLS 1.2:現在の標準、これまでのところ安全/安全と見なされています

また、上記はチャネル暗号化プロトコルのみを対象としているため、FTPプロトコル自体に関する安全上の考慮事項があります。 [〜#〜] site [〜#〜]コマンドは、たとえば、攻撃を実行するために何度も使用されてきました。プロトコル自体が開く必要があり、NATファイアウォールの複数のポート(管理するのが悪夢になる可能性があります)。さらに、ほとんどのファイアウォールは適切にNAT =クライアントが要求し、サーバーが許可しない限り、FTPデータ接続[〜#〜] ccc [〜#〜](コントロールチャネルをクリア)部分を無効暗号化せずに制御接続を実行することによるセキュリティの強化。

一方、[〜#〜] sftp [〜#〜]があり、これはのサブシステムです。 SSH。ここでの主な課題は、SSHキーが「単なるキー」であり、CAによって発行されず、発行者のステートメントまたはキーチェーンが含まれていないため、SSHサーバーキーはクライアントから明示的に信頼されている

誰かが、SFTPのみを許可するようにSSHサーバーを構成する(シェルなし、コマンドなし、転送トンネルなし、X11なし)のは難しいかもしれないと主張するかもしれません。それは実際に依存します:あなたがLinuxとOpenSSHを実行している場合、それは本当かもしれませんが、この種の構成を簡単にする多数のSSH/SFTPサーバーがあるので、私は必ずしもこれを潜在的な欠陥として挙げません。 -私が言ったように-Linux/OpenSSHが使用されない限り。

ただし、SFTPのいくつかの注目すべき副次的な利点は次のとおりです。

  • ECDSAキー交換:521ビットのECDS(X)キーは、セキュリティの点で15,360ビットのRSAキーと同等であり、9分の1署名計算のCPUサイクル
  • 固有 転送秘密:SSHプロトコルは、セッション中の実際のチャネル暗号化キーを再ネゴシエートでき、固有の転送秘密を提供します。これを実現するために追加の構成作業が必要なSSL/TLS対応サーバーとは対照的

したがって、最終的に選択はあなた次第ですが、sysadminが行った議論は露骨に無効であり、適切に構成された(説明したように)既存のSFTPサーバーが存在する場合、理由はありません(特にセキュリティなし)。関連する理由)FTPS(またはFTPES)に切り替える。

19
FjodrSo

多くの人が2つのプロトコルの違いについて有効なポイントを挙げています。しかし、私はあなたの目的のために、問題は本当に「SFTPは十分に安全ですか?」 「どちらがより安全か」というよりも。あなたが言ったように、あなたは単なるセキュリティ以外の懸念を持っています。

これは解決するのが難しい問題であることがわかります。 SSHは広く使用され、広く研究されています。既知のプロトコル設計上の欠陥はありません。ただし、セキュリティの脆弱性は多くの場合、プロトコルとは関係がなく、実装とはすべて関係があります。結局のところ、SMTP自体は「安全ではない」わけではなく、設計も比較的単純ですが、16年前、CommonのSendMailアプリケーションは、ソフトウェアセキュリティが不適切に実装された先駆けの子の1つであり、穴が開いていました。

重要なのは、プロトコルが適切に設計されていて単純である場合でも、実装は複雑なラッツネスト、機能の追加、およびセキュリティの悪夢になる可能性があることです。

したがって、これは、優れたプロトコルではなく、優れた実装を選択することに関するものだと思います。どちらのプロトコルも問題なく、どちらの実装も十分に実装できません。

私はFTPSに完全に精通しているわけではないので、FTPSの高い評価を受けている実装があるかどうかわかりません。ただし、SSHの場合、OpenSSHは一般に高品質と見なされており、セキュリティを根本から念頭に置いて設計されています(権限分離など)。

2
Steve Sether

あなたと同じように、違いを探すためにウェブを調べたとき、どちらもほぼ同じだと思いました。

しかし、実際には別の話です。以下は私の経験でした:

  1. 私のNASでは、FTPS機能を3か月間有効にしました。ファイアウォールの設定はまあまあでした。 FTPポートと、FTPS転送で使用されるいくつかのポートを開く必要がありました。これまでのところ、良いことではありません。

  2. 3か月後、SFTPプロトコルがより一般的でおそらく管理しやすくなるため、私はSFTPプロトコルもオンにする可能性があると考えています。その後、興味深いことが起こりました。 SFTPポートを開いてから10分後、NASはいくつかの打撲攻撃を受けました。NASは、パスワードの試行が10回失敗した後、攻撃IPを自動的にブロックし、電子メールで通知してください。攻撃者がすべて異なるIPを持つ数千台のコンピューターを制御しているとしたら、私のNASはそれらすべてを停止することはできません。また、当社のスタッフがが本当に簡単なパスワードを設定することに決めた場合、ブルースフォース攻撃を使用した人が最終的にシステムに侵入する可能性があります。

SFTPを無効にしたため、攻撃は停止し、ファイルサーバーに侵入しようとしている人がいないことを嬉しく思います。

0
KHChiu