Como posso determinar se a chave SSH de alguém contém uma senha vazia?

Como posso determinar se a chave SSH de alguém contém uma senha vazia?

Alguns dos meus sistemas Linux e FreeBSD têm dezenas de usuários. A equipe usará esses nós de “gateway ssh” para SSH em outros servidores internos.

Estamos preocupados que algumas dessas pessoas usem uma chave SSH privada não criptografada (uma chave semsenha.Isto é mau, porque se um cracker obtivesse acesso à sua conta nesta máquina, ele poderia roubar a chave privada e agora ter acesso a qualquer máquina que use essa mesma chave. Por motivos de segurança, exigimos que todos os usuários criptografem suas chaves SSH privadas com uma senha longa.

Como posso saber se uma chave privada não está criptografada (por exemplo, não contém uma senha)? Existe um método diferente para fazer isso em uma chave blindada ASCII versus uma chave blindada não ASCII?

Atualizar:

Para esclarecer, suponha que eu tenha acesso de superusuário na máquina e possa ler as chaves privadas de todos.

Responder1

Bem, as chaves privadas OpenSSH com senhas vazias não são criptografadas.

Criptografadoas chaves privadas são declaradas como tal no arquivo de chave privada. Por exemplo:

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

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

Então algo como

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

deve fazer o truque.

Responder2

Procurei por isso e nunca encontrei uma resposta satisfatória, mas consegui construir uma, então...

Observe que isso atualizará o arquivo se funcionar; portanto, se você estiver tentando não ser notado pelos usuários cujas chaves está testando, convém copiar a chave primeiro. OTOH, já que você acabou de pegar seu usuário com uma chave sem senha, talvez você não se importe se ele perceber. :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

Responder3

Se você tiver acesso à chave privada, suponho que poderá usá-la sem senha para autenticar a chave pública. Se isso funcionar, você sabe que não há senha. Se tivesse, você receberia uma mensagem de erro.

Se você não tiver acesso à chave privada, duvido que consiga detectar isso. O objetivo da senha é “desbloquear” a chave privada, ela não tem função em relação à chave pública.

Na verdade, se assim fosse, tornaria o sistema menos seguro. Pode-se usar a chave pública, que está disponível para tentar montar força bruta ou outros ataques tentando quebrar a senha.

informação relacionada