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

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

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

私たちは、これらの人々の一部が暗号化されていない秘密SSHキー(パスフレーズこれは悪いですなぜなら、クラッカーがこのマシンのアカウントにアクセスした場合、秘密鍵を盗んで、同じ鍵を使用するすべてのマシンにアクセスできるようになるからです。セキュリティ上の理由から、すべてのユーザーにパスフレーズを使用して秘密 SSH 鍵を暗号化することを義務付けています。

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

アップデート:

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

答え1

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

うまくいくはずです。

答え2

これについていろいろ調べましたが、満足のいく答えは見つかりませんでした。しかし、なんとか答えを組み立てることができたので...

動作する場合はファイルが更新されるので、テスト対象のキーを持つユーザーに気付かれないようにしたい場合は、まずキーをコピーしておくとよいでしょう。一方、パスワードなしのキーを持つユーザーを見つけたので、気付かれても気にしないかもしれません。: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

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

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

実際、そうなると、システムの安全性が低下します。公開鍵を使用すると、ブルートフォース攻撃やその他の攻撃を仕掛けてパスフレーズを解読しようとする可能性があります。

関連情報