Passo 1 — Instalando o PAM do Google
Neste passo, vamos instalar e configurar o PAM do Google.
PAM, que significa Pluggable Authentication Module, é uma infraestrutura de autenticação usada em sistemas Linux para autenticar um usuário. Como o Google criou um aplicativo OATH-TOTP, eles também fizeram um PAM que gera TOTPs e é totalmente compatível com qualquer aplicativo OATH-TOTP, como Google Authenticator ou MS Authenticator.
Primeiro, atualize o cache do repositório do Kali:
┌──(kali㉿kali)-[~]
└─$ sudo apt update
Em seguida, instale o PAM.
┌──(kali㉿kali)-[~]
└─$ sudo apt install libpam-google-authenticator -y
Com o PAM instalado, usaremos um aplicativo auxiliar que vem com o PAM para gerar uma chave TOTP para o usuário que você deseja adicionar um segundo fator. Essa chave é gerada para cada usuário individualmente, não para o sistema inteiro. Isso significa que cada usuário que deseja usar um aplicativo de autenticação TOTP precisará fazer login e executar o aplicativo auxiliar para obter sua própria chave; você não pode simplesmente executá-lo uma vez para ativá-lo para todos (mas há algumas dicas no final deste tutorial para configurar ou exigir MFA para muitos usuários).
Execute o aplicativo de inicialização.
┌──(kali㉿kali)-[~]
└─$ google-authenticator
Depois de executar o comando, você será perguntado sobre algumas questões. A primeira pergunta é se os tokens de autenticação devem ser baseados em tempo.
Este PAM permite tokens baseados em tempo ou sequenciais. Usar tokens sequenciais significa que o código começa em um ponto específico e, em seguida, incrementa o código após cada uso. Usar tokens baseados em tempo significa que o código muda aleatoriamente após um determinado tempo. Vamos optar pelos tokens baseados em tempo porque é o que aplicativos como Google Authenticator esperam, então responda y para sim.
Depois de responder a esta pergunta, muita saída rolará pela tela, incluindo um grande código QR. Neste ponto, use seu aplicativo de autenticação no celular para escanear o código QR ou digite manualmente a chave secreta. Se o código QR for muito grande para escanear, você pode usar a URL acima do código QR para obter uma versão menor. Uma vez adicionado, você verá um código de seis dígitos que muda a cada 30 segundos no seu aplicativo.
Adicione a nova conta ao seu app, eu usarei o Microsoft Authenticator:
Enter code from app (-1 to skip): 704054
Nesta pergunta você irá preencher com o código gerado no Authenticator e em seguida ele irá retornar seus códigos de backup, salve-os em um lugar seguro:
Do you want me to update your "/home/kali/.google_authenticator" file? (y/n)
y
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)
y
By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n)
n
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n)
y
Passo 2 — Configurando o OpenSSH
Para começar, abra o arquivo de configuração sshd para edição usando o nano ou seu editor de texto favorito.
┌──(kali㉿kali)-[~]
└─$ sudo nano /etc/pam.d/sshd
Adicione essa linha ao final do arquivo:
auth required pam_google_authenticator.so
Em seguida, configuraremos o SSH para suportar esse tipo de autenticação. Abra o arquivo de configuração do SSH para edição.
┌──(kali㉿kali)-[~]
└─$ sudo nano /etc/ssh/sshd_config
Procure por esse comando, se não existir adicione:
ChallengeResponseAuthentication yes
Depois disso reinicie o serviço do ssh e o MFA já estará funcionando
┌──(kali㉿kali)-[~]
└─$ sudo systemctl restart ssh
Perceba que após a linha Password, existe a Verification code, que é o código gerado pelo Authenticator no celular.