Handbuch zur Härtung und Sicherheit von Apache Tomcat

Ein 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.

Quelle: Klempner

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.

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.

  Fügen Sie Regeln hinzu, um URLs zu ändern und QR-Codes für sie aus der URL-Leiste zu erhalten

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 hinzu
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 hat eine ausgezeichnete Dokumentation auf Tomcat-Sicherheitsmanager.

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 –Sicherheitsargument zu starten.

[[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]#

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 der Datei server.xml im Abschnitt Connector-Port hinzufügen.

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 Sie web.xml mit vi
  • Fügen Sie Folgendes vor der -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
  Microsoft Teams: Kamera horizontal drehen

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

[[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]#

Ändern Sie den SHUTDOWN-Port und den Befehl

Standardmäßig ist Tomcat so konfiguriert, dass es am Port 8005 heruntergefahren wird.

  Übersetzen Sie Text und finden Sie Wortdefinitionen im Handumdrehen mit dem schwebenden Übersetzer

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>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Gehen Sie zum Ordner $tomcat/conf
  • Fügen Sie Folgendes in der Datei web.xml hinzu. Stellen Sie sicher, dass Sie vor der -Syntax hinzufügen
<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 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.

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

Ich hoffe, der obige Leitfaden gibt Ihnen eine Vorstellung davon, wie Sie Tomcat sichern können. Wenn Sie mehr über die Tomcat-Verwaltung erfahren möchten, lesen Sie dies Online Kurs.
Erfahren Sie hier auch, wie Sie WAS so konfigurieren, dass es beim Herunterfahren nicht mehr nach einem Passwort fragt.