鍵ベースのSSH認証(特にOpenSSHの場合)がパスワードを使用した認証よりも安全かどうか、同僚と長い間話し合いました。同僚は常にパスワードを使用してサーバーに接続しますが、毎回パスワードを入力しなくてもシステムにログインすることを好みます。
彼らはパスワードなしで接続することは安全ではないことを恐れています。何を伝えればいいですか?私にとって、パスワードはブルートフォースされたり、キーロガーによってキャプチャされたりする可能性があるため、パスワードは不適切です。
ssh-copy-id
公開鍵をサーバーにコピーするツール。次に、ssh servername
。実際、システムを起動するたびに、秘密鍵onceのパスワードを入力するだけで済みます。ワークステーションが3日間稼働している場合、パスワードを再入力する必要はありません。本当?キーの方が良いことは知っていますが、それを説明する方法がわかりません。
キーベースのログインは、第三者システムからのアクセスを取得する総当たり攻撃の観点から見ると、パスワードベースのログインよりもはるかに安全であると考えられています。キーを解読する可能性は事実上ゼロですが、不正なパスワードはすべて一般的です。
侵害されたクライアントシステム(ワークステーション)の観点から見ると、違いはありません。攻撃者が秘密鍵を取得したり、セッションをハイジャックしたりすると、何らかのキーロガーがインストールされ、知覚される可能性があるためです。役に立たないパスワードの利点。
それはあなたのコンピュータと同じくらい安全です。キーは暗号化されずにRAMに置かれます。マシンに物理的にアクセスできる攻撃者、またはリモートのrootアクセスを持つ攻撃者がそれを入手する可能性があります。
同僚がパスワードセーフプログラムを使用していて、パスワードを入力しなくてもデータベースを使用できる状態で画面に表示されているのと同じ言葉で考えてください。ワークステーションを離れるときにロックし、悪意のあるリモートアクティビティからワークステーションを安全に保つ場合、それは適度に安全ですが、凍結されたRAM攻撃は理論的にはキーを取得できます。
しかし、あなたが指摘したように、それらのポジションの誰かがキーロガーを簡単にインストールすることもできます。ワークステーションのセキュリティについて注意している限り、パスワードよりも安全性が低いとは言いません。ただし、キーベースのログインの本当のメリットは、たとえばサーバーに対するブルートフォースパスワード攻撃からの保護にあります(キーをブルートフォースにすることはほぼ不可能であるため)。
実際、あなたの同僚は正しいです。これについて考えてみてください。ワークステーションがクラックされ、数日間稼働しており、sshパスフレーズを使用しないため、ハッカーがネットワーク全体を盗みます。
とはいえ、共有パスワードは決して良いものではなく、システムの大きな弱点でもあります。私はあなたがルートアクセスについて話していると仮定します。
私が指摘している点は、どちらにも欠点があり、セキュリティをどこに配置する必要があるかです。
私が管理するすべてのサーバーに対して、パスフレーズのSSHキーを使用します。それは私に両方の長所を与えます。私だけが知っているパスワードで、他のユーザーの共有パスワードは使用しません。
(そしてはい、パスフレーズなしのsshキーがネットワーク全体の侵害に使用されているところを見ました。
あなたはあなたの最も弱いリンクと同じくらい安全です。リモートサーバーがパスワードとキーベースの認証の両方を許可している場合、1つだけを許可する場合と比較して安全性が低下します。
パスワード認証(PA)を介したキーベースのシステムの追加の脆弱性は次のとおりです。
攻撃者は、任意のシステムの暗号化されていないディスクに物理的にアクセスする(たとえば、シングルユーザーモードで起動する)ことにより、パスフレーズで保護された秘密鍵のコピーを取得し、GPUベースのオフラインのブルートフォース攻撃を実行してキーを取得します。パスフレーズが適切に弱い場合(たとえば、4つのダイスウェアワード)、すべてのシステムへのアクセス。
パスフレーズまたは秘密鍵を後で使用するためにメモリに保持するssh-agentのようなものを使用し、攻撃者が何らかの方法でシステムからそれを取得できる(たとえば、メモリにパスワードがあったときに別のrootユーザーがログインした)。
あなたの鍵はあなたが思っていたよりもはるかに安全ではありませんでした。たとえば、OpenSSHの主要な弱点。唯一のランダム性は プロセスIDに由来するため、65536個のキーしか生成されませんでした。 これらの種類の問題は、最後にユーザーは、キーの作成に使用される乱数ジェネレーターに大きな欠陥がないことを伝えることは不可能です。
鍵ベースの認証を使用することによる追加のセキュリティ:
known_hosts
ファイルを使用して管理者に警告するMITM攻撃を警告しています。実際には、どちらも同等に安全です。 RAMからssh秘密鍵を盗むことができる人なら誰でも、キーロガーをインストールして、パスワード/パスフレーズ/秘密鍵を取得できます。
個人的には、パスフレーズの方が便利なので(RAMに保存し、5分後にロックする1人のユーザーのマシンでは)、このソリューションが好きです。ただし、パスフレーズで保護された秘密鍵は、自分が唯一のユーザーであるローカルマシンにのみ配置します。
鍵ベースの認証にセキュリティ上の利点が少しあると私が信じる理由の1つは、両方のエンドユーザーを見たことがあり、場合によってはパスワードダイアログボックスではなくユーザー名フィールドにパスワードを入力したことがあります( sshクライアントによって異なります)。または、Enterキーを押しすぎてsshクライアントが終了し、私のパスワードが端末の履歴に記録されました。
パスワードを入力するたびに注意しないと、パスワードが平文で複数のログファイルに、場合によってはシェルの履歴に、またはなんらかのトロイの木馬に追加される可能性があります。パスワードなしのキー、またはセッションの開始時にSSHエージェントでロードするキーの場合は、パスワードを再入力しないでください。資格情報を間違った場所に入力して、意図しない誰かまたは何かへのパスワード。
ある意味では6です。パスワードベースのログインの最初の直接的なセキュリティリスクは、権限のないユーザーが(なんらかの方法で)サーバーにパスワードを取得することです。同様に、キーベースのログインには、権限のないユーザーがコンピュータにアクセスするというセキュリティ上のリスクがあります。サーバーで複雑なパスワードを使用する場合、パスワードユーザーがそれを覚えておくためにどこかに書き留めなければならないリスクがあります。キーユーザーを使用すると、コンピューターのロックが解除された状態で机から離れてしまう危険があります。
その多くは、リスクとユーザビリティの比率に起因します。もちろん、キーにパスワードを要求したり、キーごとに特定のIPアドレスのみを許可したり、その他の数の厳格なセキュリティ対策を許可したりすることもできます。
しかし、あなたの質問に答えるために:OpenSSHのバニラ構成について話している場合、パスワードベースのログインとキーベースのログインの両方に、独自の異なるセキュリティ上の弱点があります。
私のシステムでは、rootのsshを介したパスワードログインを常にオフにしています。この方法では、攻撃者がパスワードを総当たり攻撃する可能性はありません。
それでも、クライアントシステムのセキュリティに注意する必要があります。ロック画面が表示されたときに、sshエージェントに鍵の認証情報を忘れさせることができます。これは、クライアントマシンへの攻撃がキーを危険にさらすのを防ぐのに役立ちます。
ここではまともな回答がいくつかありますが、すべて私の見解では的外れのようです。
認証にキーペアを使用すると、パスワードベースのシステムの「知っているもの」がキーまたはトークンシステムの「持っているもの」に置き換わります。すぐにこれに戻ります。
キーははるかに複雑です。ほとんどのSSH実装のデフォルトは2048 RSAキーです。これを8文字のパスワードと比較してください。 256ビットにハッシュされた場合でも、パスワードはキーのランダム性を欠いているため、ブルートフォースになる可能性があります。シュナイアーはこれについていくつかの素晴らしい観察をしています。おそらく「良い」パスワードでさえ、解読可能なデータ(数字とおそらくいくつかの単純な置換を含むWord)の組み合わせのみである傾向があります。私たち人間は予測しすぎです。
ログイン用のパスワードと同じくらい安全なキーについては、これは完全に正しいわけではありません。鍵を別のパスワードでラップすることにより、本質的に2要素認証を使用するため、セキュリティが大幅に向上します。持っているもの(キー)にアクセスするには、知っているもの(パスワード)を使用する必要があります。はい、ログインパスワードを使用してキーをラップすると、これが損なわれます。
ですから、元のポスターについては、あなたとあなたの同僚の両方が間違っていると思います。あなたは彼らよりも少ないかもしれませんが、正しい答えは、キーとパスワードの両方を使用する必要があるということです。