20 fevereiro 2010 ~ 4 Comentários

Fortalecimento de Servidores Linux

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

4 Respostas para "Fortalecimento de Servidores Linux"

  1. gravatar
    Antonio Henrique 21 de fevereiro de 2010 às 11:08 Permalink

    Aposto que quem ministra este curso é o Sr. Victor Santos.

    Acho que cuidados com segurança são interessantes, mas acho que o dia que um santo fizer um interface bem amigável para estas configurações ele vai ganhar o Nobel.

  2. gravatar
    Antonio Henrique 21 de fevereiro de 2010 às 11:12 Permalink

    Outra coisa, usa o Askimet, esse negócio de captcha é um saco.

  3. gravatar
    Victor Santos 21 de fevereiro de 2010 às 12:25 Permalink

    Salve BigMontz,

    Vou ver sobre o Askimet sim, já estava nos meus planos.
    Entretanto acho que ele ainda é só para o Wordpress. :( !!!!

    Sobre uma interface amigável, já é mais complicado. Tem alguns utilitários como o Harden e o Bastille que podem ajudar, mas nada muito User-Friendly.

  4. gravatar
    Leandro Sant' Anna 23 de fevereiro de 2010 às 14:30 Permalink

    Grandre Victor, excelente artigo, as vezes o administrador lê tanto sobre segurança, mas não sabe por onde começar... ...mas agora pelo menos já tem dez passinhos para a segurança que como vc disse no inicio do artigo "Básicos". (se todos fizessem pelo menos este "básico" não teriamos tantos problemas com a segurança de servidores).

Deixe seu Comentário