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!