Dicas para manter seu ambiente Web seguro

Cada vez mais frequentes, os ataques á sites Web tiram o sono de qualquer Administrador. Abaixo listamos algumas dicas para melhorar a segurança de seu ambiente Web. Serão abordadas dicas para Servidores com Apache e Nginx.

Oculte a versão do software utilizado

Tanto o Apache quanto Nginx, principalmente em suas telas de erro, exibem a informação da versão do software utilizada. Essa informação, aparentemente inofensiva, pode ser útil para o atacante, que pode buscar um ataque “específico” para versão que você está usando.

Para desabilitar no Apache, basta alterar a seguinte opção no arquivo httpd.conf:

ServerSignature Off

Para desabilitar no Nginx, alterar a opção abaixo no nginx.conf:

server_tokens off;

Desabilitar métodos TRACE/TRACK

Esses métodos vem habilitados por padrão no Apache. Para desabilitá-los, basta alterar a opção abaixo no httpd.conf:

TraceEnable off

Utilize “VirtualHosts” e restrinja acesso “direto” ao servidor.

Utilize VirtualHosts mesmo quando tiver apenas um site no servidor. Isso evitará que o site seja “descoberto” por scans na rede.

Sistema de arquivos “somente leitura” para usuário do sistema

Dê permissão de escrita somente nos diretórios que forem necessários (pasta de uploads, por exemplo). Neste caso, pode-se retirar permissão de execução para estas pastas.

Restrinja opções “perigosas” do PHP

Algumas funções do PHP podem ser extremamente “perigosas” se não utilizadas adequadamente, e em grande parte das vezes podem ser desabilitadas sem prejuízo nenhum. A opção para desabilitá-las se encontra no arquivo php.ini (normalmente em /etc/php.ini). Segue abaixo algumas:

# Impede ataques de RFI e LFI (Remote e Local File Inclusion)
allow_url_fopen = Off
# Impede que mensagens de erros sejam exibidas no browser
display_errors = Off
# Impede a execução de caracteres especiais digitados em campos de formulário convertendo-os em barra invertida.
magic_quotes_gpc = Off
# Impede o acesso a arquivos remotos através dos parâmetros include ou require, evitando injeção de código malicioso.
allow_url_include = Off
# Impede a exibição das informações sobre o PHP no browser
expose_php = Off
# Impede a execução de strings maliciosas devido as falhas no desenvolvimento da aplicação.
register_globals = Off
# Desabilitar algumas funções “perigosas” do PHP:
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open

Restrinja acesso páginas administrativas

Quase a metade dos sites da Internet (45%) utilizam algum tipo de CMS (Content Management System). Em geral, os softwares CMS possuem uma interface de administração (/wp-admin, /administrator, etc); por meio desta interface o usuário faz a administração do site. Esta página também pode ser a “porta de entrada” de possíveis atacantes, por meio de ataques de força bruta ou utilizando alguma credencial descoberta previamente. Uma boa prática para evitar isso é restringir (por meio de um arquivo .htacess, por exemplo) o acesso á essas páginas, deixando liberado apenas para quem de fato utiliza a mesma.

Utilize um Firewall de Aplicação Web (WAF)

Um Firewall de Aplicação Web ou WAF (Web Application Firewall), é um filtro onde se aplica um conjunto de regras para uma conexão HTTP. Uma opção é o ModSecurity, que é amplamente utilizado e possui vasta documentação na Internet.
O uso do WAF não garante por si só a segurança, mas é uma ferramenta importante para a mitigação dos problemas e vulnerabilidades dos softwares/sistemas.

Utilize HTTPS

O HTTPS é a implementação do protocolo HTTP sob uma camada de proteção SSL/TLS. Essa camada criptografa os dados da conexão, fazendo com que a transmissão de dados entre o servidor e o cliente seja feita de forma segura. Permite também que o cliente possa verificar a autenticidade do servidor com o uso do Certificado Digital.
Recomenda-se que o serviço seja configurado para utilizar os protocolos e cifradores mais recentes. O link abaixo pode auxiliar na configuração do software para utilizar HTTPS:
https://mozilla.github.io/server-side-tls/ssl-config-generator/

Habilite SELinux

O SELinux está presente no kernel Linux desde a versão 2.6.x, no entanto é muito comum os Administradores de servidores desabilita-lo. Estimativas do CSIRT Unicamp mostram que mais de 90% dos incidentes com Servidores Web Linux poderiam ter sido evitados se o SELinux estivesse ativo.
O SELinux provê uma camada de proteção extremamente importante para o sistema. Recente escrevemos três artigos sobre a configuração do SELinux, que se econtram nos links abaixo:

SELinux: Um importante aliado na Segurança de Servidores Linux (parte 1)
SELinux: Um importante aliado na Segurança de Servidores Linux (parte 2)
SELinux: Um importante aliado na Segurança de Servidores Linux (parte 3)

Fontes:

OWASP
Technet Microsoft
W3Techs