Handbuch zur Härtung und Sicherheit von Apache Tomcat
Veröffentlicht: 2015-02-14Ein praktischer Leitfaden zum Härten und Sichern von Apache Tomcat Server mit Best Practices.
Tomcat ist einer der beliebtesten Servlet- und JSP-Container-Server. Es wird von einigen der folgenden stark frequentierten Websites verwendet:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
Die folgende Grafik zeigt die Marktposition von Tomcat im Java-Anwendungsserver.

Technisch gesehen können Sie Tomcat als Front-End-Server verwenden, um Site-Anfragen direkt zu bedienen. In einer Produktionsumgebung möchten Sie jedoch möglicherweise einige Webserver wie Apache oder Nginx als Front-End verwenden, um die Anforderungen an Tomcat weiterzuleiten.
Die Verwendung eines Webservers zur Verarbeitung der Anfragen bietet Leistungs- und Sicherheitsvorteile . Wenn Sie Apache HTTP als Front-End-Webserver verwenden, müssen Sie dies ebenfalls sichern.
Die standardmäßige Tomcat-Konfiguration kann sensible Informationen offenlegen, was Hackern hilft, sich auf einen Angriff auf die Anwendung vorzubereiten.
Folgendes wird auf Tomcat 7.x, UNIX-Umgebung getestet.
Publikum
Dies ist für Middleware-Administratoren, Anwendungssupport, Systemanalysten oder alle, die Tomcat-Härtung und -Sicherheit lernen möchten oder daran arbeiten, gedacht.
Gute Kenntnisse der Tomcat- und UNIX-Befehle sind zwingend erforderlich.
Anmerkungen
Wir benötigen ein Tool, um HTTP-Header zur Überprüfung zu untersuchen. Es gibt zwei Möglichkeiten, wie Sie dies tun können.
Wenn Sie eine mit dem Internet verbundene Anwendung testen, können Sie die folgenden HTTP-Header-Tools verwenden, um die Implementierung zu überprüfen.
- HTTP-Header-Checker
- Hacker-Ziel
Und für eine Intranet-Anwendung können Sie Google Chrome, Firefox-Entwicklertools verwenden.
Als bewährte Methode sollten Sie von jeder Datei, die Sie ändern möchten, eine Sicherungskopie erstellen.
Wir werden den Tomcat-Installationsordner in diesen Richtlinien als $tomcat bezeichnen.
Lassen Sie uns die Härtungs- und Sicherungsverfahren durchgehen.
Server-Banner entfernen
Das Entfernen des Server-Banners aus dem HTTP-Header ist eines der ersten Dinge, die beim Härten zu tun sind.
Ein Server-Banner zeigt das Produkt und die Version, die Sie verwenden, und führt zu einer Schwachstelle durch Informationslecks.
Standardmäßig wird eine von Tomcat bereitgestellte Seite so angezeigt.

Lassen Sie uns die Produkt- und Versionsdetails aus dem Server-Header ausblenden.
- Gehen Sie zum Ordner $tomcat/conf
- Ändern Sie server.xml mit vi
- Fügen Sie Folgendes zum
Connector port
Server =” “
Ex: -
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Speichern Sie die Datei und starten Sie den Tomcat neu. Wenn Sie jetzt auf eine Anwendung zugreifen, sollten Sie einen leeren Wert für den Server-Header sehen.

Starten von Tomcat mit einem Sicherheitsmanager
Security Manager schützt Sie vor einem nicht vertrauenswürdigen Applet, das in Ihrem Browser ausgeführt wird.
Das Ausführen von Tomcat mit einem Sicherheitsmanager ist besser als das Ausführen ohne. Tomcat verfügt über eine hervorragende Dokumentation zu Tomcat Security Manager.
Das Gute daran ist, dass Sie keine Konfigurationsdatei ändern müssen. Es ist nur so, wie Sie die Datei startup.sh
ausführen.
Alles, was Sie tun müssen, ist, Tomcat mit –security
zu starten.
[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]#
Aktivieren Sie SSL/TLS
Das Bereitstellen von Webanfragen über HTTPS ist unerlässlich, um Daten zwischen Client und Tomcat zu schützen. Um Ihre Webanwendung über HTTPS zugänglich zu machen, müssen Sie ein SSL-Zertifikat implementieren.
Angenommen, Sie haben bereits einen Schlüsselspeicher mit dem Zertifikat bereit, können Sie die folgende Zeile in server.
xml-Datei im Abschnitt Connector port
.
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Ändern Sie den Namen und das Passwort der Keystore-Datei mit Ihrem eigenen.
Wenn Sie Hilfe beim Keystore- und CSR-Prozess benötigen, lesen Sie diese Anleitung.
Erzwingen Sie HTTPS
Dies gilt nur, wenn Sie SSL aktiviert haben. Wenn nicht, wird die Anwendung unterbrochen.
Sobald Sie SSL aktiviert haben, wäre es gut, alle HTTP-Anforderungen auf HTTPS umzuleiten, um eine sichere Kommunikation zwischen dem Benutzer und dem Tomcat-Anwendungsserver zu gewährleisten.
- Gehen Sie zum Ordner $tomcat/conf
- Ändern
web.xml
mitvi
- Fügen Sie Folgendes vor
</web-app>
-Syntax hinzu
<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>
- Speichern Sie die Datei und starten Sie den Tomcat neu
Fügen Sie dem Cookie ein Secure & HttpOnly-Flag hinzu
Es ist möglich, Webanwendungssitzungen und Cookies zu stehlen oder zu manipulieren, ohne über ein sicheres Cookie zu verfügen. Es ist ein Flag, das in den Antwortheader eingefügt wird.

Dies erfolgt durch Hinzufügen unterhalb der Zeile im Abschnitt session-config
der Datei web.xml
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Screenshot der Konfiguration:

Speichern Sie die Datei und starten Sie Tomcat neu, um den HTTP-Antwortheader zu untersuchen.
Führen Sie Tomcat von einem nicht privilegierten Konto aus
Es ist gut, einen separaten nicht privilegierten Benutzer für Tomcat zu verwenden. Die Idee hier ist, andere laufende Dienste zu schützen, falls eines der Konten kompromittiert wird.
- Erstellen Sie einen UNIX-Benutzer, sagen wir Tomcat
useradd tomcat
- Stoppen Sie den Tomcat, wenn er läuft
- Ändere den Besitz von $tomcat auf den Benutzer tomcat
chown -R tomcat:tomcat tomcat/
Starten Sie den Tomcat und stellen Sie sicher, dass er mit Tomcat-Benutzer ausgeführt wird
Entfernen Sie standardmäßige/unerwünschte Anwendungen
Standardmäßig enthält Tomcat die folgenden Webanwendungen, die in einer Produktionsumgebung möglicherweise erforderlich sind oder nicht.
Sie können sie löschen, um sie sauber zu halten und bekannte Sicherheitsrisiken mit der Tomcat-Standardanwendung zu vermeiden.
- ROOT – Standard-Willkommensseite
- Docs – Tomcat-Dokumentation
- Beispiele – JSP und Servlets zur Demonstration
- Manager, Host-Manager – Tomcat-Verwaltung
Sie sind im Ordner $tomcat/webapps verfügbar
[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]#
Ändern Sie den SHUTDOWN-Port und den Befehl
Standardmäßig ist Tomcat so konfiguriert, dass es am Port 8005 heruntergefahren wird.
Wissen Sie, dass Sie die Tomcat-Instanz herunterfahren können, indem Sie eine Telnet-Verbindung zum IP-Port herstellen und den Befehl SHUTDOWN ausgeben?
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 #
Gefährlich!
Sie sehen, eine Standardkonfiguration führt zu einem hohen Sicherheitsrisiko.
Es wird empfohlen, den Port zum Herunterfahren von Tomcat und den Standardbefehl auf etwas Unvorhersehbares zu ändern.
- Ändern Sie Folgendes in server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005 – Wechseln Sie zu einem anderen unbenutzten Port
SHUTDOWN – Wechseln Sie zu etwas Kompliziertem
Ex-
<Server port="8867" shutdown="NOTGONNAGUESS">
Ersetzen Sie die Standardseite 404, 403, 500
Die Standardseite für nicht gefundene, verbotene Serverfehler zeigt Versionsdetails an.
Schauen wir uns die Standard-404-Seite an.

Um Abhilfe zu schaffen, können Sie zuerst eine allgemeine Fehlerseite erstellen und web.xml so konfigurieren, dass sie zu einer allgemeinen Fehlerseite umgeleitet wird.
- Gehen Sie zu $tomcat/webapps/$application
- Erstellen Sie mit dem
vi
-Editor eine error.jsp-Datei
<html> <Kopf> <title>Fehlerseite</title> </head> <body> Das ist ein Fehler! </body> </html>
- Gehen Sie zum Ordner $tomcat/conf
- Fügen Sie Folgendes in der Datei web.xml hinzu. Stellen Sie sicher, dass Sie vor
</web-app>
-Syntax hinzufügen
<Fehlerseite> <Fehlercode>404</Fehlercode> <location>/error.jsp</location> </Fehlerseite> <Fehlerseite> <Fehlercode>403</Fehlercode> <location>/error.jsp</location> </Fehlerseite> <Fehlerseite> <Fehlercode>500</Fehlercode> <location>/error.jsp</location> </Fehlerseite>
- Starten Sie den Tomcat-Server neu, um ihn zu testen

Viel besser!
Sie können dies auch für java.lang.Exception
tun. Dies hilft dabei, Tomcat-Versionsinformationen nicht offenzulegen, wenn eine Java-Lang-Ausnahme auftritt.
Fügen Sie einfach Folgendes in web.xml
hinzu und starten Sie den Tomcat-Server neu.
<Fehlerseite> <Ausnahmetyp>java.lang.Exception</Ausnahmetyp> <location>/error.jsp</location> </Fehlerseite>
Ich hoffe, der obige Leitfaden gibt Ihnen eine Vorstellung davon, wie Sie Tomcat sichern können. Wenn Sie mehr über die Tomcat-Administration erfahren möchten, dann sehen Sie sich diesen Online-Kurs an.
Erfahren Sie hier auch, wie Sie WAS so konfigurieren, dass es beim Herunterfahren nicht mehr nach einem Passwort fragt.