Guia de proteção e segurança do Apache Tomcat

Um guia prático para fortalecer e proteger o Apache Tomcat Server com as melhores práticas.

O Tomcat é um dos servidores Servlet e JSP Container mais populares. É usado por alguns dos seguintes sites de alto tráfego:

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

O gráfico abaixo mostra a posição de mercado do Tomcat no servidor de aplicativos Java.

Fonte: Plumb

Tecnicamente, você pode usar o Tomcat como um servidor front-end para atender solicitações do site diretamente. No entanto, em um ambiente de produção, você pode querer usar alguns servidores web como Apache, Nginx como front-end para rotear as solicitações para o Tomcat.

O uso de um servidor da Web para lidar com as solicitações oferece benefícios de desempenho e segurança. Se você estiver usando o Apache HTTP como um servidor web front-end, considere protegê-lo também.

A configuração padrão do Tomcat pode expor informações confidenciais, o que ajuda o hacker a se preparar para um ataque ao aplicativo.

A seguir são testados no Tomcat 7.x, ambiente UNIX.

Público

Isso foi desenvolvido para Administrador de Middleware, Suporte a Aplicativos, Analista de Sistemas ou qualquer pessoa que esteja trabalhando ou ansiosa para aprender o Tomcat Hardening and Security.

Bom conhecimento do comando Tomcat e UNIX é obrigatório.

Notas

Exigimos alguma ferramenta para examinar cabeçalhos HTTP para verificação. Há duas maneiras de você fazer isto.

Se estiver testando um aplicativo voltado para a Internet, você poderá usar as seguintes ferramentas de cabeçalho HTTP para verificar a implementação.

E para um aplicativo de Intranet, você pode usar as ferramentas de desenvolvedor do Google Chrome e Firefox.

  Como adicionar e personalizar widgets na tela inicial do iPad

Como prática recomendada, você deve fazer um backup de qualquer arquivo que esteja prestes a modificar.

Chamaremos a pasta de instalação do Tomcat como $tomcat ao longo destas diretrizes.

Vamos passar pelos procedimentos de endurecimento e fixação.

Remover banner do servidor

Remover o banner do servidor do cabeçalho HTTP é uma das primeiras coisas a fazer como proteção.

Ter um banner de servidor expõe o produto e a versão que você está usando e leva à vulnerabilidade de vazamento de informações.

Por padrão, uma página servida pelo Tomcat será exibida assim.

Vamos ocultar os detalhes do produto e da versão do cabeçalho do servidor.

  • Vá para a pasta $tomcat/conf
  • Modifique server.xml usando 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. Agora, ao acessar um aplicativo, você deverá ver um valor em branco para o cabeçalho do servidor.

Iniciando o Tomcat com um gerenciador de segurança

O Security Manager protege você de um applet não confiável em execução em seu navegador.

Executar o Tomcat com um gerenciador de segurança é melhor do que executar sem um. O Tomcat tem uma excelente documentação sobre Gerenciador de segurança do Tomcat.

O bom disso é que você não precisa alterar nenhum arquivo de configuração. É apenas a maneira como você executa o arquivo startup.sh.

Tudo o que você precisa fazer é 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]#

Ativar SSL/TLS

O atendimento de solicitações da Web por HTTPS é essencial para proteger os dados entre o cliente e o Tomcat. Para tornar seu aplicativo da Web acessível por meio de HTTPS, você precisa implementar o certificado SSL.

Supondo que você já tenha o keystore pronto com o certificado, você pode adicionar a linha abaixo 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"

Altere o nome e a senha do arquivo Keystore com o seu.

  Como calcular a soma das células no Excel

Se você precisar de ajuda com o processo de armazenamento de chaves e CSR, consulte este guia.

Aplicar HTTPS

Isso só é aplicável quando você ativou o SSL. Caso contrário, ele interromperá o aplicativo.

Depois de habilitar o SSL, seria bom forçar o redirecionamento de todas as solicitações HTTP para HTTPS para comunicação segura entre o usuário e o servidor de aplicativos Tomcat.

  • Vá para a pasta $tomcat/conf
  • Modifique web.xml usando vi
  • Adicione o seguinte antes da sintaxe
<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

É possível roubar ou manipular a sessão e os cookies do aplicativo da Web sem ter um cookie seguro. É um sinalizador que é injetado no cabeçalho de resposta.

Isso é feito adicionando abaixo da linha na seção session-config do arquivo web.xml

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

Captura de tela de configuração:

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

Execute o Tomcat de uma conta sem privilégios

É bom usar um usuário não privilegiado separado para o Tomcat. A ideia aqui é proteger outros serviços em execução caso alguma conta seja comprometida.

  • Crie um usuário UNIX, digamos tomcat
useradd tomcat
  • Pare o Tomcat se estiver em execução
  • Altere a propriedade do $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 do tomcat

Remover aplicativos padrão/indesejados

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

Você pode excluí-los para mantê-los limpos e evitar qualquer risco de segurança conhecido com o aplicativo padrão do Tomcat.

  • ROOT – página de boas-vindas padrão
  • Documentos – Documentação do Tomcat
  • Exemplos – JSP e servlets para demonstração
  • Gerente, gerente de host – administração do Tomcat
  Existe algum Uber Free Ride Hack?

Eles estão disponíveis 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 porta e comando SHUTDOWN

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

Você sabe que pode desligar a instância do tomcat fazendo um telnet para IP: port e emitindo 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 #

Perigoso!

Veja bem, ter uma configuração padrão leva a 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 – Mude para alguma outra porta não utilizada

SHUTDOWN – Mudar para algo complicado

Ex-

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

Substituir a página padrão 404, 403, 500

Ter a página padrão para não encontrado, proibido, erro do servidor expõe os detalhes da versão.

Vejamos a página 404 padrão.

Para atenuar, você pode primeiro criar uma página de erro geral e configurar o web.xml para redirecionar para uma página de erro geral.

  • Vá para $tomcat/webapps/$application
  • Crie um arquivo error.jsp usando o editor vi
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Vá para a pasta $tomcat/conf
  • Adicione o seguinte no arquivo web.xml. Certifique-se de adicionar antes da sintaxe
<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 testá-lo

Muito melhor!

Você também pode fazer isso para java.lang.Exception. Isso ajudará a não expor informações de versão do tomcat se houver alguma exceção de 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>

Espero que o guia acima lhe dê uma ideia de como proteger o Tomcat. Se você deseja aprender mais sobre a administração do Tomcat, confira este curso online.
Além disso, saiba como configurar o WAS para parar de pedir senha durante o desligamento aqui.