Ein umfassender Leitfaden zur Härtung und Absicherung von Apache Tomcat
Apache Tomcat ist ein weit verbreiteter Server für Servlet- und JSP-Container. Er wird von vielen stark frequentierten Webseiten genutzt, darunter:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
Die folgende Darstellung veranschaulicht die Position von Tomcat auf dem Markt der Java-Anwendungsserver.
Quelle: Baufirma
Technisch gesehen kann Tomcat als direkter Front-End-Server für Webanfragen dienen. In einer Produktionsumgebung ist es jedoch ratsam, Webserver wie Apache oder Nginx vorzuschalten, um die Anfragen an Tomcat weiterzuleiten.
Die Verwendung eines Webservers zur Anfragenbearbeitung bietet sowohl Leistungs- als auch Sicherheitsvorteile. Wenn Sie Apache HTTP als Front-End verwenden, sollten Sie auch diesen absichern.
Die Standardkonfiguration von Tomcat kann sensible Informationen preisgeben, was Angreifern die Vorbereitung von Attacken erleichtert.
Die folgenden Anleitungen wurden mit Tomcat 7.x unter einer UNIX-Umgebung getestet.
Zielgruppe
Dieser Leitfaden richtet sich an Middleware-Administratoren, Anwendungsbetreuer, Systemanalysten und alle, die sich mit der Härtung und Sicherheit von Tomcat auseinandersetzen möchten.
Grundlegende Kenntnisse über Tomcat und UNIX-Befehle sind erforderlich.
Wichtige Hinweise
Zur Untersuchung von HTTP-Headern wird ein entsprechendes Tool benötigt. Es gibt hierfür zwei Optionen:
Für öffentlich zugängliche Anwendungen können spezielle HTTP-Header-Tools zur Überprüfung eingesetzt werden.
Für Intranet-Anwendungen stehen die Entwicklertools von Google Chrome oder Firefox zur Verfügung.
Als bewährte Methode gilt: Erstellen Sie von jeder zu verändernden Datei eine Sicherheitskopie.
Im Rahmen dieses Leitfadens bezeichnen wir das Tomcat-Installationsverzeichnis mit $tomcat
.
Lassen Sie uns nun die Schritte zur Härtung und Absicherung durchgehen.
Entfernen des Server-Banners
Eine der ersten Maßnahmen zur Härtung ist das Entfernen des Server-Banners aus dem HTTP-Header.
Ein Server-Banner offenbart Produkt- und Versionsinformationen, was ein Sicherheitsrisiko durch Informationslecks darstellt.
Standardmäßig zeigt Tomcat eine solche Seite:
Lassen Sie uns die Produkt- und Versionsdetails im Server-Header verbergen.
- Navigieren Sie zum Verzeichnis
$tomcat/conf
- Bearbeiten Sie die Datei
server.xml
mit einem Editor wievi
- Fügen Sie dem Connector-Port folgenden Eintrag hinzu:
Server =” “
Beispiel:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Speichern Sie die Datei und starten Sie Tomcat neu. Wenn Sie nun auf eine Anwendung zugreifen, sollte der Server-Header einen leeren Wert anzeigen.
Tomcat mit Security Manager starten
Der Security Manager schützt vor nicht vertrauenswürdigen Applets, die im Browser ausgeführt werden.
Es ist sicherer, Tomcat mit einem Security Manager zu betreiben, als ohne. Die Tomcat-Dokumentation bietet hierzu umfassende Informationen: Tomcat Security Manager.
Ein Vorteil ist, dass keine Konfigurationsdateien verändert werden müssen. Es geht lediglich darum, wie die startup.sh
-Datei ausgeführt wird.
Starten Sie Tomcat mit dem Argument -security
.
[[email protected]ekflare 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]#
SSL/TLS aktivieren
Die Bereitstellung von Webanfragen über HTTPS ist entscheidend, um die Datenübertragung zwischen Client und Tomcat zu schützen. Hierfür ist die Implementierung eines SSL-Zertifikats notwendig.
Angenommen, Sie haben einen Keystore mit Zertifikat, können Sie der Datei server.xml
im Connector-Port folgenden Eintrag hinzufügen:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Ersetzen Sie die Platzhalter für Keystore-Datei und Passwort durch Ihre eigenen.
Wenn Sie Hilfe bei Keystore- und CSR-Prozessen benötigen, finden Sie hier eine entsprechende Anleitung.
HTTPS erzwingen
Dieser Schritt ist nur relevant, wenn SSL aktiviert wurde. Andernfalls wird die Anwendung beeinträchtigt.
Nach der Aktivierung von SSL sollten alle HTTP-Anfragen auf HTTPS umgeleitet werden, um eine sichere Kommunikation zwischen Benutzer und Tomcat-Anwendungsserver zu gewährleisten.
- Gehen Sie zum Verzeichnis
$tomcat/conf
. - Bearbeiten Sie die Datei
web.xml
mit einem Editor wievi
. - Fügen Sie vor dem
</web-app>
-Tag folgenden Code ein:
<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 Tomcat neu.
Secure & HttpOnly-Flag zu Cookies hinzufügen
Sitzungen und Cookies von Webanwendungen können ohne sichere Cookies gestohlen oder manipuliert werden. Diese Flags werden im Antwortheader gesetzt.
Fügen Sie den folgenden Code im session-config
-Abschnitt der Datei web.xml
hinzu:
<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.
Tomcat von einem nicht-privilegierten Konto ausführen
Es empfiehlt sich, einen separaten, nicht-privilegierten Benutzer für Tomcat zu verwenden. Dies dient dem Schutz anderer Dienste, falls ein Konto kompromittiert wird.
- Erstellen Sie einen UNIX-Benutzer, z.B.
tomcat
.
useradd tomcat
- Stoppen Sie Tomcat, falls er läuft.
- Ändern Sie den Eigentümer von
$tomcat
zum Benutzertomcat
.
chown -R tomcat:tomcat tomcat/
Starten Sie Tomcat und stellen Sie sicher, dass er mit dem Benutzer tomcat
ausgeführt wird.
Standardmäßige/unerwünschte Anwendungen entfernen
Tomcat enthält standardmäßig einige Webanwendungen, die in einer Produktionsumgebung nicht immer benötigt werden.
Sie können diese entfernen, um unnötige Risiken zu vermeiden.
- ROOT – Standard-Willkommensseite
- Docs – Tomcat-Dokumentation
- Examples – JSP- und Servlet-Beispiele
- Manager, Host-Manager – Tomcat-Verwaltung
Diese finden Sie im Verzeichnis $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]#
SHUTDOWN-Port und -Befehl ändern
Standardmäßig ist der Tomcat-Shutdown-Port auf 8005 konfiguriert.
Wussten Sie, dass Sie Tomcat über eine Telnet-Verbindung zum Port und dem Befehl SHUTDOWN
herunterfahren können?
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 #
Das ist ein erhebliches Sicherheitsrisiko!
Es ist ratsam, den Shutdown-Port und den Befehl zu ändern.
- Ändern Sie folgenden Eintrag in der Datei
server.xml
:
<Server port="8005" shutdown="SHUTDOWN">
8005 – Ersetzen Sie diesen Wert durch einen anderen unbenutzten Port.
SHUTDOWN
– Ersetzen Sie diesen Wert durch etwas Komplexeres.
Beispiel:
<Server port="8867" shutdown="NOTGONNAGUESS">
Standard 404-, 403-, 500-Fehlerseiten ersetzen
Die Standardfehlerseiten enthalten Versionsdetails.
Hier ein Beispiel für eine Standard-404-Seite:
Erstellen Sie eine allgemeine Fehlerseite und konfigurieren Sie web.xml
entsprechend:
- Navigieren Sie zu
$tomcat/webapps/$application
. - Erstellen Sie eine Datei namens
error.jsp
.
<html> <head> <title>Error Page</title> </head> <body> That's an error! </body> </html>
- Gehen Sie zum Verzeichnis
$tomcat/conf
. - Fügen Sie den folgenden Code in der Datei
web.xml
vor dem</web-app>
-Tag ein:
<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>
- Starten Sie Tomcat neu, um die Änderungen zu testen.
Viel besser!
Sie können dies auch für java.lang.Exception
implementieren, um Tomcat-Versionsinformationen bei Java-Ausnahmen zu verbergen.
Fügen Sie den folgenden Code in der web.xml
hinzu und starten Sie Tomcat neu:
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Ich hoffe, dieser Leitfaden gibt Ihnen einen guten Überblick über die Absicherung von Tomcat. Für mehr Informationen zur Tomcat-Verwaltung können Sie diesen Online-Kurs konsultieren.
Zusätzlich erfahren Sie hier, wie WAS konfiguriert wird, sodass beim Herunterfahren keine Passworteingabe mehr erforderlich ist.