web-dev-qa-db-ja.com

資格情報を持つGitリポジトリへの直接接続でSSHがHTTPSよりも安全である理由

まあ、資格情報は安全でない方法でファイルシステムのどこかに保存されていると考えてください(Ubuntuのデフォルトオプション)。 SSHを使用する方がより安全であり、

「HTTPSでは、資格情報は暗号化されていないファイルに保存されます」

ただし、これは私にはほとんど意味がありません。SSHを使用すると、(プライベート)キーを格納する単純なファイルもあるので、そのファイルを取得する人は誰でも簡単にgitリポジトリに接続できます。

また、どちらのファイルもアクセスが難しいとは言えません。どちらもローカルファイルシステムに保存されているだけで、ほとんどが暗号化されていません(Linuxの場合)。

では、SSHはHTTPSよりも安全なのはなぜですか?

27
paul23

SSHの方がHTTPSよりも安全であると言われたかどうかはわかりません特定の場合(ここにはすべての詳細がありません)。これは完全に正しいか、またはこれは一般的なアドバイスとして与えられました。 SSHとHTTPSの分析は、セキュリティシステム分析に精通していない人にとっては驚くほど複雑になる可能性があります。そのため、「SSHはHTTPSよりも安全である」などの幅広い声明を出す傾向があります。すべての場合に当てはまるわけではありません。とにかく、これは問題についてのいくつかの考えです。

資格情報をファイルに保存することについて言及しているので、この回答では、HTTPSとSSHの両方に公開鍵/秘密鍵認証を使用していると想定しています。どちらの場合も、パスワード認証のセキュリティは大幅に低下します。

ローカル資格情報ストア

まず、ディスクに保存されているユーザーの資格情報がパスフレーズで保護されていないという前提で作業しています。これは正しい場合とそうでない場合がありますが、パスフレーズで保護されている場合、セキュリティが大幅に向上します。

SSHの場合、キーエージェントはより使いやすく、SSHでより頻繁に使用されるため、資格はパスフレーズで保護される可能性が高くなります。 SSHを使用すると、ssh-agentまたは類似のものがSSHクライアントツールのほぼすべての標準セットに含まれているため、キーエージェントはほぼ常に利用できます。また、1つの特定の方法で1つのツールを使用するためのトレーニングは事実上どこでも機能するため、エージェントを使用するためのトレーニングも簡単になります。

HTTPSシステムの主要なエージェントははるかに多様であり、おそらくあまりインストールされていません。特定のシステムで使用できる場合でも、誰かが特定のシステムが使用可能であることを知り、それを使用する方法を知っている可能性は低くなります。

リモートエージェント

次に、SSHはリモートエージェント接続をサポートしているため、git fetchを実行しているシステムからキーマテリアルを削除できるため、多くの場合、セキュリティが大幅に向上します。これは、私の最も一般的なワークフローの例で最もよく説明されています。

私のラップトップは、自分だけがアクセスできるという意味で「パーソナル」マシンです。 (私だけの完全なディスク暗号化とユーザーアカウントがあります。)ログインすると、ローカルssh-agentを起動し、それにキー(パスフレーズで保護されている)をロードします。ssh-askpassの確認は、 ssh-add -c

開発を行っているホストにSSH接続し、他のユーザーと共有する場合は、ssh -Aを使用してエージェント転送を有効にします。次にgit fetchを実行すると、開発ホストからGitリモートのサーバーへのSSHセッションが開始されます。

そのSSHは、リモートから認証を要求されると、要求を受信し、ラップトップ上のエージェントに転送します。画面に、ローカルエージェントが認証要求を受け取ったというアラートが表示されます。これは、それを引き起こすアクションを開始した直後なので、認証を承認します。開発ホストのSSHプロセスは、認証に必要な情報(その特定のセッションでのみ有効)を受け取り、リモートサーバーで正常に認証され、git fetchが続行します。

これは、a)キーが開発サーバー上に存在することはなかったであり、攻撃者からのアクセスがはるかに少ない(私用のラップトップにアクセスする必要がある)ため、かなり安全です。b)使用するキーの要求について通知を受けると、キーを使用する予期しない試みを検出できます。 (開発サーバーにrootを持つすべてのユーザーは、ラップトップに認証要求を転送することもできます。)また、毎回パスフレーズを入力する必要がなかったので、パスフレーズで保護されたキーファイルを使用するほうがはるかに手間がかかりません。

22
cjs