
Algunos de mis sistemas Linux y FreeBSD tienen decenas de usuarios. El personal utilizará estos nodos de "puerta de enlace ssh" para acceder mediante SSH a otros servidores internos.
Nos preocupa que algunas de estas personas utilicen una clave SSH privada no cifrada (una clave sinfrase de contraseña.Esto es malo, porque si un cracker alguna vez obtuviera acceso a su cuenta en esta máquina, podría robar la clave privada y ahora tener acceso a cualquier máquina que use esta misma clave. Por razones de seguridad, requerimos que todos los usuarios cifren sus claves SSH privadas con una frase de contraseña.
¿Cómo puedo saber si una clave privada no está cifrada (por ejemplo, no contiene una frase de contraseña)? ¿Existe un método diferente para hacer esto en una clave blindada ASCII frente a una clave no blindada ASCII?
Actualizar:
Para aclarar, supongamos que tengo acceso de superusuario en la máquina y puedo leer las claves privadas de todos.
Respuesta1
Bueno, las claves privadas de OpenSSH con frases de contraseña vacías en realidad no están cifradas.
cifradoLas claves privadas se declaran como tales en el archivo de clave privada. Por ejemplo:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC
BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----
Entonces algo como
# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa
debería funcionar.
Respuesta2
Busqué esto por todas partes y nunca encontré una respuesta satisfactoria, pero logré construir una, así que...
Tenga en cuenta que esto actualizará el archivo si funciona, por lo que si intenta pasar desapercibido para los usuarios cuyas claves está probando, es posible que desee copiar la clave primero. OTOH, dado que acaba de atrapar a su usuario con una clave sin contraseña, tal vez no le importe si se da cuenta. :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
Respuesta3
Supongo que si tiene acceso a la clave privada, puede usarla sin frase de contraseña para autenticarse con la clave pública. Si esto funciona, sabrás que no tiene contraseña. Si fuera así, le daría un mensaje de error.
Si no tiene acceso a la clave privada, dudo que pueda detectar esto. El propósito de la frase de contraseña es "desbloquear" la clave privada, no tiene ninguna función con respecto a la clave pública.
De hecho, si lo hiciera, el sistema sería menos seguro. Se podría usar la clave pública, que está disponible para intentar montar fuerza bruta u otros ataques para intentar descifrar la frase de contraseña.