Pesquisa de site

LFCA: Como melhorar a segurança do sistema Linux – Parte 20


Como todos sabemos, o usuário root é rei e possui privilégios ilimitados sobre o sistema Linux. No entanto, os usuários não-root estão limitados a tarefas básicas. Além disso, os usuários sudo recebem apenas um certo grau de privilégios de root, conforme considerado adequado pelo usuário root para executar tarefas elevadas específicas.

Os problemas surgem quando usuários regulares têm acesso não controlado aos recursos ou são escalados para root involuntariamente. Este é um sério risco de segurança que pode causar violações, modificações indesejadas e, na pior das hipóteses, travar o sistema. Outro risco potencial é quando os arquivos têm permissões de arquivo menos seguras. Por exemplo, arquivos de inicialização com permissões de gravação para usuários globais podem ser facilmente modificados ou corrompidos, resultando em um sistema quebrado.

Embora possamos implementar segurança física, de rede e de dados, um usuário mal-intencionado pode contornar as medidas de segurança e tirar vantagem de tais brechas de segurança. É por esta razão que a segurança do sistema de arquivos deve ser levada a sério. Ele fornece uma camada extra de defesa diante de ataques ou ameaças internas de funcionários mal-intencionados que não precisam fazer o trabalho pesado para contornar as medidas de segurança para acessar arquivos.

Na segurança do sistema, nos concentraremos nos seguintes pontos-chave:

  • Direitos de acesso – Permissões de usuários e grupos.
  • Aplique políticas de senha com o módulo PAM.

Direitos de acesso – Separação de usuários e grupos

Você provavelmente já deve ter ouvido falar que tudo no Linux é considerado um arquivo. E se não for, é um processo. Cada arquivo em um sistema Linux pertence a um usuário e a um usuário de grupo. Ele também possui permissões de arquivo para 3 categorias de usuários: Usuário (u), Grupo (g) e Outros (o). As permissões são representadas em leitura, gravação e execução ( rwx ) para cada categoria de usuário.

rwx        rwx	     rwx
User       Group     Others

Como visto antes, na seção Noções básicas do Linux, você pode visualizar as permissões do arquivo usando o formato longo do comando ls conforme mostrado.

ls -l

Só para recapitular, as permissões geralmente são representadas por nove caracteres. Os primeiros três caracteres representam os direitos de acesso do usuário real que possui o arquivo. O segundo conjunto de caracteres representa as permissões do grupo proprietário do arquivo. Finalmente, o último conjunto para outros usuários ou usuários globais. Esses caracteres estão perpetuamente na ordem ler, gravar, executar (rwx).

Após as permissões, temos as propriedades dos usuários e grupos, seguidas do tamanho do arquivo ou diretório, data da modificação e por último o nome do arquivo.

Alterando permissões e propriedades de arquivos/diretórios

As permissões do usuário para arquivos e diretórios podem ser modificadas conforme necessário. A regra geral é usar o princípio de segurança com menor privilégio. Simplificando, garanta que os usuários obtenham os direitos de acesso ou permissões mínimos necessários para realizar o trabalho.

O princípio de privilégios mínimos restringe os usuários apenas a determinadas funções e, ao fazê-lo, minimiza o risco de invasores acessarem e modificarem dados críticos, aproveitando uma conta de usuário de baixo nível. Também reduz a superfície de ataque e limita a propagação de malware caso o invasor assuma o controle do seu sistema.

Portanto, se um usuário precisar apenas visualizar o conteúdo de um arquivo ou diretório, ele não deverá receber permissões de execução ou gravação. No nível mais básico, conceda apenas o mínimo de permissões e propriedades exigidas pelo usuário para realizar tarefas. Abordamos como modificar as permissões e propriedades do usuário em arquivos/diretórios usando os comandos chmod e chown no tópico comandos básicos do Linux.

Modo de permissão de bit fixo

Para que o administrador do sistema tenha mais facilidade no gerenciamento de permissões, permissões especiais ou direitos de acesso podem ser concedidos a diretórios inteiros. Uma das permissões especiais que podem ser aplicadas para restringir a exclusão e modificação de um arquivo ou diretório é o sticky bit.

Pedaço pegajoso

Em um cenário em que um diretório compartilhado pode ser acessado por todos os usuários do sistema ou da rede, existe um risco potencial de que alguns usuários excluam ou modifiquem os arquivos dentro do diretório. Isto é indesejado se você quiser manter a integridade do conteúdo do diretório. E é aqui que entra a parte pegajosa.

Um sticky bit é uma permissão de arquivo especial definida em um arquivo ou diretório inteiro. Ele concede apenas ao proprietário desse arquivo/diretório permissão para excluir ou fazer alterações no conteúdo do arquivo ou diretório. Nenhum outro usuário pode excluir ou modificar o arquivo/diretório. Possui o valor simbólico de t e um valor numérico de 1000.

Para ativar um sticky bit em um diretório, use o comando chmod da seguinte maneira:

chmod +t directory_name

No exemplo abaixo, aplicamos um sticky bit ao diretório chamado test. No caso de um diretório, todo o conteúdo herdará as permissões de sticky bit. Você pode verificar as permissões de sticky bit usando o comando ls -ld. Certifique-se de observar o símbolo t no final das permissões do arquivo.

ls -ld test

Se outro usuário tentar excluir o diretório ou modificar o arquivo dentro do diretório, ele será recebido com um erro Permissão negada.

E essa é a essência da permissão do arquivo stick bit.

Monitorando permissões SUID e SGID

O SUID (Definir ID do usuário) é outra permissão de arquivo especial que permite que outro usuário comum execute um arquivo com as permissões do proprietário do arquivo. Geralmente é denotado por um valor simbólico s na parte das permissões de arquivo do usuário, em vez de um x que representa permissões de execução. O SUID tem um valor numérico de 4.000.

O SGID (Definir ID do Grupo) permite que um usuário normal herde as permissões de grupo do proprietário do grupo de arquivos. Em vez do x para permissões de execução, você verá um s na parte do grupo das permissões do arquivo. O SGID tem um valor numérico de 2000.

Por mais convenientes que sejam, as permissões SUID e SGID estão associadas a riscos de segurança e devem ser evitadas a todo custo. Isso ocorre porque eles concedem privilégios especiais a usuários regulares. Se um invasor se passando por um usuário comum encontrar um arquivo executável de propriedade do usuário root com um bit SUID definido, ele poderá usar essa brecha e explorar o sistema.

Para encontrar todos os arquivos com o bit SUID definido no Linux, execute o comando find como usuário root.

find / -perm -4000 type -f

Para diretórios execute:

find / -perm -4000 type -d

Para encontrar todos os arquivos com conjunto de bits SGID execute:

find / -perm -2000 type -f

Para diretórios execute:

find / -perm -2000 type -d

Para remover o bit SUID de um arquivo, execute o comando chmod conforme mostrado:

chmod u-s /path/to/file

Para remover o bit SGID de um arquivo, execute o comando:

chmod g-s filename /path/to/file

Aplicar políticas de senha com o módulo PAM

Não é incomum que os usuários definam senhas fracas. Um bom número define senhas curtas, simples e fáceis de adivinhar para evitar esquecê-las durante o login. Embora convenientes, as senhas fracas podem ser facilmente violadas usando scripts de ataque de força bruta.

O módulo PAM ( Pluggable Authentication Module ) é um módulo que permite aos administradores de sistema aplicar políticas de senha em sistemas Linux. Para fazer isso, você precisa do módulo pam_pwquality fornecido pela biblioteca libpam_pwquality. O módulo pam_pwquality verifica a força de uma senha em relação a um conjunto de regras e um dicionário do sistema e identifica opções de senhas fracas.

Para instalar o módulo pam_pwquality no Ubuntu 18.04 e versões posteriores, execute:

sudo apt install libpam_pwquality

Para RHEL/CentOS 8, execute o comando:

sudo dnf install libpwquality

O arquivo de configuração é encontrado no seguinte local:

  • Em sistemas Debian – /etc/pam.d/common-password
  • Em sistemas RedHat – /etc/pam.d/system-auth

Configurando a política de senha

Antes de começarmos a modificar o arquivo de configuração PAM, vamos primeiro considerar a coleta de insights sobre os controles de antiguidade da senha.

Detalhes de validade da senha

Eles podem ser encontrados no arquivo /etc/login.defs.

O arquivo contém os seguintes controles de senha principais:

  • PASS_MAX_DAYS: Número máximo de dias que uma senha pode ser usada.
  • PASS_MIN_DAYS: número mínimo. de dias permitidos entre alterações de senha.
  • PASS_WARN_AGE: número de dias de aviso dado antes que uma senha expire.

Os valores padrão são indicados abaixo.

O atributo PASS_MAX_DAYS limita o número de dias que um usuário pode usar sua senha. Ao atingir esse valor ou a senha expirar, o usuário é obrigado a alterar sua senha para efetuar login no sistema. Por padrão, esse valor é definido como 99999, o que significa 273 anos. Isso não faz muito sentido no que diz respeito à segurança, pois o usuário pode continuar usando sua senha durante toda a vida.

Você pode definir isso com um valor significativo, digamos 30 dias, conforme mostrado.

PASS_MAX_DAYS  30

Após decorridos 30 dias, o usuário será forçado a alterar sua senha para uma diferente.

O atributo PASS_MIN_DAYS indica o tempo mínimo que os usuários podem usar sua senha antes de alterá-la. O que isto significa? Se, por exemplo, este valor for definido para 15 dias, o usuário não poderá alterar sua senha novamente antes de decorridos 15 dias.

PASS_MAX_DAYS  15

O atributo PASS_WARN_AGE especifica o número de dias que um usuário receberá um aviso sobre a expiração iminente de sua senha antes que ela expire. Por exemplo, você pode definir isso para 7 dias conforme mostrado.

PASS_MAX_DAYS  7

NOTA: Esses controles de senha não funcionam com contas pré-existentes. Eles só são aplicados a novas contas criadas após a definição das regras.

Configurando a complexidade da senha com o módulo PAM

Antes de editar o arquivo /etc/pam.d/common-password, crie uma cópia de backup. Neste exemplo, criamos o arquivo de cópia de backup common-password.bak.

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

Em seguida, abra o arquivo.

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

Localize a linha mostrada abaixo.

password        requisite          pam_pwquality.so retry=3

A opção repetir define o número máximo de vezes que você precisará inserir a senha correta antes de ocorrer um erro. Por padrão, está definido como 3. Esta é apenas uma opção e incluiremos várias opções.

Adicione os seguintes atributos à linha:

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

Vamos detalhar esses atributos.

  • minlen=10: Define o tamanho mínimo aceitável para a senha. Neste caso, 10 caracteres.
  • difok=3: Este é o número máximo de caracteres presentes na senha anterior.
  • lcredit=-1: Este é o número mínimo de caracteres minúsculos que devem estar presentes na senha.
  • ucredit=-1: É o número máximo de caracteres minúsculos que devem estar presentes na senha.
  • dcredit=-1: O número mínimo de caracteres numéricos que devem ser definidos na senha.
  • ocredit=-1: O número mínimo de caracteres especiais, por exemplo, @, #, & que devem ser definidos na senha.
  • reject_username: Esta opção aciona a rejeição da senha se a senha for o nome de usuário no formato direto ou reverso.

Se você tentar criar um novo usuário que não atenda às políticas de senha, encontrará os erros mostrados.

Resumo

Isto conclui o tópico sobre segurança do sistema e fundamentos de segurança em geral. Em todo o capítulo, esclarecemos as medidas básicas de segurança que você pode implementar para proteger seu sistema Linux contra usuários mal-intencionados, como hackers ou funcionários insatisfeitos.