Técnicas Básicas de Segurança
Introdução
Esse documento é um artigo genérico e básico sobre como deixar seu servidor seguro. Geralmente aprendemos a coisa do modo mais dificil, e só vamos pensar em segurança após algum incidente.
Mas como eles entram?
Não é por mágica que os invasores entram no sistema. Algumas vezes é por métodos não científicos, como enganar alguém e obter a senha, ou usar uma senha fácil de adivinhar, ou em branco.
Às vezes os atacantes exploram falhas de configuração de uma maneira bastante criativa, mas o mais comum é abusar de softwares que estão rodando na máquina.
Softwares são escritos por pessoas e pessoas cometem erros, claro. Computadores são muito burros, eles fazem o que a gente pede, e somente o que a gente pede, portanto temos que programar tudo.
Às vezes as pessoas programam errado e as vezes elas simplesmente não imaginam que o usuário possa se comportar mal e não mandar a resposta que você espera ou não usar o programa da maneira que você espera. É possível fazer muito mais coisas com uma chave de fenda do que parafusar e desaparafusar. Nem todas elas são bondosas.
Entraram, e agora?
A primeira coisa que precisamos ter em mente é que não existem redes 100% seguras, assim como não existe carro que não possa ser roubado. O que nós podemos fazer é dificultar a tarefa do invasor de tal maneira que poucos no mundo possam invadir seu site e mantenha o resto (que é a maioria) do lado de fora. Ao sermos invadidos temos uma sensação extremamente desagradável, equivalente talvez a de encontrarmos a casa arrombada. Mas por mais que seja desagradável, temos que ter em mente algumas coisas:
- Não se desespere. Acontece. Já foi um bom passo a invasão ter sido detectada!
- Se desejar uma auditoria para entender o que houve, não mexa na maquina. Desligue-a da rede e se prepare para auditoria. Não altere nada e retire a maquina de producao. Não restaure backups, não acesse os arquivos, não remova ou copie nada.
- Sua maquina não é mais confiável, você não pode acreditar mais no que ela diz.
Porque você não pode mais confiar em uma máquina invadida
A primeira coisa que um invasor faz ao entrar é alterar o sistema para cobrir seus passos. O seu log provavelmente foi sutilmente alterado, retirando-se os acessos do invasor, reboots da maquina e informações que possam relaciona-lo à invasão. Outra coisa que ele fará é alterar suas ferramentas (programas) para esconder seus passos. Assim seu ls por exemplo, é substituído por uma versão que não mostra determinado arquivos. O ps pode não mostrar os processos malignos deixados pelo invasor. E assim por diante. E a terceira coisa que o invasor vai fazer é garantir a sua volta ao sistema, mesmo que você mude as senhas e feche telnet e ssh, e coletar novas senhas. A volta ao sistema é garantida através de o que nos chamamos de backdoors. Backdoors podem ser programas que foram alterados ligeiramente para que funcionem quase igual ao original, mas que liberem uma shell de root mediante um comando. Dois truques comuns são alterar o pop (mail) ou o apache (web), por exemplo, para que continuem funcionando como antes, exceto que ao receberem o comando !r00t ele libere uma shell de root.
Isso são apenas alguns exemplos. existem literalmente dezenas e dezenas de outros. Para ele garantir a coleta de novas senhas, de novos usuários, de modo que ele possa tentar entrar em outras contas caso suas outras entradas sejam fechadas, o invasor se utiliza do que é chamado de sniffer de rede. Um sniffer de rede é um programa que captura tudo o que esta batendo na sua placa de rede, inclusive as senhas e nomes de usuários, que você manda via rede ao checar um e-mail ou fazer um telnet por exemplo! Após capturar essas informações provavelmente jogará em um arquivo oculto que o invasor consultará mais tarde!
Agora, é muito difícil determinar o grau de comprometimento da sua máquina. Virtualmente qualquer arquivo ou programa pode ter sido alterado. O mais prático e seguro a fazer é reinstalar a sua máquina, para garantir sua confiabilidade. Os próprios backups podem estar comprometidos, pois podem ter sido feitos após a maquina ter sido invadida e alterada, de maneira que você não pode confiar nos seus backups completamente, a não ser que você consiga determinar com precisão o momento da invasão e acessar backups anteriores a isso. Essa certeza é difícil de ser obtida. É razoavelmente seguro restaurar seus arquivos textos, após estes terem sido verificados, como suas páginas web, por exemplo. Mas a reinstalação é provavelmente a coisa mais sensata a fazer. Guarde os nomes de usuários, os arquivos de e-mail, as paginas web e só.
Reinstalando sua máquina
Ao reinstalar sua máquina a partir de uma mídia confiável (um CD que seja comprovadamente da sua distribuição, por exemplo) temos ainda alguns cuidados a tomar. Não devemos instalar nenhum pacote que não formos usar no momento. Não podemos instalar um arquivo com o pensamento de que depois, algum dia, iremos usar. Se não tem uma utilidade na hora, não devemos instalá-lo. Pode-se instalar mais tarde, quando efetivamente precisarmos dele. Logo após instalarmos o servidor, devemos conectar ao site da sua distribuição e baixarmos as actualizações de segurança, caso contrário é provável que a falha que o invasor utilizou continue la.
Segurança é um estado constante de vigilância!
Todos os dias devemos checar se não existem atualizações de segurança, olhar os logs procurando coisas estranhas, nos acostumarmos com o funcionamento diário do sistema. As distribuições em geral mantém uma lista de e-mail que avisa quando novas actualizações de segurança são lançadas! Para vigilância dos logs um utilitário muito bom é o logcheck, que faz uma triagem das informações nos seus logs e as envia por e-mail
Cuidados a tomar para dificultar uma possível invasão.
Um firewall é uma boa idéia, mas não garante tudo. O invasor pode vir a explorar uma falha (hipotética) no servidor web, por exemplo, e o firewall vai deixar passar o pedido, porque ele não tem como diferenciar um pedido legítimo de um maligno. Manter o sistema atualizado é essencial. Utilizar um sistema de detectção de intrusão da rede (procure por NIDS, do inglês Network Intrusion Detection System) em conjunto com o firewall é uma boa idéia para prevenir isso. Mas existem outras medidas:
- Não utilizarmos o serviço de telnet. O telnet trafega as informações descriptografadas, em texto claro. A primeira coisa que passa por um telnet é um nome de usuário e uma senha, e é só isso que um invasor precisa para entrar no seu sistema. Se alguém tiver colocado uma escuta entre a sua máquina a máquina a qual você está acessando pegará sua senha! Por isso devemos utilizar o ssh, que encripta essas informações.
- Devemos tomar cuidado com as permissões dos arquivos. Não devemos dar SUID para programas a não ser que isso seja imprescindível. Normalmente esses programas já vem com SUID na sua instalação, portanto é muito improvável que seja necessário dar permissão de SUID explicitamente para qualquer programa. Arquivos SUID são armadilhas potenciais ao seu sistema. Outra coisa com que devemos tomar cuidado é com as permissões de arquivos acessíveis publicamente, via web ou ftp. Nunca devemos dar permissões 0777 para um arquivo sem um excelente motivo para isso, pois isso permite que qualquer um altere e execute o arquivo, até usuários anónimos acessando via web se esses arquivos estiverem debaixo do diretório html do site! Arquivos html nunca devem ser executáveis e dificilmente devem ter permissão de escrita, a não ser para o dono!
- Devemos ter atenção ao serviço de ftp, principalmente se ele permitir logins anônimos. Nunca permita diretórios graváveis acessíveis ao serviço ftp. Uma boa idéia é, se possíuvel, desabilitar o ftp e utilizarmos o sftp ou scp, que possui um cliente gráfico gratuito para MSWindows.
- Se possível, copiar os logs para uma outra máquina via syslog. Essa outra máquina deve rodar apenas o syslog e ser acessível apenas ao servidor ao qual esta ligada.
- Liberar os serviço apenas para as redes que precisam. Mesmo máquinas só devem ser acessíveis por quem as precisa acessar. Assim, estacões de trabalho ou mesmo servidores internos não devem ter IPs acessíveis via Internet. Se somente a rede interna acessa seu pop, libere o pop apenas para sua rede interna. Se somente você acessa o ssh, libere o ssh apenas para sua máquina. Se alguém não precisa explicitamente de um serviço negue-o! Se ninguém está usando o serviço, desinstale-o!
- Ter uma política de senhas. Devemos evitar a todo custo senhas fracas, fáceis de adivinhar. Exemplos dessas senhas são palavras de dicionário, nomes de pessoas, datas de aniversários, nomes relacionados ao seu trabalho. Deve-se orientar a todos os usuários do sistema que evitem esse tipo de senhas. Senhas boas são senhas que contenham caracteres não alfa-numéricos, como por exemplo !@#$%&, letras maiúsculas e minúsculas, e numeros.
Enfim, em segurança é preciso sempre estar atento e constantemente atualizado.
Links
- CERT:
- http://www.cert.org/
O que é a CERT? Do seu próprio site:
At the CERT Coordination Center, we study Internet security vulnerabilities, provide incident response services to sites that have been the victims of attack, publish a variety of security alerts, research security and survivability in wide-area-networked computing, and develop information to help you improve security at your site.
Tem uma coleção de documentos técnicos sobre invasões. Recomendo assinar a CERT-L, a sua lista de divulgação de vulnerabilidades em sistemas e programas.
- BUGTRAQ:
- http://www.securityfocus.com/archive/1
Lista técnica de discussão sobre bugs em programas, em inglês:
- Securityfocus:
- http://www.securityfocus.com/
É uma fonte bastante grande de informações.
- PacketStorm:
- http://packetstorm.securify.com
Site sobre segurança.
Gostou deste artigo? Que tal colaborar com o Cybershark? Qualquer dólar ajuda :) MUITO OBRIGADO!