Handbuch zur Härtung und Sicherheit von Apache Tomcat

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 wie vi
  • 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 wie vi.
  • 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 Benutzer tomcat.
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.