Autenticação por desafio e resposta no SSH

Atuando sobre o protocolo SSL, o Secure SHell permite logar-se em uma máquina e executar comandos, em uma versão segura do antigo telnet. Este artigo não ensinará a instalar o SSH, mas sim a usar alguns recursos especiais, particularmente o do login por desafio e resposta (que usa uma chave pública e privada). Porém não apenas usar, mas explicar como funciona nos bastidores.

[ Hits: 148.332 ]

Por: Elgio Schlemer em 27/07/2009 | Blog: https://profelgio.duckdns.org/~elgio


Desafio e resposta no ssh



O ssh é suficientemente seguro se bem usado. Se você tem certeza da idoneidade do servidor e se tem certeza de que realmente é o servidor, tudo bem. Não há qualquer problema você digitar sua senha de acesso. Ela não poderá ser lida por mais ninguém.

Isto porque toda a sessão ssh é protegida por um forte algoritmo de criptografia simétrico. Quando você digita sua senha ela é cifrada com este algoritmo e transmitida pela Internet. Alguém, em posição de capturar o tráfego, não conseguirá obter esta senha.

Porém existe ainda uma forma de executar o login sem precisar enviar a senha. E uma forma segura. Mas porque não enviar a senha? Vários motivos.

Primeiro uma segurança a mais, pois agora a senha sequer viaja pela Internet, nem mesmo cifrada. Na hipótese, mesmo remota, de alguém estar aplicando um ataque do homem do meio ou de que o servidor estar corrompido, o atacante realmente não terá sua senha, de forma alguma.

Um segundo motivo pode ser a facilidade de manutenção. As vezes é chato ter que ficar colocando várias vezes a senha, principalmente se todos fizerem a coisa certa, de não usar a mesma senha em todos os servidores (por experiência pessoal, sou cético quanto a isto!).

Para resolver este problema o ssh possui o login por desafio e resposta através do uso de um par de chaves pública e privada. Você primeiro deve criar um par de chaves para si, uma chave pública e privada. A chave privada você mantém em segredo, guarda-a em segurança. Já a chave pública você deposita no servidor e diz para o ssh aceitar conexões de qualquer um que prove ser o conhecedor da chave privada.

O conceito dos algoritmos assimétricos garante que tudo que foi cifrado com a chave pública, apenas a chave privada poderá abrir. Assim o desafio gerado pelo servidor passa a ser o seguinte:
  1. servidor escolhe aleatoriamente uma sequência de bits grande (exemplo: 2048 bits aleatórios);
  2. servidor cifra estes bits com a chave pública do suposto cliente e envia;
  3. cliente precisa dizer ao servidor qual era a sequência escolhida;
  4. cliente só pode fazer isto com sucesso se conhecer a chave privada.

Este método é ainda melhor que o descrito antes, pois não envolve a senha do usuário em nenhum momento, apenas a chave privada dele. Esta chave passará a ser a parte sensível e deve ser protegida. Como ninguém conseguirá decorar uma chave de milhares de bits, ela precisa ser armazenada.

Armazenar é um problema, pois pode-se supor até o roubo do HD onde um atacante teria a chave e se logaria em seus servidores. Para evitar isto, o ssh permite que você proteja sua chave com uma frase de passagem, que você poderá lembrar-se. Pode ser qualquer sequência de caracteres que será solicitada pelo seu programa cliente quando você fizer o login.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Como funciona o desafio resposta
   3. Desafio e resposta no ssh
   4. Configuração do ssh para autenticação por desafio e resposta
   5. Conclusão
   6. Referências
Outros artigos deste autor

Cuidado com números em Ponto Flutuante

Estrutura do Iptables

A mágica do dc

Parâmetros interessantes do scanf e do printf em C

Iptables protege contra SYN FLOOD?

Leitura recomendada

Tomcat + SSL: HOW-TO

Os Vírus e o Linux

Snort + ACID + MySQL no Slackware

Análise de Malware em Forense Computacional

Diminua os vetores de exploração, conheça o DOAS

  
Comentários
[1] Comentário enviado por removido em 27/07/2009 - 16:53h

Esclarecedor. Muito bom.

[2] Comentário enviado por cesar em 27/07/2009 - 17:04h

Boa elgio,

[]'s

[3] Comentário enviado por Lisandro em 28/07/2009 - 08:07h

Muito interessante e em linguagem acessível.

[4] Comentário enviado por renato.leite em 28/07/2009 - 17:43h

Muito bom, Parabéns.

[5] Comentário enviado por ghodoy em 29/07/2009 - 09:33h

Execelente artigo..muito esclaredor

[6] Comentário enviado por elgio em 31/07/2009 - 09:58h

O que pode ser considerado uma continuação deste artigo:
http://www.vivaolinux.com.br/artigo/Tuneis-cifrados-com-SSH/

[7] Comentário enviado por mda_deb em 31/07/2009 - 21:01h

Parabéns elgio, mais um artigo de qualidade.


[8] Comentário enviado por rafaelalmeida em 02/09/2009 - 10:35h

Muito bom artigo!
Só uma dúvida, após logar com a minha frase, estarei no home ou com os privilégios de qual usuário? O usuário que eu estava logado quando criei a chave?

[9] Comentário enviado por ikichl em 23/09/2009 - 09:22h

Bom dia
estou com um grande problema aqui tenho um sistema em php que faz conexoes
automaticas atravez e chave de seguranca, instalada na maquina remota, porem cada
nova conexao ele pede a confirmacao antes e conectar a primeira vez:

Are you sure you want to continue connecting (yes/no)?

ja tentei diversos meio para auto aceitar a conexao, mas sempre sem sucesso
echo -e "yes" | ssh root@200.175.121.18

[10] Comentário enviado por edinhow em 06/11/2009 - 07:50h

Artigo muito bom! Parabéns!



[11] Comentário enviado por sfrique em 01/01/2010 - 20:12h

Artigo muito bom, mas para copiar a chave nao seria melhor usar o ssh-copy-id ?

Segue o comando:

$ssh-copy-id -i ~/.ssh/id_dsa.pub login@servidor

Basta o sftp estar habilitado no servidor!

Funciona com a chave rsa, então acho que deve funcionar com a dsa tambem!

Vlw!


[12] Comentário enviado por elgio em 01/01/2010 - 20:38h

Henrique:

SIM, pode ser usado ssh-copy-id sim.

Mas observe que o ssh-copy-id não passa de um script SHELL :-O

E bem pequeno, alias. Bem simples de entender. Tirando a parte de testes se o usuário passou o que precisava e se a chave existe, etc, etc, a cópia é simplesmente isto:

{ eval "$GET_ID" ; } | ssh $1 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1

Sendo que a variável GET_ID foi previamente preenchida com a chave.

Não precisa, neste caso, do SFTP. Ele faz usando o ssh mesmo.

Boa dia. Valeu.

E bem vindo ao Viva o Linux!

[13] Comentário enviado por anonymous em 12/03/2010 - 13:59h

EXCELENTE ARTIGO!!!

[14] Comentário enviado por aline.abreu em 15/10/2010 - 14:38h

Elgio,

Gostei muito do seu artigo!
Só me confirma uma coisa: Pra cada máquina que eu usar, terei que ter um par de chaves ou posso usar a mesma para várias máquinas que eu uso?

Aline

[15] Comentário enviado por VagnerFonseca em 22/10/2010 - 10:50h

Aline,

Respondendo sua pergunta, você pode usar sim a mesma chave pública para logar em várias máquinas diferentes, assim basta que o usuário que você estiver utilizando naquele momento esteja com a chave privada no seu diretório .ssh.

Elgio,

Muito bom artigo, continue assim.

[16] Comentário enviado por removido em 26/09/2011 - 23:50h

Fantástico, parabéns elgio

[17] Comentário enviado por Thiago Andreotti em 26/12/2011 - 13:48h

O site Preciso Disso está contratando um web developer senior (back end) com forte conhecimento em PHP em cake e outros frameworks. Além de participar do desenvolvimento da versão 2.0 do site (em andamento) o desenvolvedor terá que criar aplicativos de busca, vídeos e notícias para redes sociais.O candidato deve ter perfil empreendedor e vontade de crescer e se tornar sócio de uma empresa startup.
Salário de R$ 4-5 mil + VR + VT + participação nos lucros + ações da empresa a partir do segundo ano.
Envie o seu CV para thiago@precisodisso.com.br
Para trabalhar na região de Moema em São Paulo

[18] Comentário enviado por elgio em 26/12/2011 - 13:54h

Caro Thiago.

Coloque seu anúncio neste forum: http://www.vivaolinux.com.br/comunidade/Classificados-de-empregos-Linux/forum/

Os moderadores do VOL terão maior prazer em colocar ele em destaque na página principal do VOL.

Coloque e me avise, ok?

Elgio

[19] Comentário enviado por removido em 12/01/2012 - 09:56h

Simplesmente maravilhoso Elgio! Parabéns!

[20] Comentário enviado por marcoaw em 12/01/2012 - 14:49h

muito bom !!!

[21] Comentário enviado por marcelo_v em 09/02/2012 - 12:22h

Artigo perfeito, sempre as pessoas entendem melhor com alguns exemplos do cotidiano, para dps citar um exemplo pratico da apresentacao do assunto, e foi realmente isso q vc fez. Esta' de parabe'ns, continue assim!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts