誰かのSSHキーに空のパスフレーズが含まれているかどうかを確認するにはどうすればよいですか?


44

私のLinuxおよびFreeBSDシステムには、何十人ものユーザーがいます。スタッフはこれらの「sshゲートウェイ」ノードを使用して、他の内部サーバーにSSH接続します。

私たちは、これらの人々の一部は暗号化されていない秘密SSHキー(なしのキーを使用することを懸念しているパスフレーズをこれは悪いです、クラッカーが今までこのマシン上の自分のアカウントへのアクセスを獲得した場合、彼らは秘密鍵を盗み、今のアクセス権を持っている可能性があるため、セキュリティ上の理由から、すべてのユーザーが自分のプライベートSSHキーをパスフレーズで暗号化する必要があります。

秘密鍵が暗号化されていない(たとえば、パスフレーズが含まれていない)ことを確認するにはどうすればよいですか?ASCII装甲キーと非ASCII装甲キーでこれを行う別の方法はありますか?

更新:

明確にするために、マシン上でスーパーユーザーのアクセス権があり、全員の秘密鍵を読み取れると仮定します。


2
grumble ssh-agent grumbleゲートウェイに秘密鍵が存在してはいけません。
デロバート

いくつかの注意事項:-ユーザーのパスフレーズ不十分であることがよくあります。-ユーザーはパスフレーズを変更できます。-ユーザーはキーを複数の場所に保存できます。-ユーザーはsshエージェントを使用する可能性が高いため、ラップトップでキーを一度ロック解除できます。
ベン・ハイド

回答:


59

さて、空のパスフレーズを持つOpenSSH秘密鍵は実際には暗号化されていません。

暗号化された秘密鍵は、秘密鍵ファイルでそのように宣言されます。例えば:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC

BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----

のようなもの

# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa

トリックを行う必要があります。


3
@ jmanning2k:パスフレーズなしでRSA秘密鍵を作成しましたが、文字列「暗号化:なし」が含まれていません。
ステファンLasiewski

@ jmanning2k:-Lフラグは、パターンに一致しないファイル名のみをリストします。したがって、この答えはそれ自体で正しいです。
バハマ

私は訂正し、明確にするためにコメントを削除しました。記録のために、「暗号化:なし」という読み取り専用のいくつかのPutty秘密キーファイルをコピーしています。
jmanning2k

2
または文字列OPENSSH:tedunangst.com/flak/post/を参照してください。-
ジャック

10

私はこれをすべて見て、満足のいく答えを見つけることができませんでしたが、私はそれを構築することができたので...

これにより、ファイルが機能する場合は更新されることに注意してください。したがって、テストしているキーを持つユーザーに気づかれたくない場合は、最初にキーをコピーすることをお勧めします。OTOH、パスワードなしのキーでユーザーを捕まえただけなので、気付いても気にしないかもしれません。:D

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1

3
-N ''代わりにパスフレーズが常に変更されないようにしないのはなぜですか?
MODを適切に処理する

facepalm それは完璧です、どうもありがとう。
rlpowell

+1。このソリューションはSSHの新しい秘密キー形式でも動作するためです。
セバスチャンクライスマンスキー

8

秘密鍵にアクセスできる場合、公開鍵に対して認証するためにパスフレーズなしでそれを使用できると思います。これが機能する場合、パスフレーズがないことがわかります。持っていた場合、エラーメッセージが表示されます。

秘密鍵にアクセスできない場合、これを検出できるとは思えません。パスフレーズの目的は、秘密鍵を「ロック解除」することであり、公開鍵に関しては機能しません。

実際、そうだとすると、システムの安全性が低下します。パスフレーズを解読しようとするブルートフォースやその他の攻撃を試みるために利用可能な公開キーを使用できます。

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