Neste tutorial, vamos mostrar-lhe como configurar o seu VPS para utilizar autenticação de dois fatores em ligações SSH normais e logins de consola com o Google Authenticator.
O que é a Autenticação de Dois Fatores?
“A autenticação de um único fator” implica “um elemento que o utilizador conhece” ou “um elemento que o utilizador possui”. Por exemplo, a autenticação através de uma senha é uma forma de “elemento que o utilizador conhece”, representando, assim, um único fator de autenticação. Já a autenticação de dois fatores exige a apresentação simultânea de “um elemento que o utilizador conhece” e “um elemento que o utilizador possui”. Uma abordagem comum para atingir essa dupla autenticação é a utilização de chaves SSH. Para obter sucesso, o utilizador deve possuir tanto o ficheiro de chave privada SSH quanto conhecer a frase de segurança necessária para desbloquear essa chave privada SSH. Caso alguém esteja a observar por cima do ombro do utilizador e consiga visualizar a introdução da frase de segurança da chave SSH, ou caso alguém obtenha o acesso ao ficheiro da chave privada SSH, nenhum destes elementos, isoladamente, será suficiente. Será necessário conhecer a frase de segurança e possuir o ficheiro da chave para obter sucesso na autenticação.
O que é que isto soluciona ?
O problema com as chaves privadas SSH reside no facto de ser necessário transportar o ficheiro correspondente consigo. Se estiver a efetuar sempre o acesso a partir de casa ou de um único computador portátil, esta questão pode não se colocar. Contudo, se pretender aceder a partir da casa de um amigo, do trabalho ou de uma biblioteca, surgem desafios. Será necessário transportar consigo a chave privada num dispositivo USB ou armazená-la na nuvem, opções que podem não ser as mais ideais. Existe alguma forma de exigir “algo que possui” sem necessidade de aceder a um ficheiro? A resposta a esta questão é afirmativa, com a utilização do Google Authenticator.
Outra problemática relaciona-se com o acesso à consola. O seu fornecedor de VPS disponibiliza o acesso à consola como uma alternativa para aceder ao seu VPS caso não consiga fazê-lo através do SSH (por exemplo, se ocorrerem problemas nas regras do firewall). Neste cenário, não é possível utilizar um ficheiro de chave SSH. Isso implica que o acesso a todos os seus VPS fornecidos por esse prestador depende da palavra-passe que configurou para o painel de controlo do fornecedor. Pior ainda, por vezes essa palavra-passe é enviada por email em texto claro! Isto significa também que, se alguém tiver acesso à sua conta de email, poderá efetuar uma reposição da palavra-passe, recuperar a palavra-passe do painel de controlo e comprometer todos os seus VPS. No entanto, é possível colmatar esta vulnerabilidade com o Google Authenticator.
O que é o Google Authenticator ?
Neste sistema, em vez de usar um ficheiro de chave, o seu “algo que sabe” é a aplicação Google Authenticator. A cada 30 segundos, o Authenticator exibe um novo número de 6 dígitos. Através de algoritmos matemáticos criptográficos, o seu VPS sabe qual é esse número. Quando faz login, é solicitado que introduza este número após inserir a sua senha Unix.
Para esclarecer, ninguém mais pode adivinhar facilmente este número, e o número é válido apenas por 30 segundos. Portanto, mesmo que alguém veja o número, só tem 30 segundos para tentar reutilizá-lo. Pode até evitar isso limitando a velocidade dos logins, de forma que o número só possa ser usado uma vez.
Configurando o Google Authenticator num VPS
Vou usar uma máquina virtual Debian 10 completamente nova, à qual dei o nome de twofactor.homeserver. Após a criação da imagem, vou configurar o módulo PAM (Pluggable Authentication Module) para o Google Authenticator e reconfigurar o sshd. O PAM permite configurar requisitos para qualquer tipo de autenticação, como login, sudo, etc. Neste caso, vamos configurar a autenticação sshd que requer tanto a senha Unix quanto o Google Authenticator.
apt-get update
apt-get -y install libpam-google-authenticator
O Google Authenticator requer sincronização de tempo, por isso vamos garantir que o VPS sempre tenha a hora correta. Vamos usar o ntpd (o daemon do Protocolo de Hora da Rede) para esse fim.
apt-get -y install ntp
systemctl start ntp
systemctl enable ntp
O NTP não depende da zona horária, mas se ainda não o fez, pode configurar a sua zona horária aqui.
dpkg-reconfigure tzdata
Ou, se conhecer o nome da zona horária que deseja utilizar:
timedatectl set-timezone Europe/Lisbon
Executando o Google Authenticator
Agora, vou alternar para um utilizador que será utilizado para efetuar o login (twofactor) e executar a configuração do Google Authenticator.
google-authenticator
#Do you want authentication tokens to be time-based (y/n) y
Responda “sim” a esta pergunta. Agora, um código QR bastante interessante será exibido no seu terminal para que o possa ler com o seu telemóvel.
Vamos configurar a aplicação enquanto o código QR ainda está no seu ecrã.
Configurando a Aplicação Google Authenticator
Para configurar a aplicação Google Authenticator no seu dispositivo móvel, siga estes passos:
- No seu dispositivo móvel, faça o download e instale a aplicação “Google Authenticator” a partir da loja de aplicações apropriada para o seu sistema operativo (iOS ou Android).
- Após a instalação, abra a aplicação.
- Toque na opção para adicionar uma nova conta ou configurar a autenticação de dois fatores.
- Selecione a opção “Lêr código de barras” ou “Ler código QR” na aplicação.
- Utilize a câmara do seu dispositivo móvel para escanear o código QR que foi exibido no seu terminal durante a configuração do Google Authenticator no VPS. A aplicação reconhecerá o código e associá-lo-á à sua conta.
- Aguarde alguns segundos enquanto a aplicação verifica o código e gera códigos de autenticação.
- Após a leitura bem-sucedida do código QR, a aplicação Google Authenticator começará a gerar códigos de autenticação de dois fatores a cada 30 segundos.
- Agora, sempre que fizer login no seu VPS, além da sua senha Unix, precisará também de inserir o código gerado pelo Google Authenticator no seu dispositivo móvel.
Assegure-se de manter o seu dispositivo móvel seguro, uma vez que agora é uma parte crítica do processo de autenticação para aceder ao seu VPS.
Concluindo a Configuração da VPS
Agora, volte para a sua sessão de terminal. Copie e guarde a chave secreta, o código de verificação e os códigos de emergência num local seguro. Inserir essas informações no seu gestor de palavras-passe é uma excelente escolha.
Agora, continue a responder às perguntas:
- Deseja que eu atualize o ficheiro “/home/twofactor/.google_authenticator”? (s/n) s
Responda “sim”! - Deseja proibir o uso múltiplo do mesmo token de autenticação? Isso restringe-o a um login a cada 30 segundos, mas aumenta as chances de detetar ou mesmo prevenir ataques de intermediários (s/n)
A escolha é sua, mas dizer “sim” é mais seguro. - Por padrão, um novo token é gerado a cada 30 segundos pela aplicação móvel. Para compensar eventuais diferenças de tempo entre o cliente e o servidor, permitimos um token extra antes e depois do tempo atual. Isso permite uma discrepância de tempo de até 30 segundos entre o servidor de autenticação e o cliente. Se tiver problemas com a sincronização de tempo fraca, pode aumentar a janela de códigos permitidos de 3 (um código anterior, o código atual, o próximo código) para 17 (os 8 códigos anteriores, o código atual e os 8 próximos códigos). Isso permitirá uma discrepância de tempo de até 4 minutos entre o cliente e o servidor. Deseja fazer isso? (s/n)
Normalmente, isso não é necessário. Responda “não”. - Se o computador no qual está a efetuar o login não estiver protegido contra tentativas de login por força bruta, pode ativar o limite de taxas para o módulo de autenticação. Por padrão, isso limita os atacantes a não mais do que 3 tentativas de login a cada 30 segundos. Deseja ativar o limite de taxas? (s/n)
A escolha é sua, mas dizer “sim” é a opção mais segura.
Configuração do PAM e do sshd_config
Agora que configurou o Google Authenticator e respondeu às perguntas, é altura de ajustar as configurações do Pluggable Authentication Module (PAM) e do ficheiro sshd_config.
- Comecemos por configurar o PAM para utilizar a autenticação do Google Authenticator. Abra o ficheiro de configuração do PAM:
nano /etc/pam.d/sshd
- No ficheiro que se abrir, adicione a seguinte linha no início para ativar o uso do Google Authenticator:
auth required pam_google_authenticator.so
- Guarde as alterações e saia do editor.
- Em seguida, vamos ajustar as configurações do SSH. Abra o ficheiro de configuração do SSH:
nano /etc/ssh/sshd_config
- Encontre a linha que diz “ChallengeResponseAuthentication” e assegure-se de que esteja definida como “yes”:
ChallengeResponseAuthentication yes
- Se a linha não existir, adicione-a.
- Guarde as alterações e saia do editor.
- Reinicie o serviço SSH para aplicar as alterações:
systemctl restart ssh
Agora, o SSH no seu VPS está configurado para exigir autenticação de dois fatores utilizando o Google Authenticator. Sempre que fizer login, será solicitado a fornecer a sua senha Unix e o código gerado pelo Google Authenticator no seu dispositivo móvel. Certifique-se de que tudo está a funcionar como esperado e de que tem os códigos de backup guardados num local seguro.