Implementar Melhores Práticas para Segurança de Senhas

Kali LinuxBeginner
Pratique Agora

Introdução

A segurança de senhas é um componente crítico na proteção de sistemas e dados contra acesso não autorizado. Senhas fracas ou comprometidas são um dos pontos de entrada mais comuns para atacantes. Implementar uma política de senhas robusta é uma prática de segurança fundamental.

Neste laboratório, você aprenderá a implementar várias melhores práticas para segurança de senhas em um sistema Linux. Você configurará regras de complexidade de senhas, configurará Autenticação Multifator (MFA), entenderá o papel dos gerenciadores de senhas, imporá a rotação de senhas e aprenderá sobre a importância da educação do usuário.

Compreender os Requisitos de Complexidade de Senhas

Nesta etapa, você imporá regras de complexidade de senhas para garantir que os usuários criem senhas fortes. Uma senha forte geralmente inclui uma mistura de letras maiúsculas, letras minúsculas, números e caracteres especiais, e tem um comprimento suficiente. Usaremos o Módulo de Autenticação Conectável (PAM) pam_pwquality para conseguir isso.

Primeiro, vamos instalar o pacote libpam-pwquality, que fornece as ferramentas necessárias.

sudo apt-get install libpam-pwquality -y

Agora, você precisa configurar a pilha PAM para usar este módulo para alterações de senha. Editaremos o arquivo /etc/pam.d/common-password. Este arquivo contém a configuração comum para gerenciamento de senhas.

Abra o arquivo usando o editor nano:

sudo nano /etc/pam.d/common-password

Encontre a linha que contém pam_unix.so e adicione a seguinte linha acima dela. Isso garante que a verificação de qualidade ocorra antes que a senha seja realmente alterada pelo módulo pam_unix.

password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

Vamos detalhar essas opções:

  • retry=3: O usuário tem 3 tentativas para inserir uma senha compatível.
  • minlen=12: O comprimento mínimo da senha é de 12 caracteres.
  • ucredit=-1: Exige pelo menos uma letra maiúscula.
  • lcredit=-1: Exige pelo menos uma letra minúscula.
  • dcredit=-1: Exige pelo menos um dígito.
  • ocredit=-1: Exige pelo menos um caractere especial (outro).

Seu arquivo deve se parecer com isto (algumas linhas podem diferir):

## /etc/pam.d/common-password

...
password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password        [success=1 default=ignore]      pam_unix.so obscure sha512
...

Pressione Ctrl+X, depois Y e Enter para salvar o arquivo e sair do nano.

Agora, vamos testar a nova política. Tentaremos alterar a senha do usuário labex.

passwd

Primeiro, insira sua senha atual (você pode simplesmente pressionar Enter, pois nenhuma senha está definida para labex). Em seguida, tente definir uma senha fraca como password. O sistema deve rejeitá-la e mostrar uma mensagem de erro porque ela não atende aos requisitos de complexidade.

(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 12 characters
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged

Agora, tente novamente com uma senha forte como Labex!P@ssw0rd. Esta senha deve ser aceita.

Você configurou com sucesso os requisitos de complexidade de senhas em seu sistema.

Implementar Autenticação Multifator

Nesta etapa, você aprenderá a implementar a Autenticação Multifator (MFA). A MFA adiciona uma segunda camada de segurança, exigindo que os usuários forneçam dois ou mais fatores de verificação para obter acesso. Usaremos o módulo PAM do Google Authenticator para adicionar a autenticação de Senha Única Baseada em Tempo (TOTP).

Primeiro, instale o pacote libpam-google-authenticator.

sudo apt-get install libpam-google-authenticator -y

Em seguida, você precisa gerar uma configuração de MFA para seu usuário. Execute o seguinte comando como o usuário labex (não com sudo).

google-authenticator

O comando fará uma série de perguntas. Para fins deste laboratório, responda-as da seguinte forma:

  • Do you want authentication tokens to be time-based (y/n): Pressione y e Enter.
  • Você verá um código QR, uma chave secreta e códigos de emergência (scratch codes). Em um cenário do mundo real, você escanearia o código QR com um aplicativo autenticador em seu telefone. Para este laboratório, apenas prosseguiremos.
  • Do you want me to update your "/home/labex/.google_authenticator" file? (y/n): Pressione y e Enter. Isso salva sua chave secreta.
  • Do you want to disallow multiple uses of the same authentication token?: Pressione y e Enter.
  • Do you want to increase the time-skew window?: Pressione n e Enter.
  • Do you want to enable rate-limiting for the authentication module?: Pressione y e Enter.

Isso cria um arquivo .google_authenticator em seu diretório pessoal (/home/labex).

Agora, vamos configurar o SSH para usar este token de MFA. Primeiro, precisamos instruir o PAM a exigi-lo para sessões SSH.

Abra o arquivo /etc/pam.d/sshd:

sudo nano /etc/pam.d/sshd

Adicione a seguinte linha ao final do arquivo:

auth required pam_google_authenticator.so

Salve e saia do arquivo (Ctrl+X, Y, Enter).

Em seguida, devemos habilitar a autenticação de desafio-resposta na configuração do servidor SSH.

Abra /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Encontre a linha ChallengeResponseAuthentication no e altere-a para yes. Se a linha estiver comentada com um #, remova o #.

## /etc/ssh/sshd_config
...
ChallengeResponseAuthentication yes
...

Salve e saia do arquivo. Em um sistema real, você reiniciaria o serviço SSH. No entanto, neste ambiente conteinerizado, reiniciar serviços como sshd não é suportado. A principal conclusão é entender as etapas de configuração necessárias para habilitar a MFA para SSH.

Usar Gerenciadores de Senhas

Nesta etapa, discutiremos a importância dos gerenciadores de senhas. Reutilizar senhas em diferentes serviços é um grande risco de segurança. Se um serviço for comprometido, os atacantes podem usar a senha vazada para acessar suas outras contas. Um gerenciador de senhas ajuda você a gerar, armazenar e gerenciar senhas únicas e fortes para cada serviço.

O KeePassXC é um gerenciador de senhas popular, de código aberto e gratuito que armazena suas senhas em um banco de dados seguro e criptografado. Embora seja um aplicativo gráfico, nós o instalaremos para entender como essas ferramentas são integradas ao fluxo de trabalho de um usuário.

Vamos instalar o KeePassXC usando apt-get.

sudo apt-get install keepassxc -y

Após a conclusão da instalação, você pode verificá-la verificando a existência do comando.

which keepassxc

Você deverá ver a seguinte saída, indicando que o aplicativo está instalado e disponível no caminho do seu sistema.

/usr/bin/keepassxc

Em um ambiente de desktop, você iniciaria o KeePassXC, criaria um novo banco de dados criptografado com uma senha mestra forte e começaria a adicionar suas credenciais de login para vários sites e serviços. O aplicativo também pode gerar automaticamente senhas muito fortes para você. O princípio fundamental é lembrar uma senha mestra forte para desbloquear o gerenciador e deixar que o gerenciador cuide de todas as suas outras senhas complexas.

Rotacionar Senhas Regularmente

Nesta etapa, você aprenderá a impor a rotação de senhas, também conhecida como envelhecimento de senhas (password aging). Alterar senhas regularmente limita a janela de oportunidade para um atacante que possa ter roubado uma senha.

No Linux, você pode definir políticas de envelhecimento de senhas em todo o sistema no arquivo /etc/login.defs. Você também pode definir políticas para usuários individuais com o comando chage. Vamos nos concentrar no comando chage.

Primeiro, vamos visualizar as configurações atuais de envelhecimento de senhas para o usuário labex.

sudo chage -l labex

Você verá uma saída semelhante a esta, com a maioria dos valores definidos como never.

Last password change                                    : May 20, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

O Maximum number of days between password change está definido como 99999, o que efetivamente significa que a senha nunca expira. Vamos alterar isso para impor uma alteração de senha a cada 90 dias.

Use o comando chage com a opção -M para definir a idade máxima.

sudo chage -M 90 labex

Agora, verifique as configurações novamente para confirmar a alteração.

sudo chage -l labex

A saída agora deve mostrar que o número máximo de dias é 90. A data Password expires também será atualizada de acordo.

Last password change                                    : May 20, 2024
Password expires                                        : Aug 18, 2024
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

Você configurou com sucesso uma política de rotação de senhas para um usuário.

Educar Usuários sobre Higiene de Senhas

Nesta etapa, focaremos no elemento humano da segurança. Controles técnicos são essenciais, mas são mais eficazes quando os usuários também praticam uma boa higiene de senhas. Educar os usuários sobre as melhores práticas de segurança é um controle crucial e não técnico.

Aqui estão alguns pontos-chave de uma boa higiene de senhas:

  • Não reutilize senhas: Use uma senha única para cada conta.
  • Não compartilhe senhas: Nunca compartilhe sua senha com ninguém, incluindo a equipe de TI.
  • Cuidado com phishing: Desconfie de e-mails ou mensagens que solicitam suas credenciais de login.
  • Bloqueie sua tela: Sempre bloqueie seu computador quando se afastar dele.
  • Use frases-senha (passphrases): Uma frase-senha longa como correct-horse-battery-staple pode ser mais segura e mais fácil de lembrar do que uma senha curta e complexa como J%7d*fQ!.

Para simular a criação de um documento de política voltado para o usuário, vamos criar um arquivo de texto simples em nosso diretório de projeto que descreve essas regras.

Primeiro, crie o arquivo e adicione a primeira regra usando o comando echo e a redireção de saída >.

echo "1. Não compartilhe sua senha com ninguém." > ~/project/password_policy.txt

Agora, vamos anexar mais duas regras ao arquivo usando o operador de anexar >>.

echo "2. Use uma senha única para cada serviço." >> ~/project/password_policy.txt
echo "3. Cuidado com e-mails de phishing solicitando credenciais." >> ~/project/password_policy.txt

Finalmente, exiba o conteúdo do seu novo documento de política usando o comando cat.

cat ~/project/password_policy.txt

Você deverá ver a seguinte saída:

1. Não compartilhe sua senha com ninguém.
2. Use uma senha única para cada serviço.
3. Cuidado com e-mails de phishing solicitando credenciais.

Este exercício simples demonstra como as políticas de segurança podem ser documentadas e compartilhadas. Em uma organização real, isso faria parte de um programa mais amplo de conscientização sobre segurança.

Resumo

Neste laboratório, você implementou com sucesso várias práticas recomendadas essenciais para a segurança de senhas em um ambiente Linux. Uma abordagem de múltiplas camadas que combina controles técnicos com educação do usuário fornece a defesa mais forte contra acesso não autorizado.

Você aprendeu a:

  • Impor a criação de senhas fortes configurando requisitos de complexidade com pam_pwquality.
  • Adicionar uma segunda camada crítica de segurança configurando a Autenticação Multifator (Multi-Factor Authentication) com pam_google_authenticator.
  • Compreender o papel de gerenciadores de senhas como o KeePassXC na criação e armazenamento de senhas únicas e fortes.
  • Implementar políticas de rotação de senhas usando o comando chage para limitar o risco de credenciais comprometidas.
  • Reconhecer a importância da educação do usuário e da documentação de políticas de segurança para uma boa higiene de senhas.

Ao aplicar essas práticas, você pode melhorar significativamente a postura de segurança de qualquer sistema que gerencie.