it-swarm-es.tech

¿Cómo puedo determinar si la clave SSH de alguien contiene una frase de contraseña vacía?

Algunos de mis sistemas Linux y FreeBSD tienen docenas de usuarios. El personal utilizará estos nodos "ssh gateway" para SSH en otros servidores internos.

Nos preocupa que algunas de estas personas usen una clave SSH privada sin cifrar (una clave sin una frase de contraseña . Esto es malo , porque si un cracker alguna vez tuvo acceso a su cuenta en esta máquina, podrían robar la clave privada y ahora tienen 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á encriptada (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, suponga que tengo acceso de superusuario en la máquina y puedo leer las claves privadas de todos.

44
Stefan Lasiewski

Bueno, las claves privadas OpenSSH con frases de contraseña vacías en realidad no están encriptadas.

Cifrado las 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 hacer el truco.

59
codehead

Busqué todo esto 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 está tratando de que los usuarios cuyas claves esté probando no lo noten, puede copiar primero la clave. OTOH, dado que acabas de atrapar a tu usuario con una clave sin contraseña, tal vez no te importe si se dan cuenta. :RE

$ 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 tiene acceso a la clave privada, supongo, puede usarla sin frase de contraseña para autenticarse con la clave pública. Si esto funciona, sabes que no tiene frase de contraseña. Si lo hubiera hecho, 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, haría que el sistema fuera menos seguro. Se podría usar la clave pública, que está disponible para tratar de aumentar la fuerza bruta u otros ataques que intentan descifrar la frase de contraseña.

8
txwikinger