Autenticação de dois fatores para SSH

SSH “Secure Shell” é um protocolo de rede para estabelecer uma conexão segura entre hosts, padrão na porta 22 (que é melhor alterar). Clientes SSH e servidores SSH estão disponíveis para a maioria dos sistemas operacionais. Quase qualquer outro protocolo de rede funciona dentro do SSH, ou seja, você pode trabalhar remotamente em outro computador, transmitir um fluxo de áudio ou vídeo por um canal criptografado, etc. Além do mais, via proxy SOCKS em um host remoto você pode se conectar a outros hosts em nome deste host remoto.

A autenticação ocorre por meio de uma senha, mas os desenvolvedores e administradores de sistema tradicionalmente usam chaves SSH. O problema é que a chave privada pode ser roubada. Adicionar uma senha teoricamente protege contra roubo da chave privada, mas na prática, ao encaminhar e armazenar chaves em cache, elas ainda pode ser usado sem confirmação. A autenticação de dois fatores resolve esse problema.

Como implementar a autenticação de dois fatores

Desenvolvedores do Honeycomb publicaram recentemente instruções detalhadas, como implementar a infraestrutura apropriada no cliente e no servidor.

As instruções pressupõem que você tenha um determinado host básico aberto à Internet (bastião). Você deseja se conectar a esse host a partir de laptops ou computadores via Internet e acessar todos os outros dispositivos localizados atrás dele. O 2FA garante que um invasor não possa fazer o mesmo, mesmo que obtenha acesso ao seu laptop, por exemplo, instalando malware.

A primeira opção é OTP

OTP - senhas digitais de uso único, que neste caso serão utilizadas para autenticação SSH junto com a chave. Os desenvolvedores escrevem que esta não é a opção ideal, porque um invasor pode criar um bastião falso, interceptar seu OTP e usá-lo. Mas é melhor que nada.

Neste caso, no lado do servidor, as seguintes linhas são escritas na configuração do Chef:

  • metadata.rb
  • attributes/default.rb (do attributes.rb)
  • files/sshd
  • recipes/default.rb (copiar de recipe.rb)
  • templates/default/users.oath.erb

Qualquer aplicativo OTP é instalado no lado do cliente: Google Authenticator, Authy, Duo, Lastpass, instalado brew install oath-toolkit ou apt install oathtool openssl, então uma string (chave) aleatória de base16 será gerada. Ele é convertido para o formato Base32 usado pelos autenticadores móveis e importado diretamente para o aplicativo.

Como resultado, você pode se conectar ao Bastion e ver que agora ele requer não apenas uma senha, mas também um código OTP para autenticação:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

A segunda opção é autenticação de hardware

Nesse caso, o usuário não é obrigado a inserir o código OTP todas as vezes, pois o segundo fator passa a ser o dispositivo de hardware ou biometria.

Aqui a configuração do Chef é um pouco mais complicada e a configuração do cliente depende do SO. Mas depois de concluir todas as etapas, os clientes no MacOS podem confirmar a autenticação no SSH usando uma senha e colocando o dedo no sensor (segundo fator).

Proprietários de iOS e Android confirmam login pressionando um botão no seu smartphone. Esta é uma tecnologia especial da Krypt.co, que é ainda mais segura que o OTP.

No Linux/ChromeOS existe uma opção para trabalhar com tokens USB YubiKey. Claro, um invasor pode roubar seu token, mas ele ainda não sabe a senha.

Fonte: habr.com

Adicionar um comentário