Um dos principais desafios ao instalar um servidor Linux é permitir que este permaneça seguro pelo maior tempo possível. Para tanto, é necessário conduzir a instalação de forma que se consiga reduzir ao máximo riscos em torno do servidor, sendo fundamental efetuar um planejamento de instalação diante das políticas de segurança e do gerenciamento de risco da organização.
Muitos administradores, sem experiência em segurança preparam seus servidores com uma instalação básica, importando-se apenas em colocar as aplicações funcionando. O sistema Linux quando não é devidamente configurado, torna-se tão vulnerável quanto qualquer outro sistema e é por isso que devemos ajustar as suas configurações para garantir a confidencialidade, integridade e disponibilidade de suas informações.
O Fortalecimento (Hardening) de Servidores é processo de mapeamento das ameaças, mitigação dos riscos e execução das atividades corretivas, objetivando tornar a infra-estrutura preparada para enfrentar tentativas de ataque.
Entretanto antes de pensarmos em técnicas e ferramentas para fortalecer o nosso sistema Linux é importante levar em consideração 3 fatores: segurança, risco e custo/impacto. Não é possível ter um sistema 100% seguro. Quanto mais segurança tivermos, menor será nosso risco. Em contrapartida, maior será o custo. É importante saber trabalhar com estes 3 fatores, pois não existe uma regra específica, depende de cada situação. Por isso, é extremamente importante analisar a funcionalidade de seu servidor e utilizar os procedimentos que atendam as suas necessidades. Tendo definido isso, vamos em frente.
As boa práticas de segurança em sistemas Linux começam na sua instalação (não irei me aprofundar neste assunto). É extremamente aconselhável particionar o disco e alocar os principais diretórios em partições separadas. Cada partição tem sua tabela de arquivos separada e no caso de haver problemas em alguma das partições, outras não serão afetadas.
Ainda durante a instalação, tente instalar o menor número de pacotes possível. Instale somente o sistema básico e vá alimentando-o com novos pacotes conforme a sua necessidade. Com isso você evitará a instalação de pacotes e serviços desnecessários e que podem tornar seu sistema mais vulnerável.
Após o sistema instalado, vamos realizar o seu fortalecimento, deixando-o o mais seguro possível. Abaixo irei listar 10 passos básicos que devem ser seguidos :
1º Removendo programas desnecessários
Vamos começar removendo todos os programas desnecessários, caso não tenham realizado uma instalação opt-in.
Em um sistema debian digite o comando:
$ dpkg -l | awk '{print $2, $3}' > programas_instalados.txt
Em um sistema Redhat-like, digite o comando:
$ rpm -qa > programas_instalados.txt
O dpkg é um gerenciador de pacotes para o Debian. Utilizando ele com o parâmentro -l (--list) ele irá listar todos os pacotes instalados no sistema e irá salvar o seu resultado no arquivo programas_instalados.txt. Analise o arquivo minunciosamente e remova todos os pacotes que não forem necessários para o seu trabalho, como bluetooth e impressora por exemplo.
Para remover os pacotes digite:
$ dpkg -r
Para remover os pacotes de um Redhat-like digite:
$ rpm -e
2º – Segurança em Sistemas de Arquivos
Além do particionamento do disco, o comando “mount” possui opções bem interessantes para elevar a segurança das tabelas de partições, tais como:
nosuid - Faz com que binários com permissão “suid bit” não possam utilizar esta propriedade na partição em que está definido.
noexec - Impossibilita a execução de binários ou arquivos executáveis dentro da partição na qual essa opção está ativada.
noatime - Diz para não atualizar o tempo de acesso dos inodes (melhorando a performance em partições onde há MUITO acesso a disco).
Estas opções devem ser utilizadas no arquivo “/etc/fstab”, exemplo:
/dev/hda4 /home ext3 defaults,nosuid noexec 1 2
/dev/hda5 /var/log ext3 defaults,nosuid,nodev,noexec 1 2
Vale salientar que existem outras opções do comando “mount”, consulte o “man” do comando para ver todas as opções possíveis.
3º Limitando recursos de redes do Kernel
Adicione as linhas abaixo no final do arquivo “/etc/sysctl.conf” :
# Ativa proteção contra ataques de IP Spoofing
net.ipv4.conf.all.rp_filter=1
# Desabilita pacotes roteados “na fonte”
net.ipv4.conf.all.accept_source_route=0
# Ignora mensagens ICMP de broadcast
net.ipv4.icmp_echo_ignore_broadcasts=1
# Registra todos os pacotes de origem suspeita (como pacotes forjados)
net.ipv4.conf.all.log_martians = 1
4º Gerenciando os serviços ativos do sistema
Muitos administradores, iniciantes ou até mesmo experientes, deixam de utilizar as vantagens de ferramentas clássicas do sistema para checar se o serviço está funcionando corretamente, se está sendo executado na porta certa, se está recebendo requisições inválidas ou até mesmo verificar se um invasor deixou um “backdoor” no sistema. Lembre-se que todas essas ferramentas estão ali para facilitar sua vida. Aproveite-as! Como exemplo, façamos uma varredura nos serviços em execução do sistema. No arquivo /etc/services encontra-se uma lista de portas padrão dos serviços mais conhecidos (alguns nem tanto :).
O comando “netstat” nos mostra informações sobre os serviços de redes no nosso sistema, exemplo:
$ netstat -tupan
O comando “fuser”, que faz parte do pacote psmisc, verifica cada processo(serviço) que está rodando em cada porta. Exemplo:
$ fuser -v 22/tcp
USER PID ACCESS COMMAND
22/tcp: root 5479 F.... sshd
Já o comando “lsof” nos mostra diversas informações do sistema, como usuários, arquivos, processos e conexões. Exemplo :
$ lsof
5º Desativando contas desnecessárias
Após a instalação do sistema e em atividades periódicas é interessante analisarmos todos os usuários do sistema. Alguns utilitários que instalamos adicionam usuários “padrão” no sistema, como ftp, mysql, nobody. Certifique-se de que estes usuários possuam no parâmetro “shell” caminhos para arquivos inexistentes. Na maior parte das vezes estes serviços não precisam de um interpretador shell válido, mas por serem contas válidas no sistema, podem ser utilizadas em determinados casos.
O comando “passwd -l” trava a conta de um usuário. Exemplo:
$ passwd -l # (Trava a conta do usuário)
$ passwd -u # (Destrava a conta do usuário)
6º Gerenciamento e Política de Senhas
O login.defs é um arquivo de configuração lido pelos programas login, não é parte da configuração do PAM. Porém pode auxiliar no gerenciamento do usuários e na definição de uma política de senha.
Você também pode implementar o controle de senhas pelo PAM (Módulo de autenticação plugável) com a biblioteca pam-cracklib.
Outro módulo do PAM bastante interessante é o pam-dotfile, que permite que você defina senhas diferentes, para um mesmo usuário, no serviços específicos como IMAP, SSH, FTP, entre outros.
7º Gerenciamento de Privilégios
A configuração abaixo trata a autenticação do usuário com o módulo pam_wheel.so, utilizando o grupo administradores. Com ele somente os usuários do grupo administradores poderão utilizar o comando /bin/su.
Edite o arquivo “/etc/pam.d/su e adicione a linha:
auth required pam_whell.so group=administradores
Os módulos “pam_limits.so” e “pam_time.so” também são muito úteis para gerenciar os recursos de uso e o controle de acesso ao servidor.
Obs: Tome muito cuidado ao editar esse arquivo. Erros podem impedi-lo de efetuar login no sistema! Mantenha sempre um terminal autenticado pronto para desfazer quaisquer modificações.
8º Fortalecimento do OpenSSH
O OpenSSH é uma suíte de ferramentas que provê criptografia em sessões de comunicações em uma rede de computadores usando o protocolo SSH. Ele é muito visado em ataques de “BruteForce”, portanto alguns ajustes são necessários. O SSHTest é um utilitário criado pela empresa Clavis Segurança da Informação em parceria com o GRIS (Grupo de Resposta a Incidentes de Segurança) do Departamento de Ciência da Computação da UFRJ para analisar arquivos de configuração do daemon OpenSSH, presente na maioria dos sistemas *NIX (incluindo Linux e *BSD), em busca não apenas de buracos na segurança de seu servidor como também por maneiras de melhorar a segurança do mesmo, pró-ativamente. Basta descompatar e executá-lo, e uma série de perguntas interativas serão feitas enquanto ele modifica o arquivo de configuração do servidor OpenSSH.
9º Instalação e Utilização de um IDS
É uma boa prática implantar softwares de verificação de integridade e detecção de intrusão no sistema antes do ambiente entrar em produção online.
Um sistema de detecção de intrusão baseado em redes (NIDS) é um sistema de detecção de intrusão que tenta detectar atividades maliciosas como ataques de negação de serviço e port scans monitorando o tráfego de rede. Um execelente NIDS é o Snort, uma das 5 melhores ferramentas de segurança Open-Source.
Já o sistema de detecção de intrusão baseado em Hosts (HIDS) faz analise de logs, checagem de integridade de arquivos e detecção de rootkits. Um excelente HIDS é o OSSEC, com muitas características interessantes e fácil de usar.
10º Implementação do Firewall
O Netfilter/Iptables é um excelente firewall nativo das distribuições Linux. Ele um firewall “statefull” que trabalha em nível de pacotes e realiza o controle de acesso através de regras de filtragem por, origem/destino, portas, protocolos, palavras chaves, etc. O Iptables ainda tem a vantagem de trabalhar com módulos, possibilitando a adição de mais funções a ele, ampliando ainda mais o seu poder.
Estes passos são apenas o ínicio do processo para melhorar a segurança de seu servidor. Segurança não é só a implementação, é preciso testar e avaliar se as suas configurações estão de fato protegendo o sistema. Além disso, é preciso promover a conscientização dos usuários, disseminando o que chamamos de “cultura de segurança”. Tudo isso sustentado por uma política de segurança clara e concisa, responsável pelo estabelecimento do ambiente propício à manutenção dos três pilares da S.I.: Integridade, Disponibilidade e Confidencialidade. Pois quando tratamos de segurança da informação, tecnologia não é uma panacéia.
Nos próximos artigos irei falar de outras técnicas de fortalecimento e proteção de perímetro.
Para quem deseja conhecer e se deliciar com todas as técnicas e ferramentas de proteção a servidores linux, aconselho a realizar o curso "Fortalecimento de Servidores Unix/Linux" da Clavis Segurança da Informação (vou cobrar a propaganda). Um curso bem completo, com metodologia própria e muito hand's-on, vale a pena conferir não só este como todos os outros cursos que são de altíssima qualidade.
Próximo artigo: Sistemas de Monitoramento.
Não percam. :) !!!!
Victor Santos