web-dev-qa-db-ja.com

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

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

これらの人々の一部は、暗号化されていない秘密のSSHキー( パスフレーズなしのキーを使用しているのではないかと懸念しています。悪い 、クラッカーがこのマシンのアカウントにアクセスしたことがある場合、秘密鍵を盗み、同じキーを使用するすべてのマシンにアクセスできる可能性があるためです。セキュリティ上の理由から、すべてのユーザーに、パスフレーズを使用してプライベートSSHキーを暗号化するように要求します。

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

更新:

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

44

まあ、パスフレーズが空の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

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

59
codehead

私はこれをよく見ましたが、満足のいく答えは見つかりませんでしたが、なんとか構築することができたので...

これが機能する場合はファイルが更新されることに注意してください。したがって、テストしているキーのユーザーに気付かれないようにする場合は、最初にキーをコピーすることをお勧めします。 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
10
rlpowell

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

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

実際には、そうするとシステムの安全性が低下します。パスフレーズを解読しようとするブルートフォースやその他の攻撃を仕掛けるために利用できる公開鍵を使用することができます。

8
txwikinger