Hardening – Melhorando a segurança do seu Servidore Linux

Tecnologia infraestrutura e desenvolvimento

Hardening – Melhorando a segurança do seu Servidore Linux



Muitas pessoas acham que por apenas você instalar um servidor Linux ele já esta protegido, isso é um grande engano. Após você instalar e configurar um servidor, você precisa muitas vezes chegar configurações que por default podem deixar brechas e por isso pode deixar seu servidor vulneravel contra pessoas de conduta duvidosa OK. Servidores que por qualquer razão irão ser reponsaveis por hospedar paginas Web, aplicações Web e tem que estar praticamente on-line 24 horas precisam passar por um processo de mapeamento das falhas e melhoria da segurança, esse procedimento chama-se Hardening.

Hardening é um processo de mapeamento das ameaças, mitigação dos riscos e execução das atividades corretivas, com foco na infraestrutura e objetivo principal de torná-la preparada para enfrentar tentativas de ataque.

Normalmente, o processo inclui remover ou desabilitar nomes ou logins de usuários que não estejam mais em uso, além de serviços desnecessários.

Outras providências que um processo de hardening pode incluir: limitar o software instalado àquele que se destina à função desejada do sistema; aplicar e manter os patches atualizados, tanto de sistema operacional quanto de aplicações; revisar e modificar as permissões dos sistemas de arquivos, em especial no que diz respeito a escrita e execução; reforçar a segurança do login, impondo uma política de senhas fortes.


Introdução e configurações do sistema

 
Neste artigo, iremos ver como melhorar a segurança do servidor limitando acesso ao usuário root, melhorando a inicialização do linux, corrigindo algumas configurações que por default do servidor podem por em risco o proprio servidor Linux entre outras coisas OK.

Como sempre eu utilizo para a elaboração dos artigos o Sistem CentOS 6.4.

Melhorando inittab


O ambiente gráfico de qualquer distribuição Linux, em teoria não deve ser instalado, até porque no ambiente grafico muitos pacotes são instalados e a chance de expor seu servidor a falhas e muito grande, para você ter um servidor seguro, tudo começa em sua instalação, escolhendo somente os pacotes necessario para aquele servidor. Um exeplo disso seria porque instalar um Servidor FTP se o mesmo não será usado para esse proposito entede??

Mas, caso você tenha instalado um ambiente gráfico, a melhor coisa a fazer é com que o sistema não inicie o modo gráfico na inicialização, ou seja, vamos trocar o runlevel que o sistema irá iniciar.

Para isso, altere a seguinte linha do arquivo /etc/inittab :

# vim /etc/inittab
 
id:5:initdefault:

Para:

id:3:initdefault:

Fazendo isso toda vez o seu Linux vai ser inicializado em modo texto OK.


Habilitar a senha para Modo Single

Modo Single é o modo de manutenção do sistema GNU/Linux, ele é o runlevel de numero 1. No modo single, o sistema carrega somente os processos que são essenciais para ele, ou seja, nada além irá funcionar, mas quando estamos no modo single podemos acessar todas as informações do Servidor Linux, tais como: arquivos de configuração, Configuração das interfaces redes entre outros sem a senha de root, o que é um risco ernorme, pois o usuário teria acesso completo a todos os arquivos de configuração do Servidor Linux.

Para fazer com que o sistema passe a pedir senha no modo single, você deve editar o arquivo de configuração localizado em /etc/sysconfig/init:

# vim /etc/sysconfig/init

Altere a linha:
SINGLE=/sbin/sushell

Para:

SINGLE=/sbin/sulogin

Feita esta configuração, sempre que o servidor iniciar em modo single, será solicitado a senha de usuário root, caso contrário, você deverá pressionar CTRL+D para sair do modo single, mais isso caso você não tenha protegido o seu GRUB contra essa falha, vou deixar o Link abaixo de um arqtigo que escrevi de como proteger o seu GRUB

Protegendo o Grub contra ataque Single Mode
 

Desabilitando o desligamento por CTRL+ALT+DEL

Por padrão, o sistema GNU/Linux pode ser desligado apertando a sequência de teclas CTRL+ALT+DEL, e isso é um grande problema, pois qualquer pessoa com acesso físico ao servidor poderia desligar o sistema.

Para evitar que isso aconteça, podemos alterar o arquivo /etc/init/control-alt-delete.conf:

# vim /etc/init/control-alt-delete.conf

Comente a linha: exec /sbin/shutdown -r now “Control-Alt-Delete pressed”

Deixe-a assim:

# exec /sbin/shutdown -r now “Control-Alt-Delete pressed”

Com esta linha comentada, seu sistema ignora a sequência de teclas e passará a não reinicializar o sistema assim evitamos que algum engraçadinho reinicie o seu servidor.


Configurações do usuário root – Personalizando login

 
Devemos ter muito cuidado com o usuario ROOT, pois, ele tem acesso ilimitado aoo sistema, deve ser muito bem protegido, sua senha deve ser bem complexa, e deve ser limitado até como quem poderá utilizar no caso de usuarios, garantindo assim, uma rastreabilidade dos problemas.

É altamente recomendado que o usuário root não faça login no sistema de forma direta, ou seja, o ideal é que outro usuário logue-se no sistema e suba os privilégios com o comando su – . O motivo disso é a para fins de rastreabilidade, posterior a qualquer evento, seria mais fácil descobrir qual foi da cagada.

Para evitar que o usuário root faça login no sistema, devemos limpar o arquivo /etc/securetty, que contém os terminais seguros – no nosso caso, nenhum é seguro:

# echo ” ” > /etc/securetty

Sempre altere as permissões, para que ninguém possa acrescer o terminal seguro depois:

# chmod 400 /etc/securetty
# chown root:root /etc/securetty

Restringindo o uso do console/2

O arquivo /etc/securetty permite que você especifique em que dispositivos tty (terminais) o administrador (root) pode fazer log-in.

Nós sugerimos que você comente todas linhas fora vc/1. Isto irá certificar que o root somente pode fazer log-in uma vez e somente em um terminal.

Nota: Usuários no grupo “wheel” podem ainda fazer su – para virar root em outros TTYs.

Listagem de código 4.1: /etc/securetty

vc/1


Bloqueio do login direto do usuário root via SSH

Para fechar brechas, o bloqueio do acesso root direto por SSH é fundamental, afinal, hoje a maioria dos sistemas são administrados via SSH, então, ele deve seguir o mesmo padrão do sistema, um usuário normal deve se autenticar e depois subir privilégios usando o comando su – .

Para alterar esta configuração, vamos acessar o arquivo de configuração direto do SSH.

# vim /etc/ssh/sshd_config

Descomente e altere a linha:
# PermitRootLogin yes

Para:

PermitRootLogin no

Reinicie o serviço SSH:

# service sshd restart

Aproveitando que ja estamos falando de SSH, por padrão a porta que vem habilitada é a porta 22, como é uma porta manjada para ataques substitu-a por outro numero assim já dificultamos muito para quem vai atacar e explorar algum tipo de falha usando SSH

Descomente e altere a linha:
#Port 22

Para

Port 40022 # isso é somente um exemplo ta!!

Caso queira que somente alguns usuarios ou grupos possam usar o SSH abaixo

AllowUser dejano thiago ulisses
Allowgroup admin suporte

Restringindo o comando su

Pensando na proteção do usuário root, outra configuração muito interessante é a restrição do comando su somente para usuários permitidos. Isso garante que mesmo que um usuário descubra a senha do root, ele tenha dificuldades de adquirir privilégios máximos no sistema, precisando de uma senha de um usuário habilitado a utilizar o su.

Para fazer esta configuração, primeiro vamos adicionar o usuário ao grupo wheel que terá a permissão de acesso ao su.

Execute o comando:

# usermod -G wheel dejano

Feito a inclusão do usuário no grupo wheel, acesse o arquivo /etc/pam.d/su e descomente a seguinte linha:

auth required /lib/security/$ISA/pam_wheel.so use_uid

A configuração estará funcionando, e somente usuários do grupo wheel conseguirão o acesso máximo ao sistema.


Personalizando login

Um ponto muito importante é avisar o usuário que o servidor que está sendo acessado é de uso restrito e que deve-se tomar muito cuidado com as configurações que podem ser feitas nele.

Para configurarmos as mensagens que serão mostradas ao usuário, podemos utilizar os arquivos:

Mensagem antes do login
Caso você não gosto que fiquem sabendo que servidor é, que distro, e tudo mais, vocẽ pode ocultar tudo que for informação e assim colocando a sua personalizada.

# vim /etc/issue
# vim /etc/issue.net

Mensagem pós login
Após o login o Linux tem por costume mostrar aquela mensagem chata, com muita informação, caso queira deixar bem simples, então edite os arquivos.

# vim /etc/motd
# vim /etc/motd.tail

Basta fazer sua alteração, colocando sua mensagem personalizada, que a mensagem passará a ser mostrada a todos que utilizarem o servidor.

Melhorar a segurança do login

Para ter um login mais protegido.

# vim /etc/login.defs

    LOGIN_RETRIES: Definição do número de tentativas de login
    LOGIN_TIMEOUT: Tempo de espera para nova tentativa de login, caso tenha errado senha/user
    PASS_MIN_LEN: Tamanho da senha, minimo por padrão é 5.
    LOG_UNKFAIL_ENAB: Grava no arquivo de log /etc/var/log/faillog os usuários desconhecidos que tentarem se logar sem sucessso
    LOG_OK_LOGINS: Ativa log dos logins com sucesso

Removendo alguns usuários estranhos


Não sei porque causas d’água, mas em um servidor não seria legal ter um usuário game, news…

# cat /etc/passwd

Procure pelos usuários estranhos, mas com cuidado para não remover um usuário importante.

# userdel game
# userdel lp
# userdel mail
# userdel news
# userdel uucp
# userdel backups
# userdel list
# userdel irc

Algumas permissões nos arquivos


Para manter uma privacidade melhor do nosso Linux, usuários, configurações, vamos dar permissão 500, pois estes arquivos raramente são editados.

    /etc/passwd
    /etc/group
    /etc/shadow
    /etc/gshadow
    /etc/service
    /etc/sysctl.conf
    /etc/inittab
    /etc/motd
    /etc/motd.tail
    /etc/issue
    /etc/login.defs
    /etc/sysctl.cof
    /etc/logrotate.conf
    /etc/securetty
    /etc/shells

IPV6

Só para garantir que estará fechado tudo para entrada do protocolo IPV6 vamos desabilitar o serviço.

# vim /etc/sysctl.conf

Adicione esta linha ao final do arquivo:

net.ipv6.conf.all.disable_ipv6 = 1

Reboot Servidor Linux

Por default o CentOS/RHEL os comandos halt e reboot são permitidos com usuário comum, e isso acabdo sendo de uma certa orma uma falha de segurança, pois imagina um usuario mortal vai lá e manda da um reboot fudeu nê!! Isso já não acontece no Debian e no Slackware.

Como podemos resolver isso:

verifique se tem o link no /sbin/halt, /sbin/poweroff no /bin/halt, /bin/poweroff

# ll /sbin/halt
lrwxrwxrwx 1 root root 6 Jul  3 12:17 /sbin/halt -> reboot

# ll /sbin/poweroff
lrwxrwxrwx 1 root root 6 Jul  3 12:17 /sbin/poweroff -> reboot

remove o link rm -d /sbin/poweroff ; rm -d /bin/poweroff

altere a permissão para apenas o root ter acesso – chmod 700 /sbin/halt ; chmod 4700 /sbin/poweroff


Bom galera é isso espero que tenham gostado!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *