quarta-feira, 6 de janeiro de 2016

Dicas de Hardening e Proteção do Linux



Garantir o Haderning e alta disponibilidade doas aplicações e serviços de nossas redes e servidores é uma tarefa quase que obrigatória nos dia de hoje. Nem sempre trabalhamos com uma equipe focada em desenvolvimento ou implementações seguras e isso pode acabar abrindo brechas para atacantes, malwares e outros tipos de vetores de ataques maliciosos que possam acabar comprometendo nosso negócio.
Portanto, preparei este simples manual com algumas dicas de proteção dos nossos servidores Linux afim de compartilhar um pequeno 'checklist' de implementações seguras.

1. Encriptando comunicações de informações 

Praticamente todos os dados trafegados pela rede de forma comum são facilmente monitorados e capturados por sniffers, spoofing e outras técnicas maliciosas aplicadas por crackers mau intencionados e podem ser utilizadas futuramente para fins ilegais ou prejudiciais para a empresa. Porém, garantir camadas de segurança para esse trafego de informações é possível com a ajuda de tokens, chaves e certificados.

Veja também:

1.1 Use softwares que utilizam criptografia como OpenSSH, ProFTP com Certificado SSL, RSync



1.2 Utilizando o GnuPC você pode encriptar a transferência de dados usando chaves publicas e privadas entre servidores. Ela é um recurso muito vasto que pode ser explorado desde tarefas de usuários convencionais até tarefas mais específicas como sincronia entre máquinas, envio de XML, Json, e etc.

1.3 OpenVPN é uma ótima e simples solução para criar tuneis VPN, além de ser Open Source ela conta com a criptografia de certificados SSL.

1.4 HTTPS no Apache é uma forma muito efetiva de garantir a encriptação da comunicação dos clientes com seu web server. A solução SSL faz muito pouco, porém ainda sim é muito efetiva na hora de impedir interceptações de trafego e sessões.


2. Menos é mais. Diminuindo os serviços e pacotes, diminuindo vulnerabilidades


É comum durante o inicio de carreira estudantes e sysadmins adotarem a instalação de ISOs completas na hora de subir servidores. Porém, é uma dica valiosa (experiência própria) manter o mínimo possível rodando no servidor para garantir segurança e performance. Alias, quem nunca instalou uma ISO do Debian em um servidor, ficando assim serviços de produção como Apache, MySQL, PHP, Samba, FTP junto a outros serviços desnecessários como Libreoffice e pacotes auxiliares.

2.1 Menos é mais mesmo, utilize sempre uma minimal ISO.

Distros como Debian e CentOS sempre tem em suas páginas de Download versões minimas do sistema operacional. Essas versões só possuem o mínimo do básico para levantar o sistema junto a outros pacotes de gerenciamento básicos como auxiliares de rede ping, traceroute e os binários default do Linux. Devemos sempre deixar nossas aplicações mais enxutas possíveis para evitar perdas de performance e criar brechas de segurança.




2.2 Visualize e remova tudo que não for utilizar no servidor.

Em Distribuições CentOS / Red Hat você pode listar, visualizar e desinstalar os softwares presentes na máquina com os respectivos
 # yum list installed  
 # yum list packageName  
 # yum remove packageName  

Ou em distribuições Debian
 # dpkg --list  
 # dpkg --info packageName  
 # apt-get remove packageName  


3. Mantenha-se minimalista, um sistema ou instância para cada serviço

As vezes não temos muitos recursos para utilizarmos para montar nosso ambiente de produção do jeito que queremos e acabamos por intermédio da necessidade, subir diversas funções em um mesmo servidor. Há casos e casos, mas no entanto, se houver a possibilidade de virtualização ou de hardwares dedicados para subir os servições de rede de forma separada, é uma boa prática, tanto para disaster recovery quanto para performance. Se houver recursos, utilize, ou você pode acabar gerenciando máquinas ou instâncias que correm milhões de serviços ao mesmo tempo como DNS, DHCP, Samba, SQUID, Firewall, VPN e na falha dela, todos os serviços acabariam indisponíveis.

3. 1 Virtualize sempre que possível. 

Muitos serviços de rede não exigem tamanha capacidade de processamento, como DHCP, DNS, Firewall, e SQUID, claro... Dependendo da regra de negócio, então é viável criar máquinas virtuais para a rede para oferecer tais serviços, possibilitando assim a clonagem das mesmas, versionamento e aproveitando melhor o Hardware que estaria dedicado para essas soluções.



4. Atualização do sistema programada


É de bastante interesse do Sysadmin, também uma opinião muito controversa, manter todo o seu ambiente atualizado. Claro que essa regra varia de acordo com sua regra de negócio, porém é valida em alguns pontos de segurança.

4.1 Agende a atualização do sistema

É viável criar Crontabs com scripts ou comandos de atualização e upgrade do sistema operacional. Em sistemas CentOS e Debian, é muito simples. Basca criar um cron para em determinado dia, em determinado horário e apontar os argumentos de atualização


Em ambientes CentOS ou Red Hat
 # yum update  

Ou em ambientes Debian
 # apt-get update && apt-get upgrade  



5. Use e abuse das extensões de segurança do Linux 

O Linux conta com vários patches de segurança. Eles muitas vezes gerenciadores de permissões que reforçam as limitações da rede e de outros programas ao acessarem recursos do Kernel e possibilitam a implantação de politicas de segurança no ambiente.

5.1 SELINUX, seu melhor amigo

O SELINUX é um dos patches mais flexíveis e já vem nativo em plataformas Red Hat e CentOS. Ele possui uma gestão do MAC (Mandatory Access Control) e DAC (Discretionary Access Control) e gerencia de forma muito aprofundada as aplicações, processos, usuários e grupos, tentando criar o máximo de barreiras possíveis contra ações maliciosas contra o servidor. Vale a pena dar uma aprofundada para saber mais sobre os blocks e logs que ele pode gerar pra gente.


6. Crie politicas de senhas para os usuários do servidor

Adicione e gerencie usuários no Linux de forma segura implantando gestão de senhas procurando mantê-las sempre seguras e fortes. De preferências contendo caracteres numericos, alfanuméricos, maiusculas, minusculas e especiais. Você pode utilizar ferramentas como John the Ripper e Hashcat para verificar senhas fracas no servidor. 


7. Desabilite o login do Root

O root é o usuário com permissão máxima no sistema, o mais poderoso por assim dizer, porém também o mais obvio nos padrões Unix e o maior alvo de ataques. Então é melhor nunca usá-lo diretamente. Opte por utilizar permissões sudo nos usuários do sistema. 


8. Rode com o mínimo 

Desabilite todos os serviços desnecessários. Tanto por perfomance quanto por segurança. Essa dica e uma extensão direta da dica 2 e 3. Você pode usar o chkconfig para verificar quais serviços estão subindo no init  3 "Modo multiusuário, ou seja, muitas vezes default" e desabilitar todos aqueles que você não utiliza.

 # chkconfig --list | grep '3:on'  
  
Parando e desabilitando os serviços

 # service nomedoserviço stop  
 # chkconfig nomedoserviço off  



9. Monitore as portas abertas e em listening 

9.1 Portas em Listening

Muitos processos utilizam portas e sockets para se comunicar com outros serviços. É importante sempre monitorar nossos sockets para evitar vulnerabilidades banais e verificar os processos que estão escutando portas específicas

 # netstat -tulpn  




9.2 Portas abertas internamente

 #nmap -sS -sC localhost  




9.3 Portas abertas pelo Firewall

No meu caso eu não deixo nenhuma porta aberta para minha estação de trabalho. O correto é deixar rodando no servidor somente as portas realmente necessárias.

 #nmap -sS -sT -Pn 192.168.0.202





10. Desapegue do X-Server 

Não é uma boa pratica deixar servidores X (interface gráfica) rodando em servidores de produção. Tanto por performance quanto por pacotes desnecessários rodando ali. Remova sua interface gráfica totalmente. Cuidado com a opção --purge do apt.

Ambientes Debian 

 # sudo apt-get autoremove kde gnome xfce lxde   

Ambientes CentOS 

 # sudo yum remove kde gnome xfce lxde   


11. Separe as pastas chaves em partições disco 

Separando as pastas /home /opt/ /var em partições diferentes do disco, você ganha muito em performance, segurança e uma maior chance de recuperação das mesmas em caso de falhas do HD ou do sistema operacional.



12. Use serviços de Firewall para sua aplicação Web

Nem sempre podemos contar com o conhecimento de segurança e prevenção de vetores de ataque de programadores, então é de boa pratica contar com serviços de firewall em aplicações Web. Uma alternativa muito bacana é o Mod Security. Aqui no blog já abordamos algumas configurações do mesmo.


13. Passe o pente fino no serviços

Contamos com várias ferramentas que nos auxiliam no diagnostico de hardening do nosso sistema, além de scanners automátizados de vulneabilidades a nível de servidor e de aplicação. É também uma boa prática se manter atualizado dessas ferramentas afim de antecipar o óbvio e evitar de ser alvo de ataques e exploits. Além é claro que garantir uma maior disponibilidade no nosso sistema.

14. Abuse dos Backups 

Seja qualquer que for o tipo de aplicação que esteja rodando em seu servidor, garantir a redundância, disponibilidade e backup em caso de desastre é essencial para o bom funcionamento do negócio da empresa ou projeto. Portanto garanta sempre uma rotina saudável de backups do Fileserver, Bancos de Dados, Storages e afins

Artigo sempre em construção :) 

Espero ter ajudado!

SOBRE O AUTOR

Matheus Fidelis

http://msfidelis.github.io/

Power Ranger, Piloto de Helicópteros e Astronauta da NASA. Desenvolvedor Web PHP com foco em Backend e POO, Linux SysAdmin DevOps e Entusiasta Python. Criou esse site pra contribuir com a comunidade com coisas que aprende dentro de um setor maluco de TI :)

1 comentários:

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com