O método de Usuário e Senha (password authentication) é a forma mais elementar de identificação de usuário no protocolo SSH. Embora seja o método menos seguro em comparação ao uso de chaves assimétricas, ele permanece como o mecanismo de contingência padrão em quase todas as distribuições Linux e sistemas Unix, permitindo o acesso inicial antes da configuração de métodos mais robustos.


1. O Fluxo de Autenticação por Senha

Diferente de protocolos inseguros como o Telnet, onde a senha viaja em texto claro, no SSH o envio da senha só ocorre após o estabelecimento do túnel cifrado.

O processo técnico segue estes passos:

  1. Requisição: O cliente envia uma mensagem SSH_MSG_USERAUTH_REQUEST especificando o método "password".

  2. Prompt: O cliente solicita ao usuário local que digite a senha.

  3. Envio Cifrado: A senha é encapsulada em um pacote SSH, cifrada com a Chave de Sessão Simétrica (gerada no KEX) e enviada ao servidor.

  4. Validação: O servidor recebe o pacote, decifra-o e compara o conteúdo com o banco de dados de autenticação do sistema.


2. Integração com o PAM (Pluggable Authentication Modules)

Em sistemas modernos como Ubuntu, Debian ou CentOS, o servidor SSH (sshd) não verifica o arquivo /etc/shadow diretamente. Ele delega essa tarefa ao PAM.

  • Flexibilidade: O PAM permite que o servidor SSH autentique o usuário contra diversas fontes: arquivos locais, servidores LDAP, Active Directory ou bancos de dados SQL.

  • Controle de Acesso: Através do PAM, o sistema pode impor restrições adicionais, como proibir logins de senha para determinados usuários ou exigir que a senha seja trocada no primeiro acesso.

3. Vulnerabilidades e Riscos

O uso de senhas expõe o servidor a vetores de ataque específicos que não afetam as chaves privadas:

  • Brute Force (Força Bruta): Atacantes utilizam bots para tentar milhares de combinações de usuários (como admin, root, user) e senhas comuns.

  • Dictionary Attacks: Uso de listas de palavras e senhas vazadas em outros sites.

  • Shoulder Surfing / Keylogging: Como a senha é algo que o usuário “sabe” e precisa digitar, ela pode ser capturada por observação física ou malware no computador do cliente.


4. Mitigação e Hardening

Para manter o uso de senhas minimamente seguro, administradores aplicam técnicas de endurecimento (Hardening):

  • Fail2Ban: Um serviço que monitora os logs de erro (/var/log/auth.log) e bane temporariamente o endereço IP que exceder um número X de tentativas de senha inválidas.

  • Complexidade de Senha: Uso de módulos como pam_pwquality para exigir letras maiúsculas, números e caracteres especiais.

  • Desativação do Root: Configurar PermitRootLogin prohibit-password ou no no arquivo sshd_config obriga o atacante a adivinhar também o nome de um usuário comum, dobrando o esforço necessário.

5. Configuração no sshd_config

O comportamento deste método é controlado por diretivas específicas no servidor:

Bash

PasswordAuthentication yes # Habilita o uso de senhas
PermitEmptyPasswords no    # Proíbe usuários sem senha (crítico!)
MaxAuthTries 3             # Número de tentativas antes de derrubar a conexão

6. Transição para MFA (Multi-Factor Authentication)

Muitas organizações utilizam o método de senha apenas como o primeiro fator de uma autenticação interativa. Após a senha ser validada, o servidor envia um segundo desafio (via keyboard-interactive) solicitando um código OTP (One-Time Password), elevando significativamente o nível de segurança do acesso.