Segurança Tomcat: Guia Prático para Proteger seu Servidor

Guia Prático para Reforçar e Proteger o Servidor Apache Tomcat

O Tomcat é um dos servidores de Servlet e contêineres JSP mais populares. Ele é utilizado por diversos sites de alto tráfego, incluindo:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

O gráfico abaixo demonstra a posição do Tomcat no mercado de servidores de aplicações Java.

Fonte: Plumb

Tecnicamente, o Tomcat pode ser usado como um servidor de front-end para atender requisições diretamente. No entanto, em um ambiente de produção, é comum utilizar servidores web como Apache ou Nginx como front-end para direcionar as requisições ao Tomcat.

O uso de um servidor web para gerenciar as requisições proporciona benefícios em termos de desempenho e segurança. Se você estiver utilizando o Apache HTTP como servidor web de front-end, também é importante considerar a sua proteção.

A configuração padrão do Tomcat pode expor informações sensíveis, o que pode facilitar um ataque ao aplicativo. Este guia foi testado no Tomcat 7.x, em um ambiente UNIX.

Público-Alvo

Este guia foi desenvolvido para Administradores de Middleware, Suporte de Aplicações, Analistas de Sistemas ou qualquer pessoa interessada em aprender sobre o reforço e segurança do Tomcat.

É necessário um bom conhecimento dos comandos do Tomcat e do ambiente UNIX.

Observações

Para verificar as configurações, utilizaremos ferramentas de análise de cabeçalhos HTTP. Existem duas maneiras principais de realizar isso.

Para aplicações voltadas para a internet, você pode usar ferramentas específicas para análise de cabeçalhos HTTP para validar a implementação das configurações.

Para aplicações em intranet, as ferramentas de desenvolvedor do Google Chrome ou Firefox podem ser utilizadas.

Como boa prática, é recomendável fazer um backup de qualquer arquivo de configuração antes de modificá-lo.

Ao longo deste guia, nos referiremos à pasta de instalação do Tomcat como $tomcat.

A seguir, detalharemos os procedimentos de reforço e proteção do Tomcat.

Remoção do Banner do Servidor

Remover o banner do servidor do cabeçalho HTTP é uma das primeiras medidas de segurança que você deve implementar.

A exibição do banner do servidor expõe o produto e a versão utilizada, o que pode levar a vulnerabilidades de vazamento de informações.

Por padrão, uma página servida pelo Tomcat exibirá informações do servidor no cabeçalho HTTP.

Ocultaremos os detalhes do produto e da versão do cabeçalho do servidor:

  • Acesse a pasta $tomcat/conf.
  • Edite o arquivo server.xml com o editor vi.
  • Adicione o seguinte à porta do conector:

Server =” “

Exemplo:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />

  • Salve o arquivo e reinicie o Tomcat. Ao acessar um aplicativo, o cabeçalho do servidor deverá exibir um valor em branco.

Iniciando o Tomcat com um Gerenciador de Segurança

O Gerenciador de Segurança protege contra a execução de applets não confiáveis em seu navegador.

Executar o Tomcat com um gerenciador de segurança é mais seguro do que executá-lo sem. O Tomcat possui excelente documentação sobre o Gerenciador de Segurança do Tomcat.

O benefício é que você não precisa alterar nenhum arquivo de configuração. A diferença está apenas na forma como você executa o arquivo startup.sh.

Basta iniciar o Tomcat com o argumento –security:

[[email protected] bin]# ./startup.sh -security
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.
[[email protected] bin]#

Habilitar SSL/TLS

Utilizar HTTPS para atender requisições web é essencial para proteger os dados entre o cliente e o Tomcat. Para tornar seu aplicativo web acessível via HTTPS, é necessário implementar um certificado SSL.

Assumindo que você já tenha o keystore pronto com o certificado, adicione a seguinte linha no arquivo server.xml na seção da porta do conector:

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

Modifique o nome e a senha do arquivo Keystore com suas informações.

Caso necessite de auxílio com o processo de geração do keystore e CSR, consulte este guia.

Forçar HTTPS

Esta configuração só se aplica caso você tenha habilitado o SSL. Caso contrário, o aplicativo poderá apresentar problemas.

Após habilitar o SSL, é recomendável forçar o redirecionamento de todas as requisições HTTP para HTTPS, garantindo uma comunicação segura entre o usuário e o servidor de aplicações Tomcat.

  • Acesse a pasta $tomcat/conf.
  • Edite o arquivo web.xml utilizando o vi.
  • Adicione o seguinte antes da tag </web-app>:
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
  • Salve o arquivo e reinicie o Tomcat.

Adicionar Flag Secure e HttpOnly ao Cookie

É possível roubar ou manipular a sessão e os cookies de um aplicativo web sem que o cookie seja seguro. Trata-se de um flag injetado no cabeçalho de resposta.

Para isso, adicione as seguintes linhas na seção session-config do arquivo web.xml:

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

Configuração:

Salve o arquivo e reinicie o Tomcat para analisar o cabeçalho de resposta HTTP.

Executar o Tomcat com uma Conta Não Privilegiada

É recomendável utilizar um usuário não privilegiado separado para o Tomcat. O objetivo é proteger outros serviços em execução caso alguma conta seja comprometida.

  • Crie um usuário UNIX, por exemplo, tomcat:
useradd tomcat
  • Pare o Tomcat caso esteja em execução.
  • Altere a propriedade do diretório $tomcat para o usuário tomcat.
chown -R tomcat:tomcat tomcat/

Inicie o Tomcat e verifique se ele está sendo executado com o usuário tomcat.

Remover Aplicativos Padrão/Indesejados

Por padrão, o Tomcat vem com os seguintes aplicativos web, que podem não ser necessários em um ambiente de produção:

Você pode excluí-los para manter a instalação limpa e evitar qualquer risco de segurança relacionado aos aplicativos padrão do Tomcat.

  • ROOT – página de boas-vindas padrão
  • docs – Documentação do Tomcat
  • examples – JSP e servlets para demonstração
  • manager, host-manager – administração do Tomcat

Esses aplicativos estão localizados na pasta $tomcat/webapps.

[[email protected] webapps]# ls -lt
drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs
drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager
drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT
[[email protected] webapps]#

Alterar a Porta e o Comando SHUTDOWN

Por padrão, o Tomcat está configurado para ser desligado na porta 8005.

Você sabia que é possível desligar a instância do Tomcat através de um telnet para IP:porta e enviando o comando SHUTDOWN?

Chandans # telnet localhost 8005
Trying ::1... telnet:
connect to address ::1:
Connection refused Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN Connection closed by foreign host.
Chandans #

Isso é perigoso!

Configurações padrão representam um alto risco de segurança.

Recomenda-se alterar a porta de desligamento do Tomcat e o comando padrão para algo imprevisível.

  • Modifique o seguinte em server.xml:

<Server port="8005" shutdown="SHUTDOWN">

8005 – Altere para outra porta não utilizada.

SHUTDOWN – Altere para algo complexo.

Exemplo:

<Server port="8867" shutdown="NOTGONNAGUESS">

Substituir as Páginas Padrão 404, 403 e 500

Utilizar as páginas de erro padrão para “não encontrado”, “proibido” e “erro do servidor” expõe informações da versão do Tomcat.

Veja a página 404 padrão:

Para mitigar isso, crie uma página de erro genérica e configure o arquivo web.xml para redirecionar para essa página.

  • Acesse a pasta $tomcat/webapps/$application.
  • Crie um arquivo error.jsp utilizando o editor vi:
<html>
<head>
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Acesse a pasta $tomcat/conf.
  • Adicione o seguinte ao arquivo web.xml. Certifique-se de adicionar antes da tag </web-app>:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
  • Reinicie o servidor Tomcat para testar as alterações.

Bem melhor!

Você também pode fazer isso para java.lang.Exception. Isso evitará a exposição de informações da versão do Tomcat caso ocorra alguma exceção Java Lang.

Basta adicionar o seguinte no web.xml e reiniciar o servidor Tomcat:

<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>

Esperamos que este guia tenha fornecido uma boa visão sobre como proteger o Tomcat. Caso deseje aprofundar seus conhecimentos em administração do Tomcat, confira este curso online. Além disso, descubra como configurar o WAS para evitar solicitar senha durante o desligamento aqui.