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.
Table des matières
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
Ajouter le drapeau Secure & HttpOnly au cookie
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.