Ein praktischer Leitfaden zum Härten und Absichern von Apache Tomcat Server mit den besten Praktiken.

Tomcat ist einer der beliebtesten Servlet- und JSP-Container-Server. Er wird von einigen der folgenden stark frequentierten Websites verwendet:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.de
  • Reuters.de
  • Meetup.de
  • Webs.com

Die folgende Grafik zeigt die Marktposition von Tomcat im Bereich der Java-Anwendungsserver.

tomcat-market-share
Quelle: Plumbr

Technisch gesehen können Sie Tomcat als Front-End-Server verwenden, um Website-Anfragen direkt zu bedienen. In einer Produktionsumgebung sollten Sie jedoch einige Webserver wie Apache oder Nginx als Front-End verwenden, um die Anfragen an Tomcat weiterzuleiten.

Die Verwendung eines Webservers für die Bearbeitung der Anfragen bietet Vorteile in Bezug auf Leistung und Sicherheit. Wenn Sie Apache HTTP als Front-End-Webserver verwenden, müssen Sie auch dessen Absicherung in Betracht ziehen.

Die Standardkonfiguration von Tomcat kann sensible Informationen preisgeben, die es Hackern ermöglichen, einen Angriff auf die Anwendung vorzubereiten.

Die folgenden Tests wurden mit Tomcat 7.x in einer UNIX-Umgebung durchgeführt.

Zielgruppe

Dieser Kurs richtet sich an Middleware-Administratoren, Anwendungssupporter, Systemanalytiker oder an alle, die sich mit dem Härten und der Sicherheit von Tomcat befassen oder befassen möchten.

Gute Kenntnisse von Tomcat und UNIX-Befehlen sind erforderlich.

Hinweise

Wir benötigen ein Tool, um HTTP-Header zur Überprüfung zu untersuchen. Es gibt zwei Möglichkeiten, dies zu tun.

Wenn Sie eine Anwendung testen, die ins Internet geht, können Sie die folgenden HTTP-Header-Tools verwenden, um die Implementierung zu überprüfen.

Und für eine Intranet-Anwendung können Sie die Entwickler-Tools von Google Chrome und Firefox verwenden.

Es empfiehlt sich, von jeder Datei, die Sie ändern möchten, eine Sicherungskopie zu erstellen.

In diesem Leitfaden werden wir den Tomcat-Installationsordner als $tomcat bezeichnen.

Gehen wir nun die Härtungs- und Sicherheitsverfahren durch.

Server-Banner entfernen

Das Entfernen des Server-Banners aus dem HTTP-Header ist eine der ersten Maßnahmen, die Sie zur Härtung ergreifen müssen.

Ein Server-Banner verrät das Produkt und die Version, die Sie verwenden, und führt zu einer Schwachstelle mit Informationsverlust.

Standardmäßig wird eine von Tomcat ausgelieferte Seite wie folgt angezeigt.

tomcat-server-header

Lassen Sie uns die Produkt- und Versionsangaben aus dem Server-Header ausblenden.

  • Wechseln Sie in den Ordner $tomcat/conf
  • Ändern Sie die Datei server.xml mit vi
  • Fügen Sie Folgendes zum Connector-Port hinzu
Server =" "

Beispiel: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Speichern Sie die Datei und starten Sie den Tomcat neu. Wenn Sie nun auf eine Anwendung zugreifen, sollten Sie einen leeren Wert für den Server-Header sehen.
tomcat-removed-server-header

Tomcat mit einem Sicherheitsmanager starten

Der Sicherheitsmanager schützt Sie vor einem nicht vertrauenswürdigen Applet, das in Ihrem Browser läuft.

Tomcat mit einem Sicherheitsmanager zu starten, ist besser als ohne einen solchen. Tomcat verfügt über eine ausgezeichnete Dokumentation zum Tomcat Security Manager.

Das Gute daran ist, dass Sie keine einzige Konfigurationsdatei ändern müssen. Es ist einfach die Art und Weise, wie Sie die Datei startup.sh ausführen.

Alles, was Sie tun müssen, ist, Tomcat mit dem Argument -security zu starten.

[root@geekflare bin]# ./startup.sh -security
Verwenden Sie CATALINA_BASE: /opt/tomcat
Verwendung von CATALINA_HOME: /opt/tomcat
Verwendung von CATALINA_TMPDIR: /opt/tomcat/temp
Verwendung von JRE_HOME: /usr
CLASSPATH verwenden: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Sicherheitsmanager verwenden
Tomcat wurde gestartet.
[root@geekflare bin]#

Aktivieren Sie SSL/TLS

Das Servieren von Webanfragen über HTTPS ist unerlässlich, um die 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 Keystore mit dem Zertifikat, können Sie die folgende Zeile in der Datei server.xml unter dem Abschnitt Connector port hinzufügen.

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

Ändern Sie den Namen der Keystore-Datei und das Passwort mit Ihrem eigenen.

Wenn Sie Hilfe beim Keystore- und CSR-Prozess benötigen, lesen Sie diese Anleitung.

HTTPS erzwingen

Diese Option ist nur anwendbar, wenn Sie SSL aktiviert haben. Andernfalls wird die Anwendung unterbrochen.

Sobald Sie SSL aktiviert haben, sollten Sie die Umleitung aller HTTP-Anfragen auf HTTPS erzwingen, damit die Kommunikation zwischen Benutzer und Tomcat-Anwendungsserver sicher ist.

  • Wechseln Sie in den Ordner $tomcat/conf
  • Ändern Sie die Datei web.xml mit vi
  • Fügen Sie vor der </web-app> Syntax folgendes ein
<security-constraint> 
<web-resource-collection> 
<web-resource-name>Geschützter Kontext</web-resource-name> 
<url-pattern>/*</url-pattern>
</web-resource-collection> 
<user-data-constraint> 
<transport-guarantee>CONFIDENTIAL</transport-guarantee> 
</benutzerdaten-einschränkung> 
</security-constraint>
  • Speichern Sie die Datei und starten Sie den Tomcat neu

Es ist möglich, Sitzungen und Cookies von Webanwendungen zu stehlen oder zu manipulieren, ohne ein sicheres Cookie zu haben. Es handelt sich um ein Flag, das in den Antwort-Header eingefügt wird.

Fügen Sie dazu die folgende Zeile in den Abschnitt session-config der Datei web.xml ein

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

Bildschirmfoto der Konfiguration:

tomcat-httponly

Speichern Sie die Datei und starten Sie Tomcat neu, um den HTTP-Antwort-Header zu prüfen.

Tomcat von einem nicht-privilegierten Konto aus starten

Es ist gut, einen separaten, nicht privilegierten Benutzer für Tomcat zu verwenden. Die Idee dahinter ist, andere laufende Dienste zu schützen, falls eines der Konten kompromittiert wird.

  • Erstellen Sie einen UNIX-Benutzer, z.B. tomcat
useradd tomcat
  • Stoppen Sie den Tomcat, falls er läuft
  • Ändern Sie die Eigentümerschaft von $tomcat auf den Benutzer tomcat
chown -R tomcat:tomcat tomcat/

Starten Sie den Tomcat und stellen Sie sicher, dass er mit dem Benutzer tomcat läuft

Standardmäßige/unerwünschte Anwendungen entfernen

Tomcat wird standardmäßig mit den folgenden Webanwendungen ausgeliefert, die in einer Produktionsumgebung benötigt werden können oder auch nicht.

Sie können sie löschen, um die Umgebung 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 unter dem 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]#

SHUTDOWN Port und Befehl ändern

Standardmäßig ist tomcat so konfiguriert, dass er auf Port 8005 heruntergefahren wird.

Wussten Sie, dass Sie die Tomcat-Instanz herunterfahren können, indem Sie einen Telnet-Zugang zu IP: Port herstellen und den Befehl SHUTDOWN eingeben?

Chandans # telnet localhost 8005
Versucht ::1... telnet:
verbindung zu Adresse ::1:
Verbindung abgelehnt Versuchen Sie 127.0.0.1...
Verbunden mit localhost.
Escape-Zeichen ist '^]'.
SHUTDOWN Verbindung vom fremden Host geschlossen.
Chandans #

Gefährlich!

Sie sehen, dass die Standardkonfiguration zu einem hohen Sicherheitsrisiko führt.

Es wird empfohlen, den Tomcat-Shutdown-Port und den Standardbefehl in etwas Unvorhersehbares zu ändern.

  • Ändern Sie Folgendes in der Datei server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Ändern Sie auf einen anderen, nicht verwendeten Port

SHUTDOWN – Ändern Sie auf etwas Kompliziertes

Beispiel

<Server port="8867" shutdown="NOTGONNAGUESS">

Ersetzen Sie die Standard 404, 403, 500 Seite

Die Standardseite für nicht gefundene, verbotene und Server-Fehler enthüllt Versionsdetails.

Schauen wir uns die Standard 404-Seite an.

tomcat-default-404-page

Um dies abzumildern, können Sie zunächst eine allgemeine Fehlerseite erstellen und die web.xml so konfigurieren, dass sie auf eine allgemeine Fehlerseite umleitet.

  • Gehen Sie zu $tomcat/webapps/$application
  • Erstellen Sie mit dem Editor vi eine Datei error.jsp

 
Fehlerseite

 Das ist ein Fehler! 
  • Gehen Sie zum Ordner $tomcat/conf
  • Fügen Sie in der Datei web.xml Folgendes hinzu. Stellen Sie sicher, dass Sie vor der Syntax </web-app> hinzufügen
 
404 
/error.jsp

 
403 
/error.jsp

 
500 
/error.jsp
  • Starten Sie den Tomcat-Server neu, um es zu testen
tomcat-custom-error

Viel besser!

Sie können dies auch für java.lang.Exception tun. Dadurch werden die Versionsinformationen des Tomcat im Falle einer java.lang.Exception nicht angezeigt.

Fügen Sie einfach Folgendes in die web.xml ein und starten Sie den Tomcat-Server neu.

 
java.lang.Exception 
/error.jsp

Ich hoffe, die obige Anleitung vermittelt Ihnen einen Eindruck von der Absicherung von Tomcat. Wenn Sie mehr über die Verwaltung von Tomcat erfahren möchten, sollten Sie sich diesen Online-Kurs ansehen.
Außerdem erfahren Sie hier, wie Sie WAS so konfigurieren, dass es beim Herunterfahren nicht mehr nach einem Passwort fragt.