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

44

Certains de mes systèmes Linux et FreeBSD ont des dizaines d'utilisateurs. Le personnel utilisera ces nœuds "passerelle ssh" pour SSH vers d'autres serveurs internes.

Nous craignons que certaines de ces personnes n'utilisent une clé SSH privée non chiffrée (clé sans phrase secrète . Cela est grave , car si un pirate parvient à accéder à son compte sur cette machine, elle peut voler la clé privée et avoir maintenant accès à son compte. Pour des raisons de sécurité, nous demandons à tous les utilisateurs de chiffrer leurs clés SSH privées avec une phrase secrète.

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

Mise à jour:

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

Stefan Lasiewski
la source
2
grumble ssh-agent grumble Il ne devrait pas y avoir de clé privée sur la passerelle.
derobert
Quelques remarques pédagogiques: - Les utilisateurs ont souvent un mot de passe complexe . - Les utilisateurs peuvent modifier les mots de passe. - L'utilisateur peut stocker ses clés dans plusieurs endroits. - Les utilisateurs sont susceptibles d'utiliser l'agent ssh afin de pouvoir déverrouiller la clé une fois, par exemple sur leur ordinateur portable.
Ben Hyde

Réponses:

59

Eh bien, les clés privées OpenSSH avec des phrases secrètes vides ne sont en réalité pas chiffrées.

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

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

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

Donc quelque chose comme

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

devrait faire l'affaire.

tête de code
la source
3
@ jmanning2k: Je viens de créer une clé privée RSA sans mot de passe, et elle ne contient pas la chaîne 'Encryption: none'.
Stefan Lasiewski
@ jmanning2k: l' -Lindicateur répertorie uniquement les noms de fichiers qui ne correspondent pas au modèle. Donc, cette réponse est correcte en soi.
bahamat
Je reste corrigé, commentaire supprimé pour plus de clarté. Pour mémoire, j'ai copié quelques fichiers de clé privée Putty portant le libellé «Cryptage: aucun».
jmanning2k
2
ou chaîne OPENSSH: voir tedunangst.com/flak/post/…
Jack Wasey
10

J'ai cherché partout et je n'ai jamais trouvé de réponse satisfaisante, mais j'ai réussi à en construire une, alors ...

Notez que cela mettra à jour le fichier s'il fonctionne. Par conséquent, si vous essayez de ne pas être remarqué par les utilisateurs dont vous testez les clés, vous souhaiterez peut-être d'abord copier la clé. OTOH, puisque vous venez d'attraper votre utilisateur avec une clé sans mot de passe, peut-être ne vous inquiétez-vous pas s'ils le 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
rlpowell
la source
3
Pourquoi pas à la -N ''place pour que le mot de passe reste toujours inchangé?
Traitez bien vos mods le
facepalm C'est parfait, merci beaucoup.
rlpowell
+1 car cette solution fonctionne même avec le nouveau format de clé privée de SSH.
Sebastian Krysmanski
8

Je suppose que si vous avez accès à la clé privée, vous pouvez l’utiliser sans phrase secrète pour s’authentifier auprès de la clé publique. Si cela fonctionne, vous savez qu'il n'y a pas de phrase secrète. Si c'était le cas, cela vous donnerait un message d'erreur.

Si vous n'avez pas accès à la clé privée, je doute que vous puissiez le détecter. L'objectif de la phrase secrète est de "déverrouiller" la clé privée, elle n'a aucune fonction vis-à-vis de la clé publique.

En fait, si c'était le cas, le système serait moins sécurisé. On pourrait utiliser la clé publique, disponible pour essayer de monter la force brute ou d’autres attaques essayant de déchiffrer la phrase secrète.

txwikinger
la source