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

44

Alguns dos meus Linux & Os sistemas FreeBSD possuem dezenas de usuários. A equipe usará esses nós "ssh gateway" para o SSH em outros servidores internos.

Estamos preocupados que algumas dessas pessoas usem uma chave SSH privada não criptografada (uma chave sem passphrase . Isso é ruim porque, se um cracker tiver acesso à sua conta nessa máquina, ele poderá 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 um frase secreta.

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

Atualização:

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

    
por Stefan Lasiewski 14.08.2010 / 19:34

3 respostas

60

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

As chaves privadas

Criptografadas 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.

    
por 16.08.2010 / 13:23
10

Eu procurei por tudo 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, desde que você acabou de pegar seu usuário com uma chave sem senha, talvez você não se importe se eles notarem. : 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
    
por 01.04.2015 / 21:32
8

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

Se você não tiver acesso à chave privada, duvido que possa detectar isso. O objetivo da frase secreta é "desbloquear" a chave privada, ela não tem nenhuma função em relação à chave pública.

Na verdade, se fosse, isso 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 decifrar a senha.

    
por 14.08.2010 / 20:45