Servidor web na arquitetura de um ambiente seguro
Um Servidor Web é um computador com software e hardware configurados para hospedagem de aplicações. Os códigos desenvolvidos para as páginas ficam armazenados na memória interna do servidor. O software é responsável por fazer a comunicação através de protocolos com o computador do cliente. Sendo assim, a principal função do servidor web é processar as requisições através dos scripts e responder de maneira adequada.
É importante entender que um servidor web não é um computador convencional que pode ser conectado à rede corporativa e tudo estará resolvido. Diferente das estações de trabalho que estão atrás das camadas de proteção da rede, como por exemplo o firewall, os servidores web estão expostos a Internet, pois é dessa forma que a comunicação contendo página web da sua empresa será trocada com os usuários que acessam.
Justamente, por essa exposição a rede mundial de computadores, os servidores web são geralmente o primeiro alvo onde cibercriminosos procuram iniciar seus ataques. Se, eventualmente, esses serviços não estiverem devidamente configurados, com bons níveis de segurança, estes serão facilmente explorados, e, garantirão o sucesso do criminoso.
Os ataques mais comuns a servidores web se dão por conta de configurações que revelam informações sobre os serviços que estão rodando, SQL injection, roubos de sessão e até mesmo brechas por não ter instalado as versões mais recentes dos serviços. Em outras palavras, se um servidor for mal configurado, ou ainda, estar com as configurações padrões, sua empresa estará correndo o risco de ter as suas informações vazadas ou comprometidas. O pior de tudo, é que você pode descobrir isso de fontes externas, depois que seus dados já foram expostos.
Considerando isso, decidimos criar este material com o intuito de compartilhar boas práticas referentes a segurança de servidores, e que, são adotadas mundialmente.
Configurações de segurança recomendadas para servidores web
Uma maneira muito comum e amplamente adotada pelos cibercriminosos para identificar se um determinado servidor possui vulnerabilidades, é por meio da assinatura dos serviços, também conhecida como footer. Do ponto de vista do agente mal intencionado, essas informações são valiosas. Com elas, um atacante consegue identificar quais serviços estão rodando e em quais versões. Com isso, o criminoso pesquisa por falhas em determinada versão do serviço e executa o ataque.
A ocultação dessas informações sensíveis é considerada uma boa prática, dificultando assim a sondagem por parte de um possível atacante. A desativação da assinatura do servidor impede que o nome do servidor, o número da versão do serviço e outras informações sejam exibidas. Também é possível ocultar mensagens de erro, informações dos módulos instalados e outras informações de diretórios mediante solicitação ou quando uma página com erro 404 for apresentada.
Se você quiser proteger seu servidor dessas técnicas de identificação, procure o arquivo de configuração e defina os parâmetros, neste exemplo para Apache, "ServerSignature Off" e "ServerTokens Prod".
Por padrão, a maioria dos servidores web, não tem definido a captura de log para acessos. Esses logs podem ser personalizados e configurados para capturar conforme a necessidade específica da sua organização. Podem ser gerados e gravados em disco, ou ainda, podem ser utilizados por um software externo, como por exemplo um SIEM. As condições que geram os registros de eventos também podem ser customizadas, mesmo que inicialmente possa parecer muito amplo, o importante é registrar log para as principais informações como IP do solicitante, identificação da sessão e do host, bytes enviados e recebidos, entre outros. Cabe ressaltar que, os registros de log são fundamentais para uma análise forense em caso de incidentes cibernéticos.
Outra medida de segurança, que se aplica não apenas aos servidores web, mas também a toda administração de sistemas, é a utilização de se usuários de contas diferentes daquelas de administração (administrador ou root). Ao fazer isso, sua organização estará adicionando uma camada de defesa no caso de um invasor obter as credenciais para o usuário que roda o serviço. Além disso, é importante que essa conta tenha apenas as permissões necessárias para rodar o serviço a qual ela é responsável.
Se o seu servidor web foi utilizado apenas para fins limitados, como por exemplo, compartilhamento de arquivos internos, hospedagem de um site ou sistema de uso exclusivamente interno pela corporação, é recomendado que os acessos a esse servidor sejam limitados aos endereços internos da sua organização.
Restringir os acessos externos a um determinado serviço representa uma enorme proteção ao sistema hospedado, uma vez que um atacante externo não conseguirá nem mesmo chegar ao servidor. A range de endereços IP que tem permissão para acessar o seu servidor pode ser configurada, neste exemplo para Apache, no arquivo httpd.conf.
<Directory /seusite>
Options None
AllowOverride None
Order deny,allow
Deny from All
Allow from 10.10.10.0/24 (range de IP da sua organização)
</Directory>
Apesar de terem diversas vulnerabilidades conhecidas mundialmente, muitos servidores web ainda utilizam os protocolos SSL 2.0/3.0 e TLS 1.0 e 1.1 por padrão. Essa prática coloca em risco os dados trafegados por meio desses protocolos de criptografia, sendo assim, é recomendado a desativação das versões supracitadas e adoção do TLS 1.2 como protocolo padrão.
Para servidores que utilizam apache é possível aplicar essas melhorias por meio da alteração do arquivo ssl.conf, seguindo esse exemplo:
SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLProtocol +TLSv1.2
A utilização de cerificados SSL nos servidores é recomendada, permitindo assim o uso do protocolo HTTPS na transmissão dos dados. Assim, todas informações trafegadas estarão criptografadas e com um bom nível de segurança. Além de proteger os dados transmitidos, o uso de certificados também ajuda o seu site a ganhar melhores avaliações em mecanismos de buscas.
Semelhante à desativação das assinaturas de servidores web, os servidores web por padrão exibem o conteúdo dos documentos e arquivos no diretório raiz quando um arquivo index.html está faltando. Isso significa que um potencial atacante poderá visualizar todos os arquivos e subdiretórios que são apresentados ao navegador.
Para mitigar essa vulnerabilidade, neste exemplo para Apache, defina o valor None para o parâmetro Options, como na sugestão:
<Directory /var/www/SeuSite>
Options None
Order allow,deny
Allow from all
</Directory>
Se você instalou seu servidor web e manteve as configurações padrões do sistema, muito provavelmente módulos ou serviços desnecessários estão ativados. Quanto mais serviços e funções um servidor web executa, maior é a superfície de ataque que poderá ser explorada por um atacante. Uma boa prática relacionada a segurança, e, diga-se de passagem bem simples, é desativar todo e qualquer módulo ou serviço que não esteja sendo utilizado.
Quando falamos em portas e serviços TCP, temos 65.535 portas disponíveis que poderiam ser utilizadas em cada servidor. Seu servidor claramente não precisa de tantos serviços assim, e nem mesmo permanecer com tantas portas abertas. Qualquer porta, interna ou externa, que não está sendo usada, deve ser desativada o quanto antes.
Por último, mas certamente não menos importante, verifique constantemente se há atualizações ou patches de correções para o seu servidor. Neste caso, não estamos falando apenas de instalar a versão mais recente do serviço, mas sim, manter as atualizações frequentes, instalando-as o mais breve possível. Quando uma vulnerabilidade em um determinado serviço é descoberta, patches de atualizações são lançados pelos fabricantes e desenvolvedores com o intuito de corrigir essas falhas. Manter um sistema desatualizado, significa manter um sistema vulnerável a ataques.