Ubuntu pronto para guerra

By | August 28, 2008

Prefácio

A rede mundial de computadores tem mais de 10 botnets. Todas dominadas por crackers armados até os dentes. É só nego de nmap, nessus, tcpdump e por ai vai.
No resto do mundo são softwares de auditoria. Na internet, são as armas do crime.

Um 0-day attack atravessa um firewall como se fosse papel. É burrice pensar que numa rede assim os daemons, mesmo atualizados, não vão ser crackeados apenas para fazer valer a lei.
E Linux também tem bug amigo, Linux também tem falha de segurança.

É por isso que nessa rede todo administrador tem que escolher: Ou se corrompe, ou se omite, ou vai pra guerra.

Aviso

Se você é um profissional decente, não tenho dúvidas que vai decidir partir para guerra e nesse tutorial vamos ver os passos básicos para tornar seu servidor mais resistente a invasões.

Mas não se iluda. Nada é 100% seguro e seguir as boas práticas de segurança uma vez na vida não vai te ajudar muito. Mantenha-se atualizado, mantenha sua infra-estrutura atualizada (não apenas seus servidores) e seja humilde. Aprenda com seus erros e com os erros dos outros.

Outro ponto que vale ressaltar aqui: Esse tutorial é dirigido ao Ubuntu Server 8.04 (Hardy). Muita coisa pode ser aplicada para desktop e para outras distribuições, mas não é sobre isso que vou falar aqui.

Fique com o básico

Quanto menos pacotes instalados no seu Ubuntu, melhor. Mais pacotes significam mais potenciais pontos de falha, mais opções para um invasor tentar escalar privilégios e mais recursos para ele utilizar sua máquina como ponte para outros ataques em caso de uma invasão bem sucedida.

Durante a instalação do seu Ubuntu Server, quando apresentado às opções, não escolha nenhum pacote. Você pode manualmente instalar openssh, LAMP, DNS e etc mais tarde, num momento mais conveniente.

Num primeiro momento fique apenas com o sistema mais enxuto possível para facilitar as implementações de segurança antes de começar a abrir as portas.

Application Specific

Ter um servidor para cada serviço que você precisa não é mais exclusividade de grandes empresas, com um gordo orçamento. Utilize máquinas virtuais baseadas no seu hypervisor preferido e crie uma máquina virtual para cada tipo de serviço que for utilizar.

Utilize de bom-senso. Não coloque banco de dados da intranet na mesma partição virtual que está seu banco de dados da DMZ.

Algo como um servidor de banco de dados para todos os serviços da DMZ e um servidor HTTP para todos os bancos de dados da DMZ parece mais coerente.

Servidores em redes muito hostis (como um servidor do lado de fora dos firewalls da DMZ) ficam melhor se forem self-contained, ou seja, com todos os serviços rodando numa mesma partição virtual.

Tenha certeza de que tem uma placa de rede exclusiva para administração do seu hypervisor e proteja-a muito bem.

No Ubuntu o Xen é uma excelente opção.

Guardando seus logs

Numa situação ideal sua rede vai dispor de um servidor de syslog onde todos os hosts enviam seus eventos, mas se não for o caso, durante a instalação crie uma partição /var/log com filesystem ext3.

Isso vai permitir que você utilize o chattr para restrigir seus arquivo ao modo append only.

# cd /var/log
# chattr +a messages syslog auth.log daemon.log

Caso esteja utilizando rotacionamento de log, lembre-se de editar as políticas para evitar erros.

Ter logs é essencial para previnir invasões, mas pode ser seu passe livre de problemas em caso de invasão concretizada ou investigação judicial.

Se possível utilize sempre um servidor de syslog numa máquina física à parte. Seja bem paranóico na configuração da segurança dessa máquina.

Utilize firewall local

Mesmo que sua rede disponha de firewall de borda, existe sempre a possibilidade de alguém conseguir acesso à sua rede local. Um visitante numa sala de reunião, um esperto num wireless rogue, etc.

No Hardy nem mesmo com sintaxe do iptables você precisa se preocupar. Basta utilizar o ufw.

Ele já vem com uma lista de regras pré-configuradas com um nível de segurança bem aceitável. Falando em bom iptablês, as policies são DROP e você aplica suas excessões.

Exemplificando um servidor LAMP na sua DMZ:

# ufw allow proto tcp from 192.168.5.0/24 to 192.168.100.2 port 22
# ufw allow proto tcp from any to any port 80
# ufw enable

Onde:

192.168.5.0/24 é sua rede interna.

192.168.100.2 é o IP interno do seu LAMP server

Ou um servidor de DNS apenas com ip válido:

# ufw allow proto tcp from 200.200.200.201 to 200.200.200.10 port 22
# ufw allow proto udp from any to 200.200.200.10 port 53
# ufw allow proto tcp from 200.1.1.200 to 200.200.200.10 port 53
# ufw enable

Onde:

200.200.200.201 é o IP nateado da sua rede

200.200.200.10 é o IP do seu servidor de DNS

200.1.1.200 é o seu DNS Slave

Colocando uma armadura

A Novell desenvolveu um excelente framework de segurança chamado AppArmor e disponibilizou como open source.

Consiste basicamente em um patch no kernel e uma série de ferramentas de gerenciamento.

O conceito é: Uma determinada aplicação, independentemente de estar sendo executada pelo zezinho ou pelo root deve conseguir acessar somente determinados diretórios e arquivos, executar somente determinados comandos e utilizar somente determinadas bibliotecas.

O grande trunfo do AppArmor é que ele proteje seus servidor mesmo contra 0-day attacks. Se você preparar o perfil da sua aplicação muito bem são grandes as chances de seu servidor sair ileso mesmo num ataque a um daemon bugado.

Para isso você gera um arquivo com o “perfil” da aplicação e fala pro AppArmor: Amigão, esse binário só pode fazer isso aqui ó…

O Hardy já vem com o kernel patcheado e com as ferramentas de gerenciamento instaladas. Basta baixar os profiles e sair usando.

# apt-get install apparmor-profiles

Mas lembre-se do seguinte: Os profiles que você instalou levam em conta que você está utilizando os serviços conforme a configuração padrão do Ubuntu. Eu inclusive recomendo que você realmente faça isso sempre que possível, mas caso esteja utilizando alguma coisa diferente do padrão, um pouco de tweak pode ser necessário.

Pessoalmente senti falta de um profile para o Apache, mas depois de criar o meu eu entendi o motivo: Depende muito do que você vai rodar no seu webserver.

Talvez mais para frente eu escreva um artigo sobre o AppArmor, mas por enquanto, fique com este link da Wiki do Ubuntu.

UPDATE (29/08/2008 08:27): Meu amigo Mezzanotti, que é especialista em IT Security, mandou um link bem interessante que eu não conhecia: Center for Internet Security. Muitos tutoriais de hardening lá. Vale uma passada.

9 thoughts on “Ubuntu pronto para guerra

  1. Chico

    Eri,

    Muito bom o post. O início no estilo Tropa de Elite, ficou muito engraçado.
    Quanto a logs, já vi empresa fazendo log via porta serial. Onde a máquina de log só era acessível fisicamente e tinha um storage só para ela.
    Para quem não usa ubuntu ou outras distros que suportam nativamente o AppArmor, o SElinux também é uma boa pedida.

    abraços

    Chico

  2. Marcio Torres

    E eu que achei que meu servidor dhcp/squid era o mais seguro do mundo… rs… Engraçado a Novell ser a oriunda do Apparmor, e ter sofrido com uma intrusão. Realmente acho que é melhor escrever nas pedras…

  3. Eri Post author

    Márcio,

    A recente invasão foi nos servidores da RedHat, não da Novell.

    []’s

  4. Pingback: Configurações de segurança no Ubuntu Server | Abiyaa

  5. Lauro César Alves

    Foi da Red Hat mesmo… mas pelo que sei o Selinux não protege contra invasão, sua função é impedir que pessoas ou processos realizem operações que não deveriam ter permissões de realizar.

    um abraço.

  6. David Bentolila

    Cara, eu tinha instalado o debian, mas resolvi migrar para o ubuntu server.. há 2 meses tenho problema para mudar o documentRoot no apache 2…
    tem alguma coisa mais complexa para fazer?

    pois qnd mudo no arquivo 000-default

    DocumentRoot /var/www

    de /var/www para qlqr outra pasta da erro de permissão, mesmo os arquivos estando com permissao 777…

    alguma dica?

  7. Giorgio

    Opa amigo parabéns pela abordagem ! você falou um pouco sobre dmz e eu gostaria de saber se vc tem materiais que explicam como montar um dmz usando linux+iptables ? pois acho que a dmz aqui do meu trabalho esta mal estruturada; pois os servidores dentro da dmz tem livre acesso aos computadores da lan… tenho dúvidas tb quanto ao uso de servidores de banco de dados dentro da dmz… pode ou nao pode ?

  8. Julio Mauro

    Se todos os adms tivessem o minimo de decencia ou conhecimento para configurar um servidor o minimamente seguro, as coisas seriam muito mais difíceis para esses caras que adoram acabar com a sexta-feira de um admin.

    O grande problema, no meu modo de ver é que agora, qualquer um se acha administrador de sistemas, pois esses caras pensam que basta seguir um tutorial no google ou em alguma revista para se achar o máximo.

    O artigo ficou show de bola veio. parabens

Comments are closed.