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.
últimas postagens
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 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.
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
Adicionar sinalizador Secure & HttpOnly ao Cookie
É 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
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.