Limitar tentativas de senha no Linux para proteger serviços críticos

  • A configuração de módulos PAM como pam_faillock e pam_tally2 permite bloquear contas após várias tentativas falhas no Red Hat, Debian e Ubuntu.
  • Ajustar o MaxAuthTries no arquivo sshd_config limita as tentativas de autenticação por conexão SSH, complementando as políticas de bloqueio em nível de sistema.
  • Arquivos como /etc/login.defs, /etc/shadow e ferramentas como change e passwd gerenciam a expiração de senhas e parâmetros globais.
  • Os módulos pam_cracklib e pam_pwquality reforçam a complexidade das senhas, prevenindo chaves fracas e reutilização insegura.

Segurança ao limitar tentativas de senha no Linux

Limitar tentativas de senha no Linux Não se trata apenas de uma peculiaridade de administradores paranoicos; é uma das medidas mais eficazes para impedir ataques de força bruta e acessos não autorizados, tanto em ambientes de desktop quanto de servidor. Se o seu computador contém informações confidenciais ou se conecta à internet, você deve proteger essa parte do sistema. audite sua rede local.

Além de definir uma senha forte, Configurar bloqueios temporários ou permanentes após várias falhas Isso é fundamental: dificulta os ataques, gera mais registros para auditoria e permite combinar essa proteção com outras políticas de senhas (expiração, complexidade, reutilização etc.). Vamos analisar, com calma, mas em detalhes, como isso é feito em diferentes distribuições e em diferentes níveis do sistema.

Bloqueio de conta devido a tentativas de login falhas no Red Hat, CentOS e derivados.

Nas distribuições baseado em Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)O bloqueio de contas devido a tentativas falhas é gerenciado com o módulo PAM. pam_faillockEste módulo controla quantas tentativas de login falhas são permitidas, por quanto tempo a conta fica bloqueada e quais usuários são afetados (incluindo, se desejar, o usuário root).

Para aplicar essa política, você precisa editar os arquivos PAM globais, normalmente /etc/pam.d/system-auth e, em algumas versões, também /etc/pam.d/password-authEsses arquivos funcionam como modelos para a maioria dos serviços de autenticação do sistema (login no console, sudo, SSH, etc.).

Esses arquivos contêm linhas semelhantes a estas, dentro da seção de auth y conta:

auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so

A primeira linha atua antes da autenticação real (pré-autenticação)O segundo processo é executado quando a autenticação falha, e o terceiro é responsável por verificar o status de bloqueio da conta durante a fase de contaAo modificar os parâmetros, você pode ajustar a política às suas necessidades.

Os parâmetros mais comuns de pam_faillock são:

  • auditorPermite o registro detalhado das tentativas de login, de forma que os rastros sejam deixados nos logs do sistema (por exemplo, em / var / log / secure).
  • negar=2Isso define o número máximo de tentativas de senha incorretas antes que a conta seja bloqueada. Neste exemplo, é 2, mas você pode aumentá-lo (3, 5, 10…).
  • tempo_desbloqueio=120: indica o tempo de bloqueio em segundos. Neste caso, seriam 120 segundos (2 minutos) até que a conta seja reativada automaticamente.
  • silenciosoSe estiver presente, Não mostra ao usuário que ele foi bloqueado.Simplesmente deixa de aceitar logins, tornando o sistema menos "verboso" para um atacante.

Um detalhe importante é que, por padrão, A raiz está excluída deste bloco.Se você quiser que as mesmas regras se apliquem a ele também, você precisa adicionar o parâmetro. até negar raiz nas linhas pam_faillock da seção de autenticação. Isso reforça a segurança, mas você deve avaliar o risco de perder o acesso se cometer muitos erros.

Quando uma conta é bloqueada e você não usa o parâmetro silenciosoO sistema pode exibir mensagens explícitas avisando que o usuário excedeu o número permitido de tentativas. Isso é útil em ambientes de teste para verificar a configuração, embora em produção geralmente seja melhor não fornecer muitas informações.

Para visualizar as tentativas de login falhas de um usuário específico, em sistemas Red Hat você pode usar o comando faillock apontando para a conta que lhe interessa:

faillock --user lionel

Este comando mostra Quantas tentativas falhadas o usuário acumulou?, incluindo o endereço IP usado no caso de SSH e outros detalhes relevantes para a auditoria. Além disso, você sempre pode revisar o que aparece em / var / log / secureonde esses eventos de segurança serão registrados.

Limitar tentativas de senha no Linux

Bloqueio de conta devido a tentativas de login falhas no Debian e Ubuntu

No caso de Debian, Ubuntu e derivadosA lógica é semelhante, mas o módulo PAM utilizado muda. Tradicionalmente, ele tem sido usado pam_tally2 para contabilizar tentativas falhas e bloquear contas automaticamente, embora nas versões modernas seja recomendável migrar para pam_faillockAinda assim, o pam_tally2 continua muito presente em muitos guias e ambientes.

Para aplicar um bloqueio com base no número de tentativas falhas em um sistema Debian típico, geralmente você edita o arquivo. /etc/pam.d/common-authque define a política de autenticação padrão para a maioria dos serviços locais. Você pode adicionar uma linha como esta a ela:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600

Com essa configuração, o sistema A conta foi bloqueada após 3 tentativas falhas.Ele mantém o bloqueio por 120 segundos para usuários normais e por 600 segundos para o usuário root. Além disso, se ocorrer algum erro com o módulo (onerr=falha), por motivos de segurança, o acesso é negado em vez de permitido.

Os principais parâmetros de pam_tally2 são:

  • onerr=falhaCaso haja algum problema na leitura ou atualização do contador de tentativas, a autenticação será negada para evitar deixar uma porta aberta acidentalmente.
  • negar=3Número máximo de tentativas de login permitidas antes do bloqueio da conta. Um valor de 3 costuma ser bastante razoável na prática.
  • tempo_desbloqueio=120Tempo, em segundos, que a conta permanecerá bloqueada para usuários padrão.
  • auditor: registra informações sobre falhas de autenticação (no Debian, geralmente é /var/log/auth.log).
  • até negar raiz: força o usuário root a também ser contabilizado neste sistema de bloqueio, algo que deve ser usado com cautela.
  • tempo_desbloqueio_raiz=600Tempo de bloqueio específico para a conta root, em segundos, independente dos outros usuários.

Quando o bloqueio é ativado, o usuário verá uma mensagem indicando que sua conta foi temporariamente desativada devido a um número excessivo de tentativas de login malsucedidas. Isso permite que o administrador detecte comportamentos suspeitos e alerte o usuário de que algo está errado.

Para visualizar as tentativas falhas registadas por pam_tally2 Para um usuário específico (por exemplo, lionel), você pode usar:

pam_tally2 -u lionel

este comando Mostra o número de falhas acumuladas. E permite que você reinicie o contador manualmente, se necessário, com opções adicionais. Além disso, assim como no Red Hat, você sempre tem a opção de revisar. /var/log/auth.log Para ver em mais detalhes o que aconteceu em cada tentativa de autenticação.

Limite as tentativas de SSH com MaxAuthTries

Um dos pontos de entrada mais comuns em servidores Linux é SSHPor isso, é fundamental controlar quantas tentativas de autenticação são permitidas por conexão. É aí que entra a política. MaxAuthTries, que está configurado no arquivo / etc / ssh / sshd_config do servidor OpenSSH.

A ideia é simples: MaxAuthTries define o número máximo de tentativas de autenticação permitidas por conexão SSH.Caso esse limite seja excedido, o servidor encerra a conexão, forçando o atacante a iniciar uma nova sessão para continuar tentando combinações, o que retarda significativamente os ataques automatizados de força bruta.

Para configurá-lo, basta editar o arquivo de configuração:

sudo nano /etc/ssh/sshd_config

Em seguida, localize ou adicione uma linha como esta:

MaxAuthTries 3

Com esse valor, São permitidas apenas três tentativas de autenticação por conexão SSH.Se o usuário cometer o mesmo erro várias vezes, o daemon sshd o desconectará. Para que a alteração entre em vigor, o serviço deve ser recarregado ou reiniciado, por exemplo, com:

sudo systemctl restart sshd

MaxAuthTries não substitui módulos PAM como pam_tally2 ou pam_faillock, mas sim funciona em paraleloO servidor SSH controla quantas tentativas consecutivas são permitidas em uma única sessão, enquanto o PAM mantém uma contagem global por usuário e pode bloquear sua conta no nível do sistema.

Além do MaxAuthTries, é recomendável combinar outras medidas de segurança SSH para tornar o serviço muito mais robusto:

  • Alterar a porta padrãoParar de usar a porta 22 e usar uma porta menos óbvia para o SSH ajuda a filtrar muitas varreduras automáticas básicas.
  • Use chaves públicas em vez de apenas senhas.A autenticação por meio de chaves SSH elimina o problema de senhas fracas e é muito mais robusta contra ataques de força bruta.
  • Restrinja as fontes usando um firewall ou configure uma DMZ.Permitir SSH apenas a partir de endereços IP específicos ou intervalos de rede adiciona uma barreira muito eficaz no nível da rede.

PAM Linux

Limitar tentativas de autenticação local com PAM

Além do SSH, o autenticação local (console, TTYs, sudo, gerenciador de exibição gráfica) também é gerenciado com PAM. No Debian e Ubuntu, por exemplo, o arquivo /etc/pam.d/common-auth É o núcleo dessa configuração e, nos sistemas Red Hat, desempenha um papel fundamental. autenticação do sistema (e às vezes autenticação por senha).

Além de módulos de bloqueio dedicados como pam_faillock ou pam_tally2, algumas distribuições permitem limitar as tentativas e os tempos de login diretamente através de login.defsNeste arquivo, localizado em /etc/login.defsSão declarados valores como os seguintes:

  • LOGIN_RETRIES: número máximo de tentativas permitidas na tela de login antes de abortar o processo.
  • LOGIN_TIMEOUTTempo máximo, em segundos, que a sessão de login pode permanecer aguardando a entrada do usuário.

Por exemplo, se você ajustar LOGIN_RETRIES Com um limite de 3 senhas, o usuário terá apenas três tentativas para inserir sua senha em uma única sessão de login antes que o sistema encerre a tentativa, forçando-o a reiniciar o processo. Isso não bloqueia a conta em si, mas... limita as tentativas por sessão.

No mesmo arquivo login.defs Você também pode ajustar outros parâmetros de segurança relevantes, como:

  • PASS_MAX_DAYS: número máximo de dias que uma senha pode ser usada antes de ser obrigada a ser alterada.
  • PASS_MIN_DAYSNúmero mínimo de dias entre as alterações de senha, para evitar alterações excessivamente frequentes e em "cadeia".
  • PASS_WARN_AGEAviso prévio de alguns dias antes do vencimento da senha, para que o usuário tenha tempo de reagir.
  • COMPRIMENTO_MÍNIMO_PASSAGEM y COMPRIMENTO_MÁXIMO_PASSAGEM: comprimento mínimo e máximo da senha.
  • PASS_ALWAYS_WARN: emite um aviso quando a senha não atende a determinados critérios de segurança.
  • TENTATIVAS_DE_ALTERAÇÃO_DE_SENHA: número máximo de tentativas de alteração de senha caso a nova senha seja considerada muito simples.
  • ENCRYPT_METHOD: algoritmo de hash a ser usado para senhas (o mais comum hoje em dia é SHA-512, indicado como $ $ 6).

Essas diretrizes afetam principalmente Novos usuários Essas configurações são criadas após o ajuste do arquivo login.defs, sendo uma maneira prática de estabelecer uma política básica para toda a organização.

Gerenciando tentativas e expiração com /etc/shadow e o comando change

O arquivo / etc / shadow É aqui que o sistema armazena as senhas criptografadas dos usuários locais, juntamente com todas as informações de expiração. Embora não sejam alteradas manualmente diariamente, compreender sua estrutura ajuda bastante na auditoria e no aprimoramento das políticas de segurança.

Em cada linha de / etc / shadow Aparecem vários campos, separados por dois pontos. Os mais relevantes para as nossas políticas são:

  • Nome de usuário: identifica a conta à qual os demais campos pertencem.
  • Senha criptografada: é armazenado como $id$salt$hashedOnde $id$ indica o algoritmo ($1 MD5, $2a$/$2y$ Baiacu, $5 SHA-256, $6 SHA-512), seguido de sal e haxixe.
  • Última alteração de senha: número de dias desde 1 de janeiro de 1970 (época) em que foi modificado pela última vez.
  • Dias mínimos e máximos de utilizaçãoEles controlam quando a senha pode ser alterada novamente e quando ela expira.
  • dias de aviso de expiraçãoQuantos dias antes do vencimento o sistema começa a notificar o usuário?
  • Dias de inatividadeApós a expiração da senha, quanto tempo leva para a conta ser completamente desativada?
  • Data de expiração absoluta da conta: também em formato de dias, desde 1970, marca o momento em que o login não é mais permitido para esse usuário.

Para gerenciar esses parâmetros sem modificar diretamente o arquivo /etc/shadow, utiliza-se o seguinte comando: chage (mudar de idade), que permite ajustar a senha e o prazo de expiração da conta para usuários específicos.

Algumas opções comuns para chage são:

  • -d, –dia passado: define o dia da última alteração de senha (em dias desde a época Unix ou com uma data legível).
  • -E, –data de expiração: define a data a partir da qual a conta expira.
  • -Eu, –inativo: marca a conta como inativa após um determinado número de dias a partir do vencimento da senha.
  • -m, –mindays: define o número mínimo de dias entre alterações de senha.
  • -M, –diasmáximos: indica o número máximo de dias durante os quais a senha permanece válida.
  • -W, –dias de aviso: define quantos dias antes do vencimento as notificações serão enviadas.
  • -l, –lista: Mostra o status de expiração atual de um usuário.

Por exemplo, para verificar as informações de expiração do usuário. pimenta Pode ser executado:

chage -l pepe

A saída indicará A data da última alteração, se a senha expira ou não, o período de inatividade e os dias mínimo e máximo....entre outros dados. Com esta ferramenta, você pode aplicar políticas individualmente, usuário por usuário, ou em scripts que processam grupos inteiros de contas.

Políticas de complexidade de senha com pam_cracklib e pam_pwquality

Limitar as tentativas de senha é ótimo, mas se as senhas forem algo como "123456" ou "qwerty", você não vai muito longe. É por isso que é crucial. exigir senhas fortes usando módulos PAM como pam_cracklib e, em versões mais recentes, pam_pwqualidade.

O módulo pam_pwqualidade É uma evolução do cracklib e integra-se com bibliotecas como... libpwqualidade Para verificar se as senhas não estão em dicionários, não são muito curtas e não repetem padrões simples ou dados pessoais do usuário. Está incluído nativamente em ambientes baseados em RHEL e pode ser instalado em Debian/Ubuntu usando pacotes como... libpam-cracklib y libpam-pwquality.

Após a instalação, a configuração principal geralmente é feita no arquivo /etc/security/pwquality.confonde você pode definir parâmetros de complexidade, tais como:

  • difok: número de caracteres que devem ser diferentes da senha anterior.
  • minlen: comprimento mínimo aceitável para a nova senha.
  • crédito, crédito, crédito, ocréditoCréditos pela inclusão de dígitos, letras maiúsculas, letras minúsculas e outros caracteres.
  • minclass: número mínimo de classes de caracteres diferentes necessárias (minúsculas, maiúsculas, dígitos, símbolos).
  • repetição máxima: número máximo de caracteres idênticos consecutivos permitidos.
  • maxclassrepeat: número máximo de caracteres consecutivos da mesma classe.
  • gecoscheck: verifica se a senha não contém palavras do campo GECOS (comentário) do usuário em /etc/passwd.
  • dictpath: caminho para o dicionário usado para verificar se uma senha faz parte de uma palavra conhecida.
  • palavrõesLista de palavras explicitamente proibidas.

O sistema créditos É especialmente flexível. Basicamente, uma senha ganha créditos por incluir uma variedade de caracteres; esses créditos podem compensar um comprimento ligeiramente menor. Por exemplo, com minlen=10 y crédito=2Uma senha de 8 caracteres com 2 dígitos pode passar pelo filtro porque adiciona 2 créditos extras. No entanto, se você definir créditos negativos, precisará de pelo menos um caractere negativo (por exemplo, dcredit=-1 (Requer pelo menos um dígito, sem exceções).

Com minclass Você pode exigir que a senha inclua várias classes diferentes. Um valor de 2 força, por exemplo, uma combinação de letras e números, ou letras e símbolos, etc. minclass=4 Isso exigiria o uso simultâneo de letras minúsculas, letras maiúsculas, dígitos e caracteres especiais, algo muito típico em políticas corporativas exigentes.

Ferramentas como pwscore Eles permitem testar a força de uma senha em relação a políticas definidas. Quando uma senha é passada por meio de um processo pwscoreIsso indica se a chave atende aos requisitos ou não e, caso contrário, qual regra ela está violando (comprimento insuficiente, muito simples, muito semelhante à anterior, etc.).

Configure políticas robustas no Debian e Ubuntu com pam_cracklib

Em sistemas Debian/Ubuntu, é muito comum usar pam_cracklib (ou pwquality via PAM) para impor a política de senhas. O arquivo chave aqui é /etc/pam.d/common-password, que define como as alterações de senha são gerenciadas para os usuários do sistema.

Antes de fazer qualquer alteração, é uma boa prática criar uma cópia de segurança do arquivo:

sudo cp /etc/pam.d/common-password /root/

Em seguida, você poderá editá-lo com seu editor de texto favorito (nano, vim, etc.) com privilégios de superusuário. Lá dentro, você encontrará uma linha semelhante a:

password requisite pam_cracklib.so retry=3 minlen=8 difok=3

Aqui, são definidos parâmetros como os seguintes:

  • tentar novamenteNúmero de tentativas permitidas ao usuário ao alterar sua senha, antes que a alteração falhe.
  • minlen: comprimento mínimo da senha.
  • difok: número de caracteres que devem ser diferentes da senha anterior.
  • crédito, crédito, crédito, ocréditoCréditos positivos ou negativos para letras maiúsculas, letras minúsculas, dígitos e outros caracteres.

Por exemplo, uma política bastante exigente poderia ser:

password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3

Com esta configuração, Toda nova senha deve ter no mínimo 12 caracteres.A senha deve diferir em pelo menos 3 caracteres da anterior e conter no mínimo 3 letras maiúsculas, 3 letras minúsculas, 3 dígitos e 3 símbolos. É uma política muito rigorosa, mas extremamente eficaz contra senhas triviais.

Depois de alterar a política, você pode testá-la alterando sua própria senha com:

sudo passwd

Caso a senha não atenda aos requisitos, o sistema exibirá mensagens indicando o motivo: muito curta, semelhante a uma palavra do dicionário, repetição excessiva de caracteres, etc. Assim que a senha estiver em conformidade com a política, a alteração será aplicada sem problemas.

Além de reforçar a política para novas alterações, o Debian e o Ubuntu permitem obrigar os usuários existentes a alterarem suas senhas Para se adaptar às novas regras. Com o comando:

passwd -e USUARIO

A senha desse usuário foi marcada como expirada e, no próximo login, ele precisará definir uma nova senha que esteja em conformidade com a política atual. Você também pode controlar a expiração global de senhas com:

passwd -w 5 -x 30 USUARIO

onde -x 30 estabelece uma validade máxima de 30 dias para a senha e -w 5 Isso faz com que o sistema comece a notificá-lo 5 dias antes da data de vencimento. Se você adicionar -i1:

passwd -w 5 -x 30 -i 1 USUARIO

A conta será marcada como inativa se o usuário não alterar sua senha. um dia após o vencimento, obrigando o administrador a intervir para reativá-lo.

Embora a rotação frequente de senhas seja recomendada há anos, as diretrizes de segurança modernas (como as do NIST) qualificam essa prática: É preferível optar por senhas longas e complexas, e por sistemas de autenticação de dois fatores., em vez de forçar mudanças excessivamente frequentes que acabam gerando chaves previsíveis.

Configure cuidadosamente os módulos PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) e arquivos-chave como /etc/pam.d/common-auth, /etc/pam.d/common-password, /etc/login.defs, / etc / ssh / sshd_config e compreender como essas decisões se refletem em / etc / shadowIsso marca a diferença entre um sistema "padrão" e um ambiente verdadeiramente protegido contra acessos não autorizados e ataques de força bruta.

nmap
Artigo relacionado:
Faça uma auditoria da sua rede local com Nmap e Wireshark passo a passo.

Adicionar como fonte preferencial