O ssh envia a senha pela rede?

5

Basicamente, a questão toda está no título: O ssh envia a senha pela rede? Presumindo, claro, que o login via nome de usuário e senha é usado.

Estou perguntando porque, se o ssh não enviar a senha pela rede, um homem no meio não poderá obter a senha do usuário, mesmo que o usuário adicione o host alegado ao arquivo known_hosts.

Alguém disse que é necessário, então escrevi um contra-exemplo em um comentário. Como a questão de como mais poderia funcionar agora surgiu repetidamente, estou copiando esse comentário aqui.

O servidor pode informar ao cliente qual hash usar. [O mesmo que é usado para hash as senhas no arquivo shadow do servidor.] O cliente pode então calcular o hash ψ que deve estar no arquivo shadow do servidor, mas vamos chamar aquele no servidor ψ '. Então, tanto o servidor quanto o cliente sabem ψ. O cliente pode então escolher um sal aleatório σ um envio (hash (ψ.σ), σ) (onde . é o operador de concatenação) para o servidor. O servidor, em seguida, hashes ψ'.σ e verifica se o primeiro elemento da tupla recebida do cliente corresponde a esse hash. Em caso afirmativo, o cliente sabe a senha.

    
por UTF-8 23.07.2016 / 21:14

5 respostas

4

Se você estiver usando a autenticação por senha, o SSH enviará a senha pela rede. A conexão é criptografada, para que os espiões não possam ver a senha. A conexão é autenticada, desde que você não clique cegamente por meio de uma mensagem "A autenticidade de ... não pode ser estabelecida", portanto, sua senha não será enviada para ninguém, exceto o servidor legítimo.

A resposta chata a "por que" é que isso é o que o protocolo SSH exige.

A resposta menos chata é que a autenticação por senha tem que funcionar dessa maneira. Existem maneiras de realizar autenticação que não funcionam dessa maneira, mas isso não é mais uma autenticação simples de senha.

A maioria dos protocolos de autenticação mais avançados do que a simples autenticação de senha tem a boa propriedade de que o cliente não envia nenhum dado secreto ao servidor que um servidor mal-intencionado poderia usar para representar o usuário em algum terceiro servidor. Com SSH autenticação de chave pública , o método de autenticação SSH mais comum que não seja senhas, isso funciona porque o cliente envia uma assinatura (exigindo a chave privada) de dados que inclui o identificador de sessão; se o servidor mal-intencionado tentasse autenticar-se em um terceiro servidor, ele teria que gerar uma assinatura de dados incluindo um identificador de sessão diferente, o que não seria possível sem a chave privada que permanece no cliente.

Observe que, se você usar a autenticação de chave pública e precisar digitar uma senha para usar a chave, essa não será uma autenticação baseada em senha. A senha para usar a chave é usada exclusivamente no lado do cliente, para ler a chave do arquivo de chave. Ao usar a autenticação de chave pública, o servidor não sabe ou se importa se a chave foi armazenada em um arquivo criptografado.

A autenticação por senha requer o envio da senha para o servidor. Enviar um hash da senha em vez da senha em si não ajuda, porque então a senha se torna o hash: um invasor não precisaria encontrar a senha real, apenas o hash. Um atacante poderia atacar encontrando a senha real, portanto não há melhoria. Mas se o atacante encontrou o hash, mas não a senha, em seu esquema proposto, isso seria suficiente. Em contraste, com a autenticação baseada em senha normal, o invasor deve saber a senha, sabendo que o hash não é bom o suficiente e, se a senha for strong o suficiente, o invasor não conseguirá localizar a senha do hash. Na prática, o motivo pelo qual o invasor pode saber o hash, mas não a senha, é que o invasor conseguiu extrair o banco de dados de hashes de senha do servidor, possivelmente de um backup desprotegido ou de uma vulnerabilidade no servidor. Essas vulnerabilidades nos sites são as notícias mais frequentes.

Seu protocolo proposto é menos bom que o padrão. Não role sua própria criptografia!

    
por 25.07.2016 / 00:19
12

Sim. A senha é enviada pela conexão criptografada, mas é em texto sem formatação para o servidor remoto.

A maneira usual de autenticar é o servidor calcular um hash da senha e compará-lo com um valor salvo no servidor. Existem várias maneiras de salvar hashes e, com implementações atuais, o cliente não sabe o que o servidor usa. ( veja, por exemplo, a página crypt man ). (Mesmo se isso acontecesse, simplesmente enviar um hash da senha tornaria o hash equivalente à senha de qualquer maneira).

Além disso, se o servidor usa o PAM, os módulos PAM podem implementar autenticação com praticamente qualquer método, alguns dos quais podem exigir a senha em texto sem formatação.

No entanto, a autenticação usando chaves públicas não envia a chave para o host remoto. (Algumas explicações e links sobre isso em uma pergunta sobre segurança.SE )

Existem também algoritmos de autenticação baseados em senha, como SRP , que não exigem o envio da senha em texto simples para a outra extremidade . Embora o SRP pareça ser implementado apenas para o OpenSSH como um patch externo.

    
por 23.07.2016 / 21:22
3

Se você usar um esquema de autenticação baseado em senha, então, yes a senha é passada pela rede para o ponto final ...

Mas é um canal criptografado.

por exemplo

% ssh remotehost
user@remotehost's password: 

bash$ logout

Nesse cenário, a senha foi enviada criptografada pela rede.

É por isso que é muito importante lidar com known_hosts entradas corretamente e prestar muita atenção se você vir a mensagem @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ ! Essa é sua defesa contra um ataque MITM.

    
por 23.07.2016 / 21:23
2

Sim, o ssh envia a senha pela rede, mas depois que a criptografia de ponta a ponta foi negociada. Veja seção 8 de RFC 4252 que diz que uma mensagem de autenticação de senha contém plaintext password in ISO-10646 UTF-8 encoding [RFC3629]

    
por 23.07.2016 / 21:22
0

O SSH envia o ID do usuário e a senha pela rede em texto simples dentro de um canal criptografado. É por isso que quando você conecta um novo host, você é solicitado a aceitar a chave. No caso de um ataque man-in-the-middle com um host conhecido, o SSH se recusará a se conectar até que você remova a chave antiga.

A senha em texto simples está disponível nos pontos finais, no seu computador e no computador remoto. É possível desabilitar a autenticação de senha e, nesse caso, a senha não é solicitada nem enviada ao host remoto.

É mais seguro usar a autenticação baseada em chave com uma chave protegida por senha. Você precisa ter sua chave adicionada ao sistema remoto. A chave pública é um arquivo de texto que pode ser transferido por muitos mecanismos. Ao usar a autenticação baseada em chave, é possível colocar restrições no uso da chave.

    
por 23.07.2016 / 21:25