Guía de seguridad y refuerzo de Apache Tomcat

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.

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 cualquiera que trabaje o esté ansioso por 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.

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í.

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 puerto del conector
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.

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 Administrador de seguridad de Tomcat.

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 Tomcat con el argumento de seguridad.

[[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

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 listo el almacén de claves con el certificado, puede agregar la siguiente línea en el archivo server.xml en la sección Puerto del conector.

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 de
<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

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 configuración de sesión del archivo web.xml

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

Captura de pantalla de configuración:

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

[[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]#

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.

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>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Ir a la carpeta $tomcat/conf
  • Agregue lo siguiente en el archivo web.xml. Asegúrese de agregar antes de la sintaxis de
<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 el servidor tomcat para probarlo

¡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.

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

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 por Internet.
Además, aprenda cómo configurar WAS para que deje de solicitar la contraseña durante el apagado aquí.