Como configurar a autenticação de dois fatores em um Raspberry Pi

O Raspberry Pi tornou-se um dispositivo onipresente, o que, infelizmente, o colocou na mira de cibercriminosos e agentes maliciosos. Neste guia, vamos detalhar como você pode reforçar a segurança do seu Pi utilizando a autenticação de dois fatores.

O Fenômeno Raspberry Pi

O Raspberry Pi é um computador de placa única que surgiu no Reino Unido em 2012 com o objetivo de estimular o interesse infantil por experimentação, criação e programação. O modelo inicial era do tamanho de um cartão de crédito e funcionava com um carregador de celular.

Este dispositivo oferece saída HDMI, portas USB, conexão de rede e roda o sistema operacional Linux. A linha de produtos evoluiu e passou a incluir versões ainda menores, criadas para serem integradas em produtos ou operadas como sistemas sem tela. Os preços variam entre US$ 5 para o Pi Zero e US$ 75 para o Pi 4B/8GB.

O sucesso foi notável, com mais de 30 milhões de unidades vendidas globalmente. Entusiastas têm usado esses minúsculos computadores para projetos incríveis e inspiradores, como enviar um para a beira do espaço e trazê-lo de volta em um balão.

Infelizmente, a popularidade de uma plataforma computacional inevitavelmente atrai a atenção de criminosos cibernéticos. É preocupante imaginar quantos dispositivos Pi ainda estão utilizando as configurações de usuário e senha padrão. Se o seu Pi estiver acessível pela internet via SSH, é crucial garantir sua segurança.

Mesmo que você não armazene dados ou softwares sensíveis em seu Pi, protegê-lo é fundamental, pois ele pode ser a porta de entrada para sua rede. Uma vez que um agente malicioso obtém acesso a uma rede, ele pode se movimentar para outros dispositivos de maior interesse.

Autenticação de Dois Fatores (2FA)

A autenticação, ou seja, o processo de acesso a um sistema, requer um ou mais fatores. Esses fatores são categorizados da seguinte forma:

Algo que você sabe: como uma senha ou frase secreta.
Algo que você tem: como um celular, token físico ou chave de segurança.
Algo que você é: uma característica biométrica, como uma impressão digital ou leitura de retina.

A autenticação multifator (MFA) exige uma senha combinada com um ou mais fatores de outras categorias. Neste exemplo, usaremos uma senha e um celular. O celular executará um aplicativo autenticador do Google, e o Pi rodará um módulo de autenticação do Google.

Um aplicativo para celular é sincronizado com o seu Pi através da leitura de um código QR. Isso transfere informações de semente do Pi para o seu celular, assegurando que ambos os algoritmos de geração de números produzam os mesmos códigos simultaneamente. Esses códigos são chamados de senhas de uso único baseadas em tempo (TOTP).

Quando o seu Pi recebe uma solicitação de conexão, ele gera um código. Você usa o aplicativo autenticador no seu celular para visualizar o código atual e, em seguida, seu Pi solicitará sua senha e o código de autenticação. Ambos, a senha e o TOTP, devem ser validados para que a conexão seja estabelecida.

Configurando o Pi

Se você costuma acessar seu Pi via SSH, é provável que ele seja um sistema sem interface gráfica. Por isso, faremos a configuração por meio de uma conexão SSH.

O ideal é estabelecer duas conexões SSH: uma para configuração e testes, e outra como uma salvaguarda. Assim, caso você se bloqueie acidentalmente do seu Pi, ainda terá a segunda conexão SSH ativa. Alterar as configurações de SSH não afeta uma conexão já estabelecida, então você pode usar a segunda para desfazer mudanças e corrigir qualquer problema.

Se o pior acontecer e você ficar completamente bloqueado via SSH, ainda poderá conectar seu Pi a um monitor, teclado e mouse e fazer login em uma sessão normal. Ou seja, você ainda pode acessar o sistema, desde que seu Pi possa operar um monitor. Se isso não for possível, é essencial manter a conexão SSH de segurança aberta até confirmar que a autenticação de dois fatores está funcionando corretamente.

A solução extrema, claro, é reinstalar o sistema operacional no cartão micro SD do Pi, mas vamos tentar evitar isso.

Primeiro, precisamos estabelecer as duas conexões com o Pi. Os comandos para isso seguem o formato:

ssh [email protected]

O nome deste Pi é “cão de guarda”, mas você deve usar o nome do seu dispositivo. Se você alterou o nome de usuário padrão, use-o também; o nosso é “pi”.

Por segurança, digite este comando duas vezes em diferentes janelas de terminal para que você tenha duas conexões com o seu Pi. Depois, minimize uma delas, para que fique fora do caminho e não seja fechada sem querer.

Após se conectar, você verá a mensagem de boas-vindas. O prompt exibirá o nome de usuário (neste caso, “pi”) e o nome do Pi (neste caso, “watchdog”).

Agora, você precisa editar o arquivo “sshd_config”. Para isso, usaremos o editor de texto nano:

sudo nano /etc/ssh/sshd_config

Navegue pelo arquivo até encontrar a seguinte linha:

ChallengeResponseAuthentication no

Substitua “no” por “yes”.

Pressione Ctrl+O para salvar as alterações no nano e, em seguida, Ctrl+X para fechar o arquivo. Use o seguinte comando para reiniciar o daemon SSH:

sudo systemctl restart ssh

Agora você precisa instalar o autenticador do Google, que é uma biblioteca Módulo de Autenticação Plugável (PAM). O aplicativo (SSH) chamará a interface Linux PAM, e esta localizará o módulo PAM apropriado para atender ao tipo de autenticação solicitado.

Digite o seguinte:

sudo apt-get install libpam-google-authenticator

Instalando o Aplicativo

O aplicativo Google Authenticator está disponível para iPhone e Android, então instale a versão apropriada para o seu celular. Você também pode usar o Authy ou outros aplicativos que suportam esse tipo de código de autenticação.

Configurando a Autenticação de Dois Fatores

Na conta que você usará para se conectar ao Pi via SSH, execute o seguinte comando (sem o prefixo sudo):

google-authenticator

Você será perguntado se deseja que os tokens de autenticação sejam baseados em tempo; digite Y e pressione Enter.

Um código de Resposta Rápida (QR) será gerado, mas ele poderá aparecer “embaralhado” por ser mais largo do que a janela do terminal de 80 colunas. Arraste a janela para visualizar o código completo.

Você também verá alguns códigos de segurança abaixo do código QR. Eles são armazenados em um arquivo chamado “.google_authenticator”, mas é recomendável que você faça uma cópia deles agora. Se você perder a capacidade de obter um TOTP (por exemplo, se perder seu celular), poderá usar esses códigos para se autenticar.

Você precisará responder a quatro perguntas. A primeira é:

Do you want me to update your "/home/pi/.google_authenticator" file? (y/n)

Digite Y e pressione Enter.

A próxima pergunta pergunta se você quer evitar o uso repetido do mesmo código em um intervalo de 30 segundos.

Digite Y e pressione Enter.

A terceira questão pergunta se você deseja ampliar a janela de aceitação dos tokens TOTP.

Digite N e pressione Enter.

A última pergunta é: “Deseja habilitar a limitação de taxa?”

Digite Y e pressione Enter.

Você retornará ao prompt de comando. Se necessário, arraste mais a janela do terminal e/ou role para cima na janela do terminal para que possa visualizar todo o código QR.

No seu celular, abra o aplicativo autenticador e toque no sinal de mais (+) no canto inferior direito da tela. Selecione “Escanear um código QR” e, em seguida, digitalize o código QR na janela do terminal.

Uma nova entrada aparecerá no aplicativo autenticador com o nome do host do Pi, e um código TOTP de seis dígitos será exibido abaixo dele. Ele é mostrado como dois grupos de três dígitos para facilitar a leitura, mas você deve digitá-lo como um número de seis dígitos.

Um círculo animado ao lado do código indica por quanto tempo o código é válido: um círculo completo indica 30 segundos, um semicírculo indica 15 segundos, e assim por diante.

Unindo Todas as Peças

Temos mais um arquivo para editar. Precisamos informar ao SSH qual módulo de autenticação PAM usar:

sudo nano /etc/pam.d/sshd

Digite as seguintes linhas no início do arquivo:

#2FA

auth required pam_google_authenticator.so

Você também pode escolher quando o TOTP será solicitado:

Após inserir sua senha: adicione as linhas acima abaixo de “@include common-auth”, como mostrado na imagem acima.
Antes de solicitar sua senha: adicione as linhas acima acima de “@include common-auth”.

Observe os sublinhados (_) usados em “pam_google_authenticator.so”, em vez dos hífens (-) que usamos anteriormente com o comando apt-get para instalar o módulo.

Pressione Ctrl+O para salvar as alterações no arquivo e, em seguida, Ctrl+X para fechar o editor. Precisamos reiniciar o SSH uma última vez e estamos prontos:

sudo systemctl restart ssh

Feche esta conexão SSH, mas mantenha a outra conexão SSH de segurança aberta até verificarmos a próxima etapa.

Verifique se o aplicativo autenticador está aberto e pronto no seu celular e, em seguida, estabeleça uma nova conexão SSH com o Pi:

ssh [email protected]

Você será solicitado a inserir sua senha e, em seguida, o código. Digite o código do seu celular sem espaços entre os números. Assim como sua senha, ele não aparecerá na tela.

Se tudo correr como o esperado, você deverá conseguir se conectar ao Pi; caso contrário, use sua conexão SSH de segurança para revisar os passos anteriores.

Prevenir é Melhor que Remediar

Você notou o “r” em “mais seguro” acima?

De fato, você está agora mais seguro do que estava antes ao se conectar a um Raspberry Pi, mas nada é 100% seguro. Existem formas de contornar a autenticação de dois fatores. Elas envolvem engenharia social, ataques “man-in-the-middle” e “man-at-the-endpoint”, troca de SIM e outras técnicas avançadas, que não abordaremos aqui.

Então, por que se preocupar com tudo isso se não é perfeito? Bem, pela mesma razão que você tranca a porta da frente ao sair, mesmo sabendo que existem pessoas que podem arrombar fechaduras – a maioria não pode.