Guide de renforcement et de sécurité d’Apache Tomcat

Un guide pratique pour renforcer et sécuriser Apache Tomcat Server avec les meilleures pratiques.

Tomcat est l’un des serveurs Servlet et JSP Container les plus populaires. Il est utilisé par certains des sites Web à fort trafic suivants :

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

Le graphique ci-dessous montre la position de Tomcat sur le marché du serveur d’applications Java.

Source : Plumbr

Techniquement, vous pouvez utiliser Tomcat comme serveur frontal pour répondre directement aux demandes de site. Cependant, dans un environnement de production, vous souhaiterez peut-être utiliser certains serveurs Web comme Apache, Nginx comme front-end pour acheminer les requêtes vers Tomcat.

L’utilisation d’un serveur Web pour gérer les requêtes offre des avantages en termes de performances et de sécurité. Si vous utilisez Apache HTTP en tant que serveur Web frontal, vous devez également envisager de le sécuriser.

La configuration par défaut de Tomcat peut exposer des informations sensibles, ce qui aide le pirate à se préparer à une attaque contre l’application.

Les éléments suivants sont testés sur Tomcat 7.x, environnement UNIX.

Spectateurs

Ceci est conçu pour l’administrateur middleware, le support d’application, l’analyste système ou toute personne travaillant ou désireuse d’apprendre le renforcement et la sécurité de Tomcat.

Une bonne connaissance des commandes Tomcat & UNIX est obligatoire.

Remarques

Nous avons besoin d’un outil pour examiner les en-têtes HTTP à des fins de vérification. Vous pouvez le faire de deux manières.

Si vous testez une application accessible sur Internet, vous pouvez utiliser les outils d’en-tête HTTP suivants pour vérifier l’implémentation.

Et pour une application Intranet, vous pouvez utiliser les outils de développement Google Chrome, Firefox.

Comme meilleure pratique, vous devez faire une sauvegarde de tout fichier que vous êtes sur le point de modifier.

Nous appellerons le dossier d’installation de Tomcat comme $tomcat tout au long de ces directives.

Passons en revue les procédures de durcissement et de sécurisation.

Supprimer la bannière du serveur

La suppression de la bannière du serveur de l’en-tête HTTP est l’une des premières choses à faire en tant que durcissement.

Avoir une bannière de serveur expose le produit et la version que vous utilisez et conduit à une vulnérabilité de fuite d’informations.

Par défaut, une page servie par Tomcat s’affichera comme ceci.

Masquons les détails du produit et de la version de l’en-tête du serveur.

  • Allez dans le dossier $tomcat/conf
  • Modifier server.xml en utilisant vi
  • Ajouter ce qui suit au port du connecteur
Server =” “

Ex: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Enregistrez le fichier et redémarrez Tomcat. Maintenant, lorsque vous accédez à une application, vous devriez voir une valeur vide pour l’en-tête du serveur.

Démarrage de Tomcat avec un gestionnaire de sécurité

Security Manager vous protège d’une applet non approuvée s’exécutant dans votre navigateur.

Exécuter Tomcat avec un gestionnaire de sécurité est préférable à l’exécution sans. Tomcat a une excellente documentation sur Gestionnaire de sécurité Tomcat.

La bonne chose à ce sujet est que vous n’avez pas besoin de modifier un fichier de configuration. C’est juste la façon dont vous exécutez le fichier startup.sh.

Tout ce que vous avez à faire est de démarrer tomcat avec l’argument -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]#

Activer SSL/TLS

Le traitement des requêtes Web via HTTPS est essentiel pour protéger les données entre le client et Tomcat. Afin de rendre votre application Web accessible via HTTPS, vous devez implémenter un certificat SSL.

En supposant que vous ayez déjà un magasin de clés prêt avec le certificat, vous pouvez ajouter la ligne ci-dessous dans le fichier server.xml sous la section Port du connecteur.

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

Modifiez le nom et le mot de passe du fichier Keystore avec le vôtre.

Si vous avez besoin d’aide avec le processus keystore & CSR, reportez-vous à ce guide.

Appliquer HTTPS

Ceci n’est applicable que lorsque SSL est activé. Sinon, cela cassera l’application.

Une fois que vous avez activé SSL, il serait bon de forcer la redirection de toutes les requêtes HTTP vers HTTPS pour une communication sécurisée entre l’utilisateur et le serveur d’application Tomcat.

  • Allez dans le dossier $tomcat/conf
  • Modifier web.xml en utilisant vi
  • Ajouter la syntaxe suivante avant
<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>
  • Enregistrez le fichier et redémarrez le Tomcat

Il est possible de voler ou de manipuler la session d’application Web et les cookies sans disposer d’un cookie sécurisé. C’est un drapeau qui est injecté dans l’en-tête de la réponse.

Cela se fait en ajoutant sous la ligne dans la section session-config du fichier web.xml

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

Capture d’écran de la configuration :

Enregistrez le fichier et redémarrez Tomcat pour examiner l’en-tête de réponse HTTP.

Exécutez Tomcat à partir d’un compte non privilégié

Il est bon d’utiliser un utilisateur distinct non privilégié pour Tomcat. L’idée ici est de protéger les autres services en cours d’exécution au cas où l’un des comptes serait compromis.

  • Créez un utilisateur UNIX, disons tomcat
useradd tomcat
  • Arrêtez le Tomcat s’il est en cours d’exécution
  • Changer la propriété de $tomcat en utilisateur tomcat
chown -R tomcat:tomcat tomcat/

Démarrez Tomcat et assurez-vous qu’il fonctionne avec l’utilisateur tomcat

Supprimer les applications par défaut/indésirables

Par défaut, Tomcat est livré avec les applications Web suivantes, qui peuvent ou non être requises dans un environnement de production.

Vous pouvez les supprimer pour le garder propre et éviter tout risque de sécurité connu avec l’application par défaut de Tomcat.

  • ROOT – Page d’accueil par défaut
  • Documents – Documentation Tomcat
  • Exemples – JSP et servlets pour la démonstration
  • Manager, host-manager – Administration Tomcat

Ils sont disponibles dans le dossier $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]#

Modifier le port et la commande SHUTDOWN

Par défaut, Tomcat est configuré pour être arrêté sur le port 8005.

Savez-vous que vous pouvez arrêter l’instance de Tomcat en effectuant un telnet vers IP : port et en émettant la commande 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 #

Dangereux!

Vous voyez, avoir une configuration par défaut entraîne un risque de sécurité élevé.

Il est recommandé de changer le port d’arrêt de tomcat et la commande par défaut en quelque chose d’imprévisible.

  • Modifiez les éléments suivants dans server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Changer pour un autre port inutilisé

ARRÊT – Passez à quelque chose de compliqué

Ex-

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

Remplacer les pages 404, 403, 500 par défaut

Avoir une page par défaut pour les erreurs de serveur introuvables, interdites expose les détails de la version.

Regardons la page 404 par défaut.

Pour atténuer, vous pouvez d’abord créer une page d’erreur générale et configurer web.xml pour rediriger vers une page d’erreur générale.

  • Allez dans $tomcat/webapps/$application
  • Créer un fichier error.jsp à l’aide de l’éditeur vi
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Allez dans le dossier $tomcat/conf
  • Ajoutez ce qui suit dans le fichier web.xml. Assurez-vous d’ajouter avant la syntaxe
<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>
  • Redémarrez le serveur Tomcat pour le tester

Bien mieux !

Vous pouvez également le faire pour java.lang.Exception. Cela aidera à ne pas exposer les informations de version de tomcat en cas d’exception java lang.

Ajoutez simplement ce qui suit dans web.xml et redémarrez le serveur Tomcat.

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

J’espère que le guide ci-dessus vous donne une idée de la sécurisation de Tomcat. Si vous souhaitez en savoir plus sur l’administration de Tomcat, consultez ceci Cours en ligne.
Découvrez également comment configurer WAS pour qu’il cesse de demander un mot de passe lors de l’arrêt ici.