Una guía práctica para endurecer y asegurar el servidor Apache Tomcat con las mejores prácticas.

Tomcat es uno de los servidores de Servlets y Contenedores JSP 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 gráfico siguiente muestra la posición de mercado de Tomcat en el servidor de aplicaciones Java.

tomcat-market-share
Fuente: Plumbr

Técnicamente, puede utilizar Tomcat como servidor front-end para servir directamente las peticiones del sitio. 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 peticiones al Tomcat.

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

Una configuración por defecto de Tomcat puede exponer información sensible, lo que ayuda al hacker a preparar un ataque a la aplicación.

A continuación se prueban en Tomcat 7.x, entorno UNIX.

Audiencia

Este curso está diseñado para Administradores de Middleware, Soporte de Aplicaciones, Analistas de Sistemas, o cualquier persona que trabaje o tenga ganas de aprender el endurecimiento y la seguridad de Tomcat.

Un buen conocimiento de Tomcat y comandos UN IX es obligatorio.

Notas

Necesitamos alguna herramienta para examinar las Cabeceras HTTP para su verificación. Hay dos formas de hacerlo.

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

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

Como mejor práctica, debe realizar una copia de seguridad de cualquier archivo que vaya a modificar.

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

Repasemos los procedimientos de endurecimiento y seguridad.

Eliminar el Banner del Servidor

Eliminar el Banner del Servidor del encabezado HTTP es una de las primeras cosas que hay que hacer como hardening.

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

Por defecto, una página servida por Tomcat se mostrará así.

tomcat-server-header

Vamos a ocultar los detalles del producto y la versión de la cabecera del servidor.

  • Vaya a la carpeta $tomcat/conf
  • Modifique server.xml utilizando vi
  • Añada lo siguiente al puerto Conector
Servidor =" "

Ej: –

<conector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" servidor=" " redirectport="8443"></conector>
  • Guarde el archivo y reinicie el Tomcat. Ahora, cuando acceda a una aplicación, debería ver un valor en blanco para el encabezado Servidor.
tomcat-removed-server-header

Iniciar Tomcat con un Gestor de seguridad

El gestor de seguridad le protege de un applet no fiable que se ejecute en su navegador.

Ejecutar Tomcat con un gestor de seguridad es mejor que hacerlo sin él. Tomcat tiene una excelente documentación sobre el Gestor de Seguridad Tomcat.

Lo bueno de esto es que no necesita cambiar ningún archivo de configuración. Es sólo la forma de ejecutar el archivo startup.sh.

Todo lo que tiene que hacer es iniciar tomcat con el argumento -security .

[root@geekflare bin]# ./startup.sh -security
Usando CATALINA_BASE: /opt/tomcat
Usando CATALINA_HOME: /opt/tomcat
Usando CATALINA_TMPDIR: /opt/tomcat/temp
Utilizando JRE_HOME: /usr
Usando CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Uso del gestor de seguridad
Tomcat iniciado.
[root@geekflare bin]#

Habilitar SSL/TLS

Servir peticiones web sobre 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, necesita implementar un certificado SSL.

Asumiendo, que ya tiene listo el keystore con el certificado, puede agregar la siguiente línea en el archivo server.xml bajo la sección Connector port.

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

Cambie el nombre del archivo del almacén de claves y la contraseña por los suyos.

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

Aplicar HTTPS

Esto sólo es aplicable si tiene SSL activado. Si no, romperá la aplicación.

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

  • Vaya a la carpeta $tomcat/conf
  • Modifique web.x ml utilizando vi
  • Añada lo siguiente antes de la sintaxis
<restricción de="" seguridad=""> 
<recogida de="" recursos="" web=""> 
<nombre-recurso-web>Contexto protegido</nombre-recurso-web> 
<url-pattern>/*</url-pattern>
 
<restricción de="" datos="" usuario=""> 
<transport-guarantee>CONFIDENCIAL</transport-guarantee> 
</restricción> 
</recogida></restricción>
  • Guarde el archivo y reinicie el Tomcat

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

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

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

Captura de pantalla de la configuración:

tomcat-httponly

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

Ejecutar Tomcat desde una cuenta sin privilegios

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

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

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

Elimine las aplicaciones predeterminadas/no deseadas

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

Puede eliminarlas para mantenerlo limpio y evitar cualquier riesgo de seguridad conocido con la aplicación por defecto de Tomcat.

  • ROOT – Página de bienvenida por defecto
  • Docs – Documentación de Tomcat
  • Ejemplos – JSP y servlets para demostración
  • Manager, host-manager – 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

Por defecto, tomcat está configurado para apagarse en el puerto 8005.

¿Sabe que puede apagar la instancia tomcat haciendo un telnet al puerto IP: y emitiendo el comando SHUTDOWN?

Chandans # telnet localhost 8005
Intentando ::1... telnet:
conexión a dirección ::1:
Conexión denegada Probando 127.0.0.1...
Conectado a localhost.
El carácter de escape es '^]'.
SHUTDOWN Conexión cerrada por host ajeno.
Chandans

¡Peligroso!

Como ve, tener una configuración por defecto conlleva un alto riesgo de seguridad.

Se recomienda cambiar el puerto de apagado de tomcat y el comando por defecto por algo impredecible.

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

8005 – Cambiar a algún otro puerto no utilizado

SHUTDOWN – Cambie a algo complicado

Ej-

<servidor port="8867" shutdown="NOTGONNAGUESS"></servidor>

Sustituir la página por defecto 404, 403, 500

Tener una página por defecto para no encontrado, prohibido, error de servidor expone detalles de la versión.

Echemos un vistazo a la página 404 por defecto.

tomcat-default-404-page

Para mitigarlo, puede crear primero una página de error general y configurar web.xml para que redirija a una página de error general.

  • Vaya a $tomcat/webapps/$application
  • Cree un archivo error.jsp utilizando el editor vi
 
Página de error

 ¡Es un error! 
  • Vaya a la carpeta $tomcat/conf
  • Añada lo siguiente en el archivo web.xml. Asegúrese de añadir antes de la sintaxis
 
404 
/error.jsp

 
403 
/error.jsp

 
500 
/error.jsp
  • Reinicie el servidor tomcat para probarlo
tomcat-custom-error

¡Mucho mejor!

Puede hacer esto para java.lang.Exception también. Esto ayudará a no exponer la información de la versión de tomcat si se produce alguna excepción java lang.

Simplemente añada lo siguiente en web.xml y reinicie el servidor tomcat.

 
java.lang.Exception 
/error.jsp

Espero que la guía anterior le dé una idea de cómo asegurar Tomcat. Si está buscando aprender más sobre la administración de Tomcat, entonces eche un vistazo a este curso en línea.
Además, aprenda cómo configurar WAS para que deje de pedir la contraseña durante el apagado aquí.