web-dev-qa-db-fra.com

Comment puis-je déterminer si la clé SSH de quelqu'un contient une phrase secrète vide?

Certains de mes systèmes Linux & FreeBSD ont des dizaines d'utilisateurs. Le personnel utilisera ces nœuds "passerelle SSH" sur SSH dans d'autres serveurs internes.

Nous craignons que certaines de ces personnes utilisent une clé SSH privée non cryptée (une clé sans phrase secrète . est mauvais , parce que si un cracker a jamais accédé à son compte sur cette machine, ils pourraient voler la clé privée et avoir accès à n'importe quelle machine qui utilise cette même clé. Pour des raisons de sécurité, nous Exiger que tous les utilisateurs doivent crypter leurs clés SSH privées avec une phrase secrète.

Comment puis-je dire si une clé privée n'est pas-cryptée (par exemple, ne contient pas de phrase secrète)? Existe-t-il une méthode différente pour le faire sur une clé blindée ASCII par rapport à une clé blonde non-ASCII?

Mettre à jour:

Pour clarifier, supposez que j'ai un accès superutilisateur sur la machine et je peux lire les clés privées de tout le monde.

44
Stefan Lasiewski

Eh bien, les clés privées OpenSSH avec des phraséphrases vides ne sont effectivement pas cryptées.

crypté Les clés privées sont déclarées comme telles dans le fichier de clé privé. Par exemple:

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

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

Alors quelque chose comme

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

devrait faire l'affaire.

59
codehead

J'ai regardé partout pour cela et je n'ai jamais trouvé une réponse satisfaisante, mais j'ai réussi à en construire un, alors ...

Notez que cela mettra à jour le fichier si cela fonctionne, donc si vous essayez de ne pas être remarqué par les utilisateurs dont vous testez les touches, vous souhaiterez peut-être copier la clé en premier. OTOH, puisque vous venez d'attraper votre utilisateur avec une clé sans passe, peut-être que vous ne vous souciez pas si elles remarquent. :RÉ

$ 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

Si vous avez accès à la clé privée, je suppose que vous pouvez l'utiliser sans passephrase pour vous authentifier contre la clé publique. Si cela fonctionne, vous savez qu'il n'a pas de phrase secrète. Si cela l'avait eu, cela vous donnerait un message d'erreur.

Si vous n'avez pas accès à la clé privée, je doute que vous puissiez la détecter. Le but de la phrasephrase est de "déverrouiller" la clé privée, elle n'a aucune fonction en ce qui concerne la clé publique.

En fait, si cela le ferait, cela rendrait le système moins sécurisé. On pourrait utiliser la clé publique, disponible pour tenter de monter la force brute ou d'autres attaques qui tentent de craquer la phrase secrète.

8
txwikinger