Em um cliente ssh, você primeiro autentica o servidor e, ao fazê-lo, diz "Confio que posso dizer minha senha para este servidor". Da próxima vez, preste mais atenção à mensagem que você viu primeiro: "A autenticidade do X não pode ser estabelecida. A impressão digital da chave RSA é Y Você tem certeza de que Z? (Sim / não)" Esta pergunta irritante não seria feita se você deveria para responder automaticamente sim sempre.
Kbanczyk
6
É possível definir PasswordAuthentication nopor padrão no OpenSSH e habilitá-lo (se / quando necessário) para servidores confiáveis. Combinado com a verificação estrita da chave do host, isso deve protegê-lo principalmente de expor sua senha, a um custo por conveniência, é claro.
Hbbs #
6
@kubanczyk, se você quiser fazer o SSH para "internal-www.my-company.com", mas digitar acidentalmente "ssh www.my-company.com", esse prompt não o protegerá - é provável que os dois servidores estejam na sua lista confiável, apenas um deles é gerenciado por você e o outro por terceiros.
Mark
@hobbs, ChallengeResponseAuthentication notambém, eu acho
ilkkachu
Respostas:
215
Simplificando: sim
Mais detalhes...
Se você se conectar à minha máquina, não saberá se estou executando um sshservidor normal ou um servidor que foi modificado para gravar a senha que está sendo passada.
Além disso, eu não precisaria necessariamente modificar sshd, mas poderia escrever um módulo PAM (por exemplo, usando pam_script), que receberá sua senha.
Então sim. NUNCA envie sua senha para um servidor não confiável. O proprietário da máquina poderia facilmente configurá-la para registrar todas as senhas tentadas.
(Na verdade, isso não é incomum no mundo da infosec; configure um servidor honeypot para registrar as senhas tentadas)
Corrigir. Por padrão, o padrão sshdé que não log senhas. (Se você digitar sua senha como um nome de login, ela será registrada, mas isso é outro problema). O padrão sshdé uma ferramenta de segurança, e assim não vai credenciais de log como este :-)
Stephen Harris
116
No entanto, outra razão para usar pares de chaves públicas / privadas ...
gerrit
3
Há algum tempo que me pergunto sobre o uso de senhas e recentemente me ocorreu que tentar fazer logon nos servidores errados seria uma boa maneira de revelar minha senha a um administrador de servidor mal-intencionado.
vfclists
10
O @vfclists ao fazer logon no servidor errado também é exatamente o motivo pelo qual o cliente sshd armazena a impressão digital de cada servidor. Quando você se conecta pela primeira vez, aceita a impressão digital e, mais tarde, se não corresponder, recebe um aviso gigante que você deve prestar atenção.
hometoast
44
Melhor conselho: nunca use a autenticação de senha para ssh. O protocolo possui autenticação pubkey por muito boas razões; use-o!
R ..
52
Sim.
A senha é enviada após o estabelecimento da conexão criptografada, mas o servidor remoto obtém a senha em texto sem formatação.
Se você se importa com isso, a melhor e mais fácil solução é usar as chaves SSH.
Se você tiver máquinas que não podem aceitar chaves, uma solução seria criar uma ferramenta que armazene suas senhas com segurança e use sshpasspara sempre enviar a senha correta, dependendo do servidor ao qual você está se conectando.
Agora, a razão pela qual a senha é enviada em texto sem formatação é que ela deixa todas as decisões de manipulação e armazenamento para a extremidade remota, e o cliente pode ser totalmente burro. Existem alguns formatos diferentes de hash de senha (armazenamento) usados nos sistemas Linux e BSD nos últimos dez anos ( crypt (3) ), nenhum dos quais requer suporte do cliente.
Embora isso seja parcialmente devido à história (ou seja, sempre foi assim). Existem melhores protocolos de autenticação de resposta a desafios que podem ser usados mesmo com senhas. Por exemplo , SRP , que fornece às partes um segredo compartilhado durante a autenticação. Foi implementado para alguns servidores SSH, mas o patch para o OpenSSH é para uma versão (muito) antiga.
O problema com os protocolos de desafio-resposta para autenticação de senha é que alguns deles exigem que o servidor armazene a senha em texto sem formatação. Se o protocolo de resposta ao desafio permitir que o servidor armazene uma senha com hash, provavelmente será necessário um algoritmo de hash muito específico.
kasperd
8
As senhas geralmente são enviadas em "texto simples" (ou seja, não na verdade, mas apenas com a proteção que o SSH | TLS | subjacente que qualquer conexão fornece). Se um sistema pedisse que as senhas fossem hash do lado do cliente e o hash fosse enviado, os servidores não teriam como derivar a senha real e , em vez disso, concederiam acesso a qualquer pessoa que pudesse fornecer o hash da senha , tornando o hash equivalente à senha. .
Blacklight Shining
1
@BlacklightShining As provas de senha de conhecimento zero existem, mas não são usadas no SSH, porque não há como usar o banco de dados de senhas padrão para elas e não há nenhum ponto real para usá-las, em vez da autenticação baseada em chave.
usar o seguinte código
onde posso ver essas senhas usadas para autenticar? Eles não estão em /var/log/auth.log, onde então?
アレックス
O OpenSSH não registrará senhas, com falha ou não. (Não estou muito familiarizado com outros servidores SSH.) Em quase todas as instalações legítimas, qualquer valor que isso possa fornecer seria superado pelo risco inerente ao registro intencional de senhas - algumas das quais podem ter sido fornecidas por usuários legítimos que fizeram um erro de digitação. ou tentou uma senha errada, mas certa para outra coisa - em texto não criptografado. Se você tiver um bom motivo para fazer isso, seria fácil corrigir o OpenSSH.
Musicinmybrain 18/09/16
10
Para construir sobre a resposta de Stephen Harris, aqui está uma visão em tempo real que mostrei que mostra o que um script de autenticação PAM modificado seria capaz de capturar ao conectar-se a uma caixa por ssh (uma espécie de honeypot). Eu uso uma versão modificada da biblioteca PAM lib-storepw.
As respostas que são principalmente links são desaprovadas no caso de o link ficar indisponível (parece que você mantém este site pessoalmente, mas ainda assim). Você deve descrever um pouco como você conseguiu isso com seu script de autenticação para leitores.
Centimane 17/09/16
não está mais funcionando, enviei uma string enorme como senha, acho que pode ter quebrado, desculpe: - /
scottydelta 18/09/16
@scottydelta Embora eu não tenha analisado, pode haver um limite de buffer no tamanho da senha que o módulo PAM ou o próprio daemon SSH pode aceitar em uma tentativa de autenticação. O site ainda está funcionando como pretendia, embora atenda ao limite de buffer aceito pelo módulo sshd ou PAM, se este for realmente o caso.
Willie S.
Fora de interesse, a fonte do seu lib-storepw modificado está disponível para outras pessoas usarem?
Tim Fletcher
2
SSH é um protocolo que requer confiança mútua. Essa é a razão pela qual o cliente OpenSSH mantém um arquivo known_hosts, para implementar sua confiança no esquema de primeiro uso.
Quando você tenta fazer logon em um servidor SSH, independentemente de quem forneceu o software ou de quais dados ele está configurado para registrar, você está participando de algum procedimento de autenticação. Ao usar a autenticação por senha, você está transmitindo sua senha para esse servidor. Esse é um dos motivos pelos quais a criptografia assimétrica (chave pública, certificados) é recomendada - a criptografia de chave pública reduz bastante o risco de divulgar suas credenciais. (Embora isso possa não protegê-lo de um ataque do MitM se você estiver usando o encaminhamento ssh-agent ou algum esquema semelhante.)
O SSH não requer confiança mútua, ou pelo menos não confiança simétrica. É importante ser preciso: known_hosts é sobre autenticidade, não confiança. Como você aponta, colocar uma chave pública em um host menos confiável é seguro. De fato, usar uma senha para fazer login também é "seguro", desde que você não reutilize essa senha. (É tão seguro quanto o grau em que você confia no servidor, é claro.) Até os logins ssh baseados em host dependem da confiança assimétrica.
PasswordAuthentication no
por padrão no OpenSSH e habilitá-lo (se / quando necessário) para servidores confiáveis. Combinado com a verificação estrita da chave do host, isso deve protegê-lo principalmente de expor sua senha, a um custo por conveniência, é claro.ChallengeResponseAuthentication no
também, eu achoRespostas:
Simplificando: sim
Mais detalhes...
Se você se conectar à minha máquina, não saberá se estou executando um
ssh
servidor normal ou um servidor que foi modificado para gravar a senha que está sendo passada.Além disso, eu não precisaria necessariamente modificar
sshd
, mas poderia escrever um módulo PAM (por exemplo, usandopam_script
), que receberá sua senha.Então sim. NUNCA envie sua senha para um servidor não confiável. O proprietário da máquina poderia facilmente configurá-la para registrar todas as senhas tentadas.
(Na verdade, isso não é incomum no mundo da infosec; configure um servidor honeypot para registrar as senhas tentadas)
fonte
sshd
é que não log senhas. (Se você digitar sua senha como um nome de login, ela será registrada, mas isso é outro problema). O padrãosshd
é uma ferramenta de segurança, e assim não vai credenciais de log como este :-)Sim.
A senha é enviada após o estabelecimento da conexão criptografada, mas o servidor remoto obtém a senha em texto sem formatação.
Se você se importa com isso, a melhor e mais fácil solução é usar as chaves SSH.
Se você tiver máquinas que não podem aceitar chaves, uma solução seria criar uma ferramenta que armazene suas senhas com segurança e use
sshpass
para sempre enviar a senha correta, dependendo do servidor ao qual você está se conectando.Agora, a razão pela qual a senha é enviada em texto sem formatação é que ela deixa todas as decisões de manipulação e armazenamento para a extremidade remota, e o cliente pode ser totalmente burro. Existem alguns formatos diferentes de hash de senha (armazenamento) usados nos sistemas Linux e BSD nos últimos dez anos ( crypt (3) ), nenhum dos quais requer suporte do cliente.
Embora isso seja parcialmente devido à história (ou seja, sempre foi assim). Existem melhores protocolos de autenticação de resposta a desafios que podem ser usados mesmo com senhas. Por exemplo , SRP , que fornece às partes um segredo compartilhado durante a autenticação. Foi implementado para alguns servidores SSH, mas o patch para o OpenSSH é para uma versão (muito) antiga.
fonte
Para construir sobre a resposta de Stephen Harris, aqui está uma visão em tempo real que mostrei que mostra o que um script de autenticação PAM modificado seria capaz de capturar ao conectar-se a uma caixa por ssh (uma espécie de honeypot). Eu uso uma versão modificada da biblioteca PAM lib-storepw.
https://livesshattack.net
https://livesshattack.net/about
fonte
SSH é um protocolo que requer confiança mútua. Essa é a razão pela qual o cliente OpenSSH mantém um arquivo known_hosts, para implementar sua confiança no esquema de primeiro uso.
Quando você tenta fazer logon em um servidor SSH, independentemente de quem forneceu o software ou de quais dados ele está configurado para registrar, você está participando de algum procedimento de autenticação. Ao usar a autenticação por senha, você está transmitindo sua senha para esse servidor. Esse é um dos motivos pelos quais a criptografia assimétrica (chave pública, certificados) é recomendada - a criptografia de chave pública reduz bastante o risco de divulgar suas credenciais. (Embora isso possa não protegê-lo de um ataque do MitM se você estiver usando o encaminhamento ssh-agent ou algum esquema semelhante.)
fonte