Você está na página 1de 6

Universidade Estcio de S Segurana em Redes de Computadores (Laboratrio) Prof.

Telvio Martins de Mello

O SSH funciona sobre o protocolo SSL, da mesma forma que o HTTPS. Como o uso do SSH feita por administradores e no por usurios leigos, extremamente incomum o uso de certificados digitais neste caso. Durante o primeiro acesso seria prudente que o cliente verificasse se realmente o servidor. Observe no exemplo a seguir as mensagens gerados pelo servidor no primeiro acesso: $ ssh user@10.2.3.4 The authenticity of host '10.2.3.4 (10.2.3.4)' can't be established. RSA key fingerprint is ff:7b:35:74:cd:4c:59:0b:4b:b5:cf:fe:eb:f4:ec:7a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.2.3.4,10.2.3.4' (RSA) to the list of known hosts. Observe que ele pede que confirme que este mesmo o servidor. Neste ponto, se tiver certeza (e pode verificar o fingerprint), ao digitar "yes" a chave do servidor ser armazenada em ~/.ssh/know_hosts. A partir deste momento, nenhuma outra mensagem de aviso ocorrer, salvo se o servidor for reinstalado ou se estiver mesmo sobre um ataque man-in the-middle. Mas a a mensagem ser de recusar a conexo. O objetivo no exatamente descrever o SSH em si, mas sim alguns recursos pouco usados do mesmo. Um deles o login por desafio/resposta usando uma chave pblica e privada.

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. Suponha que o cliente possua um segredo que um nmero inteiro. Podemos cham-lo de senha. O servidor conhece este segredo e permitir login para qualquer um que provar conhec-lo. A autenticao poderia ser da forma clssica: 1. o cliente conta para o servidor a sua senha; 2. o servidor verifica se ele acertou a senha; 3. servidor aceita ou no o login. Porm o mtodo anterior possui um problema: a senha enviada pela rede e algum poder capturar ela e se logar no futuro como sendo o cliente. A mesma soluo anterior, porm baseada em desafio e resposta, poderia ser: 1. servidor envia uma expresso matemtica para cliente resolver usando o seu segredo; 2. cliente resolve a expresso e envia apenas a resposta; 3. servidor, que tambm conhece o segredo, v se cliente acertou a resposta; 4. se acertou, aceita login. Pode parecer a mesma coisa, mas a ideia que a expresso matemtica mude aleatoriamente a cada solicitao. Se algum estiver capturando o trfego no poder usar a

resposta em um login futuro, pois o servidor ir solicitar outra expresso matemtica. Esta expresso pode ser uma simples multiplicao, como demonstra a figura:

O exemplo da figura anterior ilustra como a tcnica, mas no 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. Operaes matemticas que possam ser revertidas no devem ser usadas (diviso reverte a multiplicao, soma reverte a subtrao). Se usar outra operao mais complexa que no possa ser desfeita e com nmeros realmente muito grandes a tcnica poder ser usada. Um exemplo de uma operao matemtica irreversvel a de mdulo, usada no RSA.

O exemplo anterior ainda no pode ser usado. Poderia se os nmeros fossem realmente grandes, com um X em torno de 512 bits de tamanho e o desafio tambm. Com nmeros pequenos um ataque de fora bruta seria possvel, isto , o atacante tentaria todos os possveis valores de X at achar um que encaixe na expresso.

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. No h qualquer problema voc digitar sua senha de acesso. Ela no poder ser lida por mais ningum.Isto porque toda a sesso ssh protegida por um forte algoritmo de criptografia simtrico. Quando voc digita sua senha ela cifrada com este algoritmo e transmitida pela Internet. Algum, em posio de capturar o trfego, no conseguir obter esta senha.

Porm existe ainda uma forma de executar o login sem precisar enviar a senha. E uma forma segura. Mas porque no enviar a senha? Vrios motivos. Primeiro uma segurana a mais, pois agora a senha sequer viaja pela Internet, nem mesmo cifrada. Na hiptese, mesmo remota, de algum estar aplicando um ataque do homem do meio ou de que o servidor estar corrompido, o atacante realmente no ter sua senha, de forma alguma. Um segundo motivo pode ser a facilidade de manuteno. As vezes chato ter que ficar colocando vrias vezes a senha, principalmente se todos fizerem a coisa certa, de no usar a mesma senha em todos os servidores (por experincia pessoal, sou ctico quanto a isto!). Para resolver este problema o ssh possui o login por desafio e resposta atravs do uso de um par de chaves pblica e privada. Voc primeiro deve criar um par de chaves para si, uma chave pblica e privada. A chave privada voc mantm em segredo, guarda-a em segurana. J a chave pblica voc deposita no servidor e diz para o ssh aceitar conexes de qualquer um que prove ser o conhecedor da chave privada. O conceito dos algoritmos assimtricos garante que tudo que foi cifrado com a chave pblica, apenas a chave privada poder abrir. Assim o desafio gerado pelo servidor passa a ser o seguinte: 1. servidor escolhe aleatoriamente uma sequncia de bits grande (exemplo: 2048 bits aleatrios); 2. servidor cifra estes bits com a chave pblica do suposto cliente e envia; 3. cliente precisa dizer ao servidor qual era a sequncia escolhida; 4. cliente s pode fazer isto com sucesso se conhecer a chave privada. Este mtodo ainda melhor que o descrito antes, pois no envolve a senha do usurio em nenhum momento, apenas a chave privada dele. Esta chave passar a ser a parte sensvel e deve ser protegida. Como ningum 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 lembrarse. Pode ser qualquer sequncia de caracteres que ser solicitada pelo seu programa cliente quando voc fizer o login.

Configurao do ssh para autenticao por desafio e resposta


A autenticao por desafio resposta no ssh deve estar habilitada no ssh server. Por minha experincia, todos os servidores ssh j vem com isto habilitado, mas convm verificar. Apenas verifique se a informao PubkeyAuthentication no /etc/ssh/sshd_config no est em "no". Normalmente ela est comentada no arquivo, o que significa que est ativa (o padro permitir): # grep Pubkey /etc/ssh/sshd_config

#PubkeyAuthentication yes

Se ela estiver comentada ou com "yes", tudo bem. Mas se estiver com "no", comente a regra ou mude para "yes" e reinicie o ssh server. Com o servidor configurado para aceitar esta forma de autenticao, deve-se ainda realizar os seguintes passos: 1. criar um par de chaves 2. instalar a tua chave pblica no servidor Usar o usurio fulano como teste neste artigo.

Criao do par de chaves


Usurio fulano tem um login e senha no servidor 10.2.3.4. O cliente a mquina robot. Primeiro ele se logou com seu usurio e senha, s para testar: $ ssh 10.2.3.4 The authenticity of host '10.2.3.4 (10.2.3.4)' can't be established. RSA key fingerprint is fb:a9:ac:b6:3d:3f:42:76:11:cc:44:2f:7f:55:49:97. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.2.3.4' (RSA) to the list of known hosts. Password: Have a lot of fun... Voltando a mquina cliente, a robot, ele cria seu par de chaves com o ssh-keygen. Os parmetros indicam criar chaves usando o algoritmo dsa e com 1024 bits de tamanho. Se voc no especificar o DSA, o algoritmo RSA ser usado. O protocolo RSA no usado por padro no ssh e no funcionar a menos que voc coloque o parmetro RSAAuthentication yes no /etc/ssh/sshd_config. Este desabilitado por padro. $ ssh-keygen -b 1024 -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/fulano/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/fulano/.ssh/id_dsa. Your public key has been saved in /home/fulano/.ssh/id_dsa.pub. The key fingerprint is: 4e:e4:ab:5c:5d:06:58:83:95:4a:77:1d:a0:7d:e7:ba fulano@ robot The key's randomart image is:
+--[ DSA 1024]----+ | o+..o.. | | ooo+. . | | .ooo.. . .| | o. . . o | | S o .| | o o o . | | + . . | | . o . | | o E | +-----------------+

Quando ele perguntar "Enter file in which to save the key (/home/fulano/.ssh/id_dsa): " simplesmente d um enter aceitando esta sugesto.

Como frase de passagem colocar "teste de chave". Pode ser qualquer coisa, mas tome cuidado pois voc deve digitar exatamente a mesma coisa quando solicitado.

Instalao da chave pblica no servidor


A instalao da chave pblica no servidor consiste em simplesmente colocar ela dentro do arquivo ~/.ssh/authorized_keys. Este arquivo pode ter vrias chaves pblicas, no apenas uma. Para realizar esta tarefa o usurio fulano precisar logar-se no servidor, usando ainda sua senha. A chave pblica criada est em ~/.ssh/id_dsa.pub no cliente e home do fulano. Ela texto puro (base64) logo pode-se at dar um cat nela: $ cat id_dsa.pub ssh-dss AAAAB3NzaC1kc3MAAACBAKaOHlNYzozRRr0Ub1kAi/mBap55fQCda0t4T4rZnskdq X /gMnKvLP8B514b3Oq8exNCkTym6nyv1LyxxG1VmhpjKN8N8eDaErp/8qEif/GvH3HaF x4GJBWFed4Z6K9HkxsBy2yFwfcBmkvGFP3ggMwhBnKYFf7DSa9/0QzHDDx3AAAA FQDEb5c3RMsEo8xU6YsvVXnIlJteLQAAAIA+3Oa2X2oW2gprZkCRe7JE +KWvH+O9xjep/7l6iGFww9IDj35VgEHMzAr6LPvw+rAOB1P5qoXZr3hbTU6pzfHiSLy 6UD G+LzHLRbyImZOH/p+n7hWtEfZs6mO5ZuJFxO3fStQKWy0r48XUEaduHY5PGQc+sa/f pjyS2BPToM46XgAAAIAzsUHfOZnFhGK5cmMGjEFyjQBIKqYxRo3pR2H0au/ObwrK an6rCEqWropJElI234AeIymOS2h4Hr3lHnbmyXsxxCt14xqE7ZQlq5X7DV2QCl 0PUcgGlbVSLNTGLXapW1KN2tiBv7u8Q0agNgZ3ek3XHTKtZ6jVm0eb/ACsg0D+Sw= = fulano@ robot No faa o mesmo para a chave privada, pois ela no em formato texto, binrio. Ento, basta pegar esta sequncia esquisita de caracteres e copi-la, assim como est, para o servidor. No Gnome pode-se at mesmo usar o recurso de copiar e colar do sistema, como demonstra a sequncia de imagens.

Selecionando a chave pblica no cliente, arquivo ~/.ssh/id_dsa.pub e usando o "Copy" do prprio Gnome.

Aps, loga-se no servidor 10.2.3.4 ainda usando sua senha, e coloca-se a chave dentro do arquivo authorized_keys em ~/.ssh. No caso eu usei o simples cat com redirecionamento (cat >> authorized_keys).

Ao final, aps colar, deve-se pressionar Control+D e o arquivo est com a chave pblica. Na imagem, aps o trmino, executar um cat para verificar. Outras tantas formas podem ser usadas para obter-se o mesmo resultado, como simplesmente editar o arquivo authorized-keys com algum editor qualquer. O fato que ele deve ter a chave pblica. Por fim, aps a instalao, pode-se verificar se est funcionando. fulano sai do servidor e tentase logar novamente: $ ssh 10.2.3.4 Enter passphrase for key '/home/fulano/.ssh/id_dsa': Last login: Mon Jul 27 13:40:02 2009 from 10.1.0.10 Have a lot of fun... Agora ele pediu a frase de passagem que protege a chave pblica. No caso tem que digitar o"teste de chave" para poder se logar.

Concluso
O uso desta forma de autenticao considerado mais seguro que com usurio e senha. Porm a maior vantagem, na minha opinio, ser bem mais prtico. Prtico porque voc pode colocar senhas diferentes em seus servidores e logar-se neles apenas por desafio e resposta, decorando apenas a sua frase de passagem. Pode colocar sua chave pblica em todas as mquinas Linux que voc deseja acessar.