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

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

Armazenamento de senhas no Linux

255.255.255.0: A matemática das máscaras de rede

Fundamentos da criptografia assimétrica

Túneis cifrados com SSH

Guerra Infinita, uma análise da Ciência da Computação

Leitura recomendada

Escrevendo em discos sem sistemas de arquivos

Hotspot rápido com Coovachilli

Nikto - Tutorial básico e avançado

Detectando vulnerabilidades com o Nessus

Análise passiva (parte 2)

  
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