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.274 ]

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


Como funciona o desafio resposta



Basicamente consiste em o servidor enviar um desafio para você que somente você poderia resolver. Se você acertar o desafio, passou no teste e pode autenticar-se.

Para explicar melhor o que é o desafio resposta, costumo usar um exemplo didático, porém extremamente fraco. Serve para explicar a ideia, mas não deve jamais ser usado por ser frágil.

Suponha que o cliente possua um segredo que é um número inteiro. Podemos chamá-lo de senha. O servidor conhece este segredo e permitirá login para qualquer um que provar conhecê-lo. A autenticação poderia ser da forma clássica:
  1. o cliente conta para o servidor a sua senha;
  2. o servidor verifica se ele acertou a senha;
  3. servidor aceita ou não o login.

Porém o método anterior possui um problema: a senha é enviada pela rede e alguém poderá capturar ela e se logar no futuro como sendo o cliente.

A mesma solução anterior, porém baseada em desafio e resposta, poderia ser:
  1. servidor envia uma expressão matemática para cliente resolver usando o seu segredo;
  2. cliente resolve a expressão e envia apenas a resposta;
  3. servidor, que também conhece o segredo, vê se cliente acertou a resposta;
  4. se acertou, aceita login.

Pode parecer a mesma coisa, mas a ideia é que a expressão matemática mude aleatoriamente a cada solicitação. Se alguém estiver capturando o tráfego não poderá usar a resposta em um login futuro, pois o servidor irá solicitar outra expressão matemática. Esta expressão pode ser uma simples multiplicação, como demonstra a figura:
Linux: Autenticação por desafio e resposta no ssh
O exemplo da figura anterior ilustra como é a técnica, mas não deve ser usado. Isto porque um atacante conseguirá descobrir muito facilmente a chave, bastando dividir 4305 por 123, pois ele viu o desafio e viu a resposta. Operações matemáticas que possam ser revertidas não devem ser usadas (divisão reverte a multiplicação, soma reverte a subtração). Se usar outra operação mais complexa que não possa ser desfeita e com números realmente muito grandes a técnica poderá ser usada.

Um exemplo de uma operação matemática irreversível é a de módulo, usada no RSA. Apesar de fugir um pouco do foco deste artigo, pois ainda está na minha gaveta um artigo sobre RSA, vale o exemplo:
Linux: Autenticação por desafio e resposta no ssh
O exemplo anterior ainda não pode ser usado. Poderia se os números fossem realmente grandes, com um X em torno de 512 bits de tamanho e o desafio também. Com números pequenos um ataque de força bruta seria possível, isto é, o atacante tentaria todos os possíveis valores de X até achar um que encaixe na expressão.

Já me estendi demais neste conceito, já que o objetivo era apenas explicar o princípio do desafio e resposta. No que diz respeito ao ssh, o desafio e resposta é baseado em chaves públicas e privadas.

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

Fundamentos da criptografia assimétrica

Iptables protege contra SYN FLOOD?

A mágica do dc

Armazenamento de senhas no Linux

Introdução a criptografia

Leitura recomendada

Definição de hacker

Montando um completo servidor de backup usando Bacula

Utilizando SSH com método de autenticação publickey + ssh-agend + ssh-add

Configurando um servidor Freeradius + openLDAP

Configurando um servidor de logs simples

  
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