Guía de seguridad y refuerzo de Apache Tomcat

Publicado: 2015-02-14

Una guía práctica para fortalecer y asegurar Apache Tomcat Server con las mejores prácticas.

Tomcat es uno de los servidores Servlet y JSP Container más populares. Es utilizado por algunos de los siguientes sitios web de alto tráfico:

  • LinkedIn.com
  • Dailymail.es
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

El siguiente gráfico muestra la posición de mercado de Tomcat en el servidor de aplicaciones Java.

tomcat-market-share
Fuente: Plumbr

Técnicamente, puede usar Tomcat como un servidor front-end para atender las solicitudes del sitio directamente. Sin embargo, en un entorno de producción, es posible que desee utilizar algunos servidores web como Apache, Nginx como front-end para enrutar las solicitudes a Tomcat.

El uso de un servidor web para manejar las solicitudes brinda beneficios de rendimiento y seguridad . Si está utilizando Apache HTTP como un servidor web front-end, entonces también debe considerar asegurarlo.

Tener una configuración predeterminada de Tomcat puede exponer información confidencial, lo que ayuda a los piratas informáticos a prepararse para un ataque a la aplicación.

Los siguientes se prueban en Tomcat 7.x, entorno UNIX.

Audiencia

Está diseñado para administradores de middleware, soporte de aplicaciones, analistas de sistemas o cualquier persona que trabaje o esté deseosa de aprender Tomcat Hardening and Security.

Es obligatorio un buen conocimiento del comando Tomcat y UNIX.

notas

Requerimos alguna herramienta para examinar los encabezados HTTP para su verificación. hay dos maneras de hacer esto.

Si está probando una aplicación orientada a Internet , puede usar las siguientes herramientas de encabezado HTTP para verificar la implementación.

  • Comprobador de encabezado HTTP
  • objetivo de piratas informáticos

Y para una aplicación de Intranet , puede usar Google Chrome, las herramientas de desarrollo de Firefox.

Como práctica recomendada, debe realizar una copia de seguridad de cualquier archivo que esté a punto de modificar.

Llamaremos a la carpeta de instalación de Tomcat como $tomcat a lo largo de estas pautas.

Repasemos los procedimientos de endurecimiento y fijación.

Eliminar banner del servidor

Eliminar el banner del servidor del encabezado HTTP es una de las primeras cosas que se deben hacer como refuerzo.

Tener un banner de servidor que exponga el producto y la versión que está utilizando y conduce a una vulnerabilidad de fuga de información.

De forma predeterminada, una página servida por Tomcat se mostrará así.

tomcat-server-header

Ocultemos los detalles del producto y la versión del encabezado del servidor.

  • Ir a la carpeta $tomcat/conf
  • Modificar server.xml usando vi
  • Agregar lo siguiente al Connector port
 Server =” “

Ex: -

 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
  • Guarde el archivo y reinicie Tomcat. Ahora, cuando acceda a una aplicación, debería ver un valor en blanco para el encabezado del servidor.
tomcat-remove-server-header

Inicio de Tomcat con un administrador de seguridad

Security Manager lo protege de un subprograma no confiable que se ejecuta en su navegador.

Ejecutar Tomcat con un administrador de seguridad es mejor que ejecutarlo sin uno. Tomcat tiene una excelente documentación sobre Tomcat Security Manager.

Lo bueno de esto es que no necesita cambiar ningún archivo de configuración. Es solo la forma en que ejecuta el archivo startup.sh .

Todo lo que tienes que hacer es iniciar –security con el argumento de seguridad.

 [root@geekflare 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. [root@geekflare bin]#

Habilitar SSL/TLS

La entrega de solicitudes web a través de HTTPS es esencial para proteger los datos entre el cliente y Tomcat. Para que su aplicación web sea accesible a través de HTTPS, debe implementar un certificado SSL.

Suponiendo que ya tiene el almacén de claves listo con el certificado, puede agregar la siguiente línea en server. xml en la sección Connector port .

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

Cambie el nombre y la contraseña del archivo Keystore por los suyos.

Si necesita ayuda con el proceso de almacenamiento de claves y CSR, consulte esta guía.

Hacer cumplir HTTPS

Esto solo es aplicable cuando tiene habilitado SSL. Si no, romperá la aplicación.

Una vez que haya habilitado SSL, sería bueno forzar la redirección de todas las solicitudes HTTP a HTTPS para una comunicación segura entre el usuario y el servidor de aplicaciones Tomcat.

  • Ir a la carpeta $tomcat/conf
  • Modificar web.xml usando vi
  • Agregue lo siguiente antes de la sintaxis </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>
  • Guarde el archivo y reinicie el Tomcat

Agregue el indicador Secure & HttpOnly a la cookie

Es posible robar o manipular la sesión de la aplicación web y las cookies sin tener una cookie segura. Es una bandera que se inyecta en el encabezado de respuesta.

Esto se hace agregando debajo de la línea en la sección de session-config del archivo web.xml

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

Captura de pantalla de configuración:

tomcat-solo http

Guarde el archivo y reinicie Tomcat para examinar el encabezado de respuesta HTTP.

Ejecute Tomcat desde una cuenta sin privilegios

Es bueno usar un usuario sin privilegios por separado para Tomcat. La idea aquí es proteger otros servicios en ejecución en caso de que alguna cuenta se vea comprometida.

  • Cree un usuario de UNIX, digamos tomcat
 useradd tomcat
  • Detenga el Tomcat si se está ejecutando
  • Cambiar la propiedad de $tomcat al usuario tomcat
 chown -R tomcat:tomcat tomcat/

Inicie Tomcat y asegúrese de que se esté ejecutando con el usuario de Tomcat

Eliminar aplicaciones predeterminadas/no deseadas

De forma predeterminada, Tomcat viene con las siguientes aplicaciones web, que pueden o no ser necesarias en un entorno de producción.

Puede eliminarlos para mantenerlo limpio y evitar cualquier riesgo de seguridad conocido con la aplicación predeterminada de Tomcat.

  • RAÍZ: página de bienvenida predeterminada
  • Documentos: documentación de Tomcat
  • Ejemplos: JSP y servlets para demostración
  • Administrador, administrador de host: administración de Tomcat

Están disponibles en la carpeta $tomcat/webapps

 [root@geekflare 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 [root@geekflare webapps]#

Cambiar el puerto y el comando SHUTDOWN

De forma predeterminada, Tomcat está configurado para apagarse en el puerto 8005.

¿Sabe que puede apagar la instancia de Tomcat haciendo un telnet a IP: puerto y emitiendo el comando APAGADO?

 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 #

¡Peligroso!

Verá, tener una configuración predeterminada conduce a un alto riesgo de seguridad.

Se recomienda cambiar el puerto de apagado de Tomcat y el comando predeterminado a algo impredecible.

  • Modifique lo siguiente en server.xml
 <Server port="8005" shutdown="SHUTDOWN">

8005 – Cambiar a algún otro puerto no utilizado

APAGADO – Cambiar a algo complicado

Ex-

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

Reemplazar la página predeterminada 404, 403, 500

Tener una página predeterminada para el error del servidor prohibido o no encontrado expone los detalles de la versión.

Veamos la página 404 predeterminada.

tomcat-predeterminado-404-página

Para mitigar, primero puede crear una página de error general y configurar web.xml para redirigir a una página de error general.

  • Vaya a $tomcat/webapps/$aplicación
  • Cree un archivo error.jsp usando el editor vi
 <html>
<cabeza> 
<title>Página de error</title>
</cabeza>
<body> ¡Eso es un error! </cuerpo>
</html>
  • Ir a la carpeta $tomcat/conf
  • Agregue lo siguiente en el archivo web.xml. Asegúrese de agregar antes de la sintaxis </web-app>
 <página de error> 
<código-de-error>404</código-de-error> 
<ubicación>/error.jsp</ubicación>
</página-de-error>
<página de error> 
<código-de-error>403</código-de-error> 
<ubicación>/error.jsp</ubicación>
</página-de-error>
<página de error> 
<código-de-error>500</código-de-error> 
<ubicación>/error.jsp</ubicación>
</página-de-error>
  • Reinicie el servidor tomcat para probarlo
Tomcat-error personalizado

¡Mucho mejor!

También puede hacer esto para java.lang.Exception . Esto ayudará a no exponer la información de la versión de Tomcat si hay alguna excepción de Java lang.

Simplemente agregue lo siguiente en web.xml y reinicie el servidor Tomcat.

 <página de error> 
<tipo-de-excepción>java.lang.Exception</tipo-de-excepción> 
<ubicación>/error.jsp</ubicación>
</página-de-error>

Espero que la guía anterior le dé una idea de cómo proteger Tomcat. Si desea obtener más información sobre la administración de Tomcat, consulte este curso en línea.
Además, aprenda cómo configurar WAS para que deje de solicitar la contraseña durante el apagado aquí.