Estou executando um servidor SSH e ainda estou usando a autenticação de senha simples. Em todos os lugares que leio sobre segurança, sou aconselhado a usar a autenticação de chave pública. Mas não tenho vantagens. Usá-los é, a meu ver, um trabalho inseguro ou muito útil.
Obviamente, se alguém tentar forçar com força bruta o login no meu servidor SSH, a Public-Key será muito mais forte do que qualquer senha. Mas, além disso, é totalmente inseguro.
Os consultores argumentam principalmente que você não precisa se lembrar de uma senha. Quão inseguro é isso? Então, se alguém invadir meu computador, ele não apenas pega meu computador, mas também meu servidor? Se estou usando SSH de vários clientes diferentes, tenho que armazenar as chaves públicas uma em cada uma delas, o que multiplica a possibilidade de que caiam nas mãos falsas. Eu poderia salvá-los em um pendrive que eu carrego comigo, mas ele pode ser perdido e o localizador tem acesso ao meu servidor.
Possivelmente estou melhor servido com autenticação de dois fatores.
Falta algum argumento? Qual é a melhor maneira para mim?
fonte
Respostas:
De qualquer forma, isso é potencialmente verdade com os keyloggers: assim que você faz login no servidor a partir do computador comprometido, eles obtêm a senha.
Mas existem 3 vantagens para as chaves:
1) Autenticação em cache. Digite sua senha uma vez, execute vários comandos ssh. Isso é muito útil se você estiver usando algo que usa ssh como transporte, como scp, rsync ou git.
2) Autenticação escalável. Digite sua senha uma vez, faça login em várias máquinas . Quanto mais máquinas você tiver, mais útil será. Se você possui 100 máquinas, o que você faz? Você não pode usar a mesma senha (a menos que seja um farm de clones) e não consegue se lembrar de muitas. Então, você teria que usar um gerenciador de senhas e voltará ao único ponto de comprometimento. Efetivamente, a senha da chave é o seu gerenciador de senhas.
2b) É dimensionado de outra maneira se você tiver vários administradores usando os mesmos sistemas, porque você pode revogar chaves do usuário A sem precisar informar B, C, D, E, F ... que a senha foi alterada.
(Isso também pode ser feito com contas individuais e sudo, mas você deve provisioná-las de alguma forma)
3) Automação e delegação parcial. Você pode configurar o SSH para executar um comando específico quando uma chave for conectada . Isso permite que um processo automatizado no sistema A faça algo no sistema B sem ter total confiança sem senha entre os dois.
(É um substituto para o rlogin / rsh, que era hilariamente inseguro)
Editar: outra vantagem das chaves públicas, em vez das senhas, é o cenário comum em que o servidor é comprometido por uma vulnerabilidade. Nesse caso, o login com uma senha compromete a senha imediatamente. Fazer login com uma chave não! Eu diria que isso é mais comum do que a área de trabalho de origem do administrador sendo comprometida.
fonte
ssh -A
e a partir daí, fazer login em máquinas que permitem ao público seu host de origem.Se você estiver usando boas senhas, isso pode ser seguro o suficiente. Normalmente, limito o número de servidores acessíveis ao público ao mínimo e permito o SSH de IP (s) específico (s) sempre que possível.
Além disso, você pode proteger suas chaves com senha (senha). Portanto, essa senha deve ser inserida sempre que você precisar fazer login no (s) servidor (es). Ninguém pode usar sua chave, a menos que seja fornecida a senha correta.
Existem posts semelhantes:
fonte
Uma maneira em que a autorização de chave pública é mais segura é quando o invasor consegue ser o intermediário (MitM) entre o computador cliente e o servidor e você não percebe a alteração da chave do host (possivelmente porque não possui a chave antiga, por exemplo, porque é a primeira vez que utiliza este computador cliente específico).
(O mesmo se aplica quando o invasor consegue controlar o servidor e há outros servidores em que as mesmas credenciais funcionam.)
Com a autenticação baseada em senha padrão, você está enviando sua senha (dentro da conexão criptografada) em texto sem formatação, o servidor genuíno normalmente fará o hash e comparará o resultado com um hash armazenado no banco de dados de senhas. Em vez disso, um invasor do MitM pode pegar essa senha, abrir uma conexão com o servidor real e entrar lá ... e encaminhar o conteúdo para você (para que você não perceba nada), ou apenas fazer suas próprias coisas más no seu servidor .
Com a autenticação de chave pública, o cliente está basicamente assinando alguns dados conhecidos pelo servidor e pelo cliente para provar que possui a chave privada e enviando a assinatura ao servidor. Esses dados assinados incluem um identificador de sessão, que depende de números aleatórios escolhidos pelo cliente e pelo servidor e, portanto, é diferente para cada sessão. Se o MitM abrir sua própria conexão SSH com o servidor real, ele terá um ID de sessão diferente e, portanto, a assinatura fornecida pelo cliente não funcionará lá.
Obviamente, como outras respostas já contadas, você precisa manter sua chave privada segura, por exemplo, criptografada com uma senha, ou possível em um dispositivo separado que só cria assinaturas após a digitação do PIN.
fonte
O OpenSSH pode manter sua própria CA para gerenciar chaves de host e cliente SSH e pode usar listas de revogação nelas. Isso pode aumentar a segurança fornecida pela autenticação baseada em chave.
fonte
Você está certo sobre a reivindicação "você não precisa de uma senha". Isso é realmente inseguro no lado do cliente.
O que torna a permissão apenas de chaves públicas para efetuar login muito mais segura é o fato de que não há como restringir o acesso à força bruta no servidor. Tudo o que um invasor pode conseguir é colocar um pouco de carga no servidor - você pode empregar fail2ban para manter isso sob controle.
Para segurança no lado do cliente, você deve proteger a chave privada com uma boa frase secreta. É claro que agora a conexão com o servidor é mais complicada do que com uma senha. Para superar isso, você pode usar o agente ssh para armazenar a chave privada na memória, se pretende se conectar ao servidor várias vezes seguidas. É uma boa prática limitar o tempo durante quanto tempo uma chave deve ser mantida na memória.
fonte
Uma possibilidade para o 2FA para SSH (e uma que requer relativamente pouca configuração / complexidade) é de fato usar uma chave pública e senha.
Acredito que algo como esse
AuthenticationMethods publickey,keyboard-interactive
pode ser adicionado/etc/ssh/sshd_config
para fazer esse trabalho.De maneira mais geral, o problema é mais o fato de as senhas (sozinhas) não serem um ótimo método para autenticação, pois geralmente possuem qualidade duvidosa. Um 'argumento' muito simples para chaves versus senhas é que uma chave geralmente terá pelo menos 2048 bits e muitas vezes mais (para chaves EC, essa seria a força efetiva, e não o tamanho real). Esses bits também são gerados por um mecanismo criptograficamente seguro (ou apropriado).
Uma senha geralmente tem menos de 2048 bits e geralmente não é derivada de uma fonte criptograficamente segura.
Você também pode proteger suas chaves com uma senha, para se proteger contra problemas relacionados a perdê-las (embora alguém possa tentar forçar brutalmente essa senha).
Então, basicamente, as diferenças podem ser bastante transparentes entre chaves e senhas, e o uso de chaves oferece uma senha melhor do que um humano poderia lidar. Isso não quer dizer que sejam uma panacéia, mas, em média, eles fornecem mais segurança do que senhas.
fonte