SSHパスワード認証がセキュリティリスクになるのはなぜですか?


68

OpenSSH構成のほとんどのガイドでは、キーベースの認証を優先してパスワード認証を無効にすることを推奨しています。しかし、私の意見では、パスワード認証には重要な利点があります。つまり、キーなしで絶対にどこからでも接続できるということです。常に強力なパスワードを使用する場合、これはセキュリティ上のリスクにはなりません。またはそれをすべきですか?


2
パスワードは、スニッフィング、推測、および再生が可能な1要素認証です。キーは(おそらく)2要素です。一部のシステムでは、たった1つの要因でどこからでもログインできることは受け入れられません。
アレックスホルスト

回答:


25

pwまたはキーベースの認証には、長所と短所があります。

たとえば、場合によっては、キーベースの認証はパスワード認証より安全性が低くなります。それ以外の場合、そのpwベースは安全性が低くなります。場合によっては、1つがより便利であり、他の場合はより便利です。

つまり、キーベースの認証を行うときは、パスフレーズでキーを保護する必要あります。ssh-agentを実行していない限り(ssh-agentを使用すると毎回パスフレーズを入力する必要がなくなります)、利便性の面では何も得られません。セキュリティは議論の余地があります:攻撃ベクトルは、サーバーからあなた、またはあなたのアカウント、またはあなたの個人のマシンに移りました。

これを決定するとき、箱の外側を考えてください。セキュリティの面で利益を得るか失うかは、環境の残りの部分と他の手段に依存します。

編集:ああ、ちょうどあなたがホームサーバーについて話しているのを見た。私は常に同じ状況で、「パスワード」または「キーが付いたUSBスティック」を常に持っていましたか?前者に進みました、SSHリスニングポートを22以外のポートに変更しました。これにより、ネットワーク全体の範囲をブルートフォースするすべてのラメスクリプトキディーが停止します。


SSHポートを22から変更することは、多くの場合、まったく良い考えではありません。 adayinthelifeof.nl/2012/03/12/...
Tymek

75

sshキーの使用には、パスワードログインと比較して1つの固有の機能があります。許可されたコマンドを指定できます。これは~/.ssh/authorized_keys、サーバーでファイルを変更することで実行できます。

例えば、

command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

その特定のキーを持つコマンド「/usr/local/bin/your_backup_script.sh」のみを許可します。

キーに許可されるホストを指定することもできます。

from="yourclient,yourotherclient", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

または、2つを組み合わせます。

from="yourbackupserver", command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

キーを使用すると、特定のアカウントのパスワードを明かすことなく、一部のユーザー(コンサルタントなど)にサーバーへの一時的なアクセスを許可することもできます。コンサルタントが仕事を終えたら、一時キーを削除できます。


非常に便利なヒント。
サチンディベカー

3
それに加えて、キーを使用することは、端末で手動でキー入力できるものと比較して、長い2000文字のパスワードを持っているようなものです(技術的にはさらに強力です):D
Abhishek Dujari

3
SSH認証に関する2つの非常に便利なヒントですが、実際には質問に答えられません...
MikeMurko

パスワード認証されたユーザーに特定のコマンドを実行させる場合は、ログインシェルを変更します。また、「パスワードを明かすことなく一時的なアクセスを許可する」ことは非常に悪い考えです。後でアクセスできるようにするには、何百もの異なる方法があります。
b0fh

最後の段落だけでIMOの質問に答えています。キーを使用するときめ細かな取り消しが可能になり、パスワードを使用すると、変更することを全員に知らせる必要があります。
ライキング

48

ネットワーク内からのみパスワード認証を許可することで、両方の長所を最大限に活用できます。の末尾に次を追加しますsshd_config

PasswordAuthentication no
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes

7

質問に部分的に回答しました-攻撃者が接続できる場所が多いほど、ブルートフォーシングによってサーバーに侵入する可能性が高くなります(DDoSを考慮してください)。

また、パスワードの長さとキーサイズ(通常は数千ビット)を比較します。


4
96ビットのエントロピーは、英語で書かれている場合、80文字のパスワードを意味します。印刷可能な文字セットからランダムに意味不明な場合は15文字。あなたのsshパスワードがそんなに長い/強いと確信していますか?
MADHATTER

3
辞書攻撃に対して脆弱ではないエントロピーの96ビットの複数のパスワードがある場合は、とにかく何らかの種類のパスワード管理ソフトウェアを使用する必要があるので、パスワードを使用するすべてのアクセス可能な要素を事実上失います。
ニックダウントン

5
@SachinDivekarは、英語の単語ではなく、セット[a-zA-Z]からランダムなパスワードを使用する場合にのみ96ビットのエントロピーです。
Jaapエルダリング

16
@NickDownton-キーパスソフトウェアに頼らずに、素敵な長いパスワードを使用できます。mywifesnameisangelaandshehasanicebutt辞書攻撃には耐えられないようなものは、非常に強力で、覚えるのは非常に簡単ですが、推測することはできません。妻にパスワードを与える必要がある場合、ブラウニーがポイントすればボーナスが付きます。
マークヘンダーソン

7
申し訳ありませんが、マーク、それは間違っています。指定したパスフレーズは37文字であるため、およそ44ビットのエントロピーがあり、これは7つのランダムな印刷可能文字よりも弱く、著しく攻撃可能です。詳細については、クロードシャノンの作品に関するウィキペディアの記事を読んでください。しかし、結果は、書かれた英語は非常に予測可能であるということです。単語が関係する強力なパスワードの場合、辞書からつながれた4つのランダムな単語は10 ** 23の可能性を与えます。これは約77ビットのエントロピーです。まだ素晴らしいとは言えませんが、悪くはありません。
MadHatter

7

パスワードを使用してログインすると、サーバーにパスワードを送信します。これは、サーバーのオペレーターがSSHDを変更してパスワードにアクセスできることを意味します。公開鍵認証では、公開鍵のみがサーバーに送られるため、彼らは秘密鍵を取得できません。


2
これは、タイプミスのために間違ったサーバーに接続する場合に特に重要です。たとえば、ある時点では、.cgはsshが有効になっている単一のマシンを指すワイルドカードでした。.chの.cgを誤って入力すると、そのボックスに接続してパスワードが漏洩することになります
...-b0fh

本当に@ b0fh。私の知る限り、これはsshでパスワードを使用することによって導入される唯一の本当の脆弱性です。接続しているサーバーを誰かが既に所有している場合、または接続しているIPアドレス(MITM)をスプーフィングできる場合は、すでに失われています。
ホブ

6

sshキーは、パスワードに対する中間者ベースの攻撃を防ぎます。

キーを使用してログインしようとすると、サーバーは公開キーに基づいてチャレンジを作成し、クライアントに送信します。暗号化を解除し、適切な応答を作成して送信します。

秘密鍵がサーバーに送信されることはなく、リッスンしているユーザーはその単一セッションを傍受する以外は何もできません。

パスワードで彼らはあなたの資格情報を持っているでしょう。

私の解決策は、USBキーの暗号化されたパーティションに適切な形式のポータブルsshキーを置くことです。これにより、次のことが可能になります。
キーが紛失した場合、そのキーを簡単に撤回できます。
アクセスできるサーバーを制限し
、それを持ち歩く

マウントソフトウェアのインストールは苦痛ですが(truecrypt)


1
これは間違っています。サーバーの公開キー(キャッシュに追加し、最初の接続でMITMを取得しなかった場合にそれを行う)を知ったらすぐに、MITM攻撃の影響を受けなくなります。キー/パスワードベースの認証は、それとは何の関係もありません。パスワードは決して平文で送信されることはありません。マシンレベルの認証(あなた/私の公開鍵)での安全な接続は、ユーザーレベルの認証(あなたのパスワード/この公開鍵はあなたのものです)の前に常に設定されます。
トーマス

3
トーマス、実際には多くの人が指紋の変更に関する警告を無視しています。Pubkey authは、サーバーの秘密キーが何らかの方法で侵害されたり、人間が「はい」とうんざりして入力した場合でもMITM保護を保証します。勝つ。
Score_Under

5
そして回答者へ:truecryptを使用する必要はありません。openssh秘密鍵には独自のオプションのパスワードベースの暗号化が付属しています。
Score_Under

5

@MartinVejmelkaが言うように、それはトレードオフです。

キーベースの認証を使用する理由は、キーが現在または将来のブルートフォースをはるかに上回っており、自分のPCからアクセスするか、USBスティックなどにキーを保持する必要があるためです。

パスワードには次の問題があります。

  • それが短い場合、それは強引に強制することができます
  • 長い場合は簡単に忘れられます
  • 肩でサーフィンできた

キーは桁違いに長く、どの時点でも表示されないため、これらの3つの問題を回避できます。


ただし、キーファイルを使用すると、ペンドライブや使用中のストレージが失われるという問題が発生します。
ジョアンポルテラ

1
その時点で、失われたキーを削除し、新しいキーを追加できます。パスワード(特に共有パスワード)を使用すると、これは大きな苦痛となり、多くのうめき声が伴います。
SplinterReality

私の(最近廃止された)パスワードの1つ:08Forging2?seminal*^Rajas-(Posed/|。ランダムに生成されますが、思い出すのに問題はありません。そして、幸運なことに、ショルダーサーフィンやブルートフォースがあります。
finnw

1
@finnw正しい馬のバッテリーステープル:-) security.stackexchange.com/q/6095/485
ロリーアルソップ

2

ここですでに述べた良い点。

強力なパスワードを使用して基本事項を処理した場合、最大のリスクと考えられるのは、ユーザーが気付かないうちに多くのコンピューターにキーロガーがインストールされていることです。トロイの木馬を含む便利なユーティリティのサイト全体を作成している人もいるので、私たちにとって最高の事態になり得ます。キーロガーは、例えばログインの詳細をハッカーにメールで送信し、ハッカーは簡単にサーバーにアクセスできます。

最近、ノートンから、Minecraftのjarにフライトを追加するためのZombee Modインストーラー(jarではなく、インストーラー)のダウンロードについて警告を受けました。詳細を見て、ノートンはこのサイトにトロイの木馬を含むとマークされた多くのユーティリティをリストしました。これが正しいかどうかはわかりませんが、ファイル名に関してはかなり具体的でした。また、トロイの木馬が配布される前に(一部)ウェアーズに入れられることも知られています。


2

パスワードよりもSSHの潜在的な利点の1つは、SSHパスフレーズを指定しない場合、パスワードを再度入力する必要がないことです。コンピューターは、キーを持っているため、サーバー上で本質的に信頼されます。そうは言っても、私は通常SSHパスフレーズを常に使用するので、その利点を排除します。

ユーザーガイドがパスワード認証よりもSSHを頻繁に推奨する理由の最良の答えは、SSHOpenSSHKeysのUbuntuマニュアルから得られます。引用、

重要でないと思われる場合は、来週に発生する悪意のあるログイン試行をすべて記録してみてください。私のコンピューター(まったく普通のデスクトップPC)では、先週だけでパスワードを推測する4,000回以上の試行と、ほぼ2,500回の侵入試行がありました。攻撃者がパスワードを見つけ出すまでに、何千ものランダムな推測が必要だと思いますか?

基本的に、句読点、大文字と小文字、数字を含む堅固な長さのパスワードを持っている場合は、おそらくパスワード認証で問題ありません。また、ログを監視する予定があり、とにかくネットワーク全体で「非常に安全」なことをしていない場合...つまり、ホームサーバーに使用する場合。それから、パスワードはどうしてもうまくいきます。


1

passwd authメソッドは本当に安全ではありません(imho)。このメカニズムを使用すると、パスワードはsshdサーバーに送信されます(@ramonが既に述べたように)。これは、一部の個人がsshdサーバーを変更してパスワードを取得できることを意味します。Man-In-The-Middle攻撃では、これはローカルネットワーク内で非常に簡単に達成できます。

このパッチ(https://github.com/jtesta/ssh-mitm)をインストールするだけで、sshdサーバーにパッチを適用できます。arpspoofiptablesを使用して、パッチを適用したサーバーをクライアントと本物のsshdサーバーの間に配置します。

パスワード認証を無効にしてください:設定ファイル/etc/ssh/ssh_configを開き、行を追加してくださいPasswordAuthentication no


SSHクライアントは、RSAフィンガープリントのサーバーをチェックしませんか?この特定のサーバーに少なくとも1回sshした後、指紋が記憶されるので、MITM攻撃の可能性がある場合、SSHは警告を点灯しませんか?
セプタグラム

1
うん。警告が表示されますが、これはosの再インストール、構成の変更によるeccが原因であるため、ほとんどのユーザーは警告を無視して続行します。
ピオズ

@Septagram多くのシェルアカウントプロバイダは新しいサーバなどへのユーザーアカウントの移行のため、新規加入者のために、現在のサーバの鍵の指紋を掲示する習慣になっていない
ダミアンYerrick

-2

-o StrictHostKeyChecking=noオプションを使用してバイパスできます。これは、シェルスクリプトでsshを使用する場合に非常に便利です。

ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o PasswordAuthentication=no -o ConnectionAttempts=5 xxUser@xxxHost
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.