web-dev-qa-db-ja.com

間違ったサーバーに接続しようとすると、SSHパスワードが明らかになりますか?

パスワードの資格情報を使用して誤ってサーバーに接続しようとした場合、管理者が使用したパスワードを読み取ってログに記録することは可能ですか?

191
vfclists

簡単に言えば:はい

もっと詳しく...

私のマシンに接続した場合、私が通常のsshサーバーを実行しているか、渡されたパスワードを書き出すように変更されているかがわかりません。

さらに、必ずしもsshdを変更する必要はありませんが、PAMモジュールを作成できます(例:pam_script)、パスワードが渡されます。

あ、はい。 [〜#〜] never [〜#〜]信頼できないサーバーにパスワードを送信します。マシンの所有者は、試行されたすべてのパスワードをログに記録するように簡単に設定できます。

(実際、これはinfosecの世界では珍しいことではありません。試みられたパスワードをログに記録するようにハニーポットサーバーをセットアップします)

214
Stephen Harris

はい。

暗号化された接続が確立された後にパスワードが送信されますが、リモートサーバーはプレーンテキストでパスワードを取得します。

あなたがそれを気にかけているなら、最良かつ最も簡単な解決策はSSHキーを使うことです。

キーを受け入れることができないマシンがある場合、1つの解決策は、パスワードを安全に保存するツールを作成し、sshpassを使用して、接続しているサーバーに応じて常に正しいパスワードを送信することです。


現在、パスワードがプレーンテキストで送信される理由は、パスワードの処理と保存に関するすべての決定がリモートエンドに委ねられるためです。また、クライアントはまったく馬鹿げている可能性があります。 LinuxとBSDシステムでは、過去10年ほどの間、いくつかの異なるパスワードハッシュ(ストレージ)形式が使用されており( crypt(3) )、クライアントからのサポートは必要ありません。

それは部分的には歴史のせいでもあります(つまり、それは常にそのようでした)。パスワードがあっても使用できる、より優れたチャレンジ/レスポンス認証プロトコルがあります。たとえば [〜#〜] srp [〜#〜] は、認証中に当事者に共有秘密を提供します。一部のSSHサーバーに実装されていますが、OpenSSHのパッチは(非常に)古いバージョン用です。

52
ilkkachu

Stephen Harrisの答えに基づいて構築するために、ssh(一種のハニーポット)経由でボックスに接続したときに変更されたPAM認証スクリプトがキャプチャできるものを示す、リアルタイムビューを以下に示します。私はPAMライブラリlib-storepwの修正版を使用しています。

https://livesshattack.net

https://livesshattack.net/about

11
Willie S.

SSHは相互信頼を必要とするプロトコルです。これが、OpenSSHクライアントがknown_hostsファイルを維持して、最初の使用スキームで信頼を実装する理由です。

誰がソフトウェアを提供したか、どのデータがログに記録されるように設定されているかに関係なく、SSHサーバーにログオンしようとすると、いくつかの認証手順に参加しています。パスワード認証を使用する場合、そのサーバーにパスワードを送信しています。これが、非対称暗号化(公開キー、証明書)が推奨される理由の1つです。公開キー暗号化は、資格情報を開示するリスクを大幅に軽減します。 (ただし、ssh-agent転送または同様のスキームを使用している場合は、MitM攻撃から保護されない可能性があります)。

2
jvoorhis