Οδηγός σκλήρυνσης και ασφάλειας Apache Tomcat

Ένας πρακτικός οδηγός για τη σκλήρυνση και την ασφάλεια του διακομιστή Apache Tomcat με τις βέλτιστες πρακτικές.

Ο Tomcat είναι ένας από τους πιο δημοφιλείς διακομιστές Servlet και JSP Container. Χρησιμοποιείται από ορισμένους από τους παρακάτω ιστότοπους υψηλής επισκεψιμότητας:

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

Το παρακάτω γράφημα δείχνει τη θέση της Tomcat στην αγορά στον διακομιστή εφαρμογών Java.

Πηγή: Plumbr

Τεχνικά, μπορείτε να χρησιμοποιήσετε τον Tomcat ως διακομιστή διεπαφής για να εξυπηρετήσετε απευθείας αιτήματα ιστότοπου. Ωστόσο, σε ένα περιβάλλον παραγωγής, μπορεί να θέλετε να χρησιμοποιήσετε ορισμένους διακομιστές ιστού όπως οι Apache, Nginx ως front-end για να δρομολογήσετε τα αιτήματα στο Tomcat.

Η χρήση ενός διακομιστή web για τον χειρισμό των αιτημάτων παρέχει οφέλη απόδοσης και ασφάλειας. Εάν χρησιμοποιείτε το Apache HTTP ως διακομιστή web front-end, τότε πρέπει να εξετάσετε το ενδεχόμενο να το εξασφαλίσετε επίσης.

Η προεπιλεγμένη διαμόρφωση Tomcat ενδέχεται να εκθέσει ευαίσθητες πληροφορίες, οι οποίες βοηθούν τον χάκερ να προετοιμαστεί για επίθεση στην εφαρμογή.

Ακολουθούν δοκιμές σε Tomcat 7.x, περιβάλλον UNIX.

Κοινό

Αυτό έχει σχεδιαστεί για διαχειριστή Middleware, Υποστήριξη Εφαρμογών, Αναλυτή Συστήματος ή οποιονδήποτε εργάζεται ή θέλει να μάθει το Tomcat Hardening and Security.

Η καλή γνώση της εντολής Tomcat & UNIX είναι υποχρεωτική.

Σημειώσεις

Χρειαζόμαστε κάποιο εργαλείο για να εξετάσουμε τις κεφαλίδες HTTP για επαλήθευση. Υπάρχουν δύο τρόποι που μπορείτε να το κάνετε αυτό.

Εάν δοκιμάζετε εφαρμογή που αντιμετωπίζει το Διαδίκτυο, τότε μπορείτε να χρησιμοποιήσετε τα ακόλουθα εργαλεία κεφαλίδας HTTP για να επαληθεύσετε την υλοποίηση.

Και για μια εφαρμογή Intranet, μπορείτε να χρησιμοποιήσετε το Google Chrome, τα εργαλεία προγραμματιστή του Firefox.

  Πώς να επαναφέρετε τα Apple AirPods

Ως βέλτιστη πρακτική, πρέπει να δημιουργήσετε αντίγραφο ασφαλείας οποιουδήποτε αρχείου πρόκειται να τροποποιήσετε.

Θα ονομάσουμε το φάκελο εγκατάστασης Tomcat ως $tomcat σε αυτές τις οδηγίες.

Ας περάσουμε από τις διαδικασίες σκλήρυνσης και ασφάλισης.

Αφαιρέστε το Banner διακομιστή

Η κατάργηση του Banner διακομιστή από την κεφαλίδα HTTP είναι ένα από τα πρώτα πράγματα που πρέπει να κάνετε ως σκλήρυνση.

Το να έχετε ένα banner διακομιστή αποκαλύπτει το προϊόν και την έκδοση που χρησιμοποιείτε και οδηγεί σε ευπάθεια διαρροής πληροφοριών.

Από προεπιλογή, μια σελίδα που εξυπηρετείται από την Tomcat θα εμφανίζεται έτσι.

Ας αποκρύψουμε τα στοιχεία του προϊόντος και της έκδοσης από την κεφαλίδα του διακομιστή.

  • Μεταβείτε στο φάκελο $tomcat/conf
  • Τροποποιήστε το server.xml χρησιμοποιώντας το vi
  • Προσθήκη παρακάτω στη θύρα Connector
Server =” “

Πχ: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Αποθηκεύστε το αρχείο και επανεκκινήστε το Tomcat. Τώρα, όταν αποκτάτε πρόσβαση σε μια εφαρμογή, θα πρέπει να βλέπετε μια κενή τιμή για την κεφαλίδα του διακομιστή.

Ξεκινώντας το Tomcat με έναν Υπεύθυνο Ασφαλείας

Το Security Manager σας προστατεύει από μια μη αξιόπιστη μικροεφαρμογή που εκτελείται στο πρόγραμμα περιήγησής σας.

Το να τρέχετε το Tomcat με έναν διαχειριστή ασφαλείας είναι καλύτερο από το να τρέχετε χωρίς έναν. Η Tomcat διαθέτει εξαιρετική τεκμηρίωση Tomcat Security Manager.

Το καλό με αυτό είναι ότι δεν χρειάζεται να αλλάξετε κανένα αρχείο διαμόρφωσης. Είναι ακριβώς ο τρόπος που εκτελείτε το αρχείο startup.sh.

Το μόνο που έχετε να κάνετε είναι να ξεκινήσετε το tomcat με το επιχείρημα ασφαλείας.

[[email protected] 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

Η εξυπηρέτηση των αιτημάτων ιστού μέσω HTTPS είναι απαραίτητη για την προστασία των δεδομένων μεταξύ πελάτη και Tomcat. Για να κάνετε την εφαρμογή Ιστού προσβάσιμη μέσω HTTPS, πρέπει να εφαρμόσετε πιστοποιητικό SSL.

Αν υποθέσουμε ότι έχετε ήδη έτοιμο το keystore με το πιστοποιητικό, μπορείτε να προσθέσετε παρακάτω γραμμή στο αρχείο server.xml στην ενότητα Θύρα σύνδεσης.

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

Αλλάξτε το όνομα του αρχείου Keystore και τον κωδικό πρόσβασης με το δικό σας.

  Πώς να ορίσετε όρια εφαρμογών και παιχνιδιών στο Xbox One

Εάν χρειάζεστε βοήθεια με τη διαδικασία αποθήκευσης κλειδιών και ΕΚΕ, ανατρέξτε σε αυτόν τον οδηγό.

Επιβολή HTTPS

Αυτό ισχύει μόνο όταν έχετε ενεργοποιήσει το SSL. Αν όχι, θα σπάσει την εφαρμογή.

Αφού ενεργοποιήσετε το SSL, θα ήταν καλό να ανακατευθύνετε όλα τα αιτήματα HTTP στο HTTPS για ασφαλή επικοινωνία μεταξύ του χρήστη στον διακομιστή εφαρμογών Tomcat.

  • Μεταβείτε στο φάκελο $tomcat/conf
  • Τροποποιήστε το web.xml χρησιμοποιώντας το vi
  • Προσθήκη ακόλουθου πριν από τη σύνταξη
<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>
  • Αποθηκεύστε το αρχείο και επανεκκινήστε το Tomcat

Είναι δυνατή η κλοπή ή ο χειρισμός της περιόδου λειτουργίας εφαρμογής web και των cookies χωρίς να έχετε ασφαλές cookie. Είναι μια σημαία που εισάγεται στην κεφαλίδα απόκρισης.

Αυτό γίνεται προσθέτοντας κάτω από τη γραμμή στην ενότητα session-config του αρχείου web.xml

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

Στιγμιότυπο οθόνης διαμόρφωσης:

Αποθηκεύστε το αρχείο και επανεκκινήστε το Tomcat για να εξετάσετε την κεφαλίδα απόκρισης HTTP.

Εκτελέστε το Tomcat από μη προνομιούχο λογαριασμό

Είναι καλό να χρησιμοποιήσετε έναν ξεχωριστό μη προνομιούχο χρήστη για το Tomcat. Η ιδέα εδώ είναι να προστατεύσουμε άλλες υπηρεσίες που εκτελούνται σε περίπτωση που κάποιος λογαριασμός παραβιαστεί.

  • Δημιουργήστε έναν χρήστη UNIX, ας πούμε tomcat
useradd tomcat
  • Σταματήστε το Tomcat αν τρέχει
  • Αλλαγή ιδιοκτησίας $tomcat σε χρήστη tomcat
chown -R tomcat:tomcat tomcat/

Ξεκινήστε το Tomcat και βεβαιωθείτε ότι εκτελείται με το χρήστη Tomcat

Κατάργηση προεπιλεγμένων/ανεπιθύμητων εφαρμογών

Από προεπιλογή, το Tomcat συνοδεύεται από τις ακόλουθες εφαρμογές web, οι οποίες μπορεί να απαιτούνται ή όχι σε περιβάλλον παραγωγής.

Μπορείτε να τα διαγράψετε για να το διατηρήσετε καθαρό και να αποφύγετε οποιονδήποτε γνωστό κίνδυνο ασφάλειας με την προεπιλεγμένη εφαρμογή Tomcat.

  • ROOT – Προεπιλεγμένη σελίδα καλωσορίσματος
  • Έγγραφα – Τεκμηρίωση Tomcat
  • Παραδείγματα – JSP και servlets για επίδειξη
  • Manager, host-manager – διοίκηση Tomcat
  Τι είναι το LiDAR και πώς θα λειτουργήσει στο iPhone;

Είναι διαθέσιμα στον φάκελο $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 και την εντολή

Από προεπιλογή, το tomcat έχει ρυθμιστεί ώστε να τερματίζεται στη θύρα 8005.

Γνωρίζετε ότι μπορείτε να τερματίσετε την παρουσία του tomcat κάνοντας telnet σε θύρα IP: και εκδίδοντας την εντολή SHUTDOWN;

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 #

Επικίνδυνος!

Βλέπετε, η προεπιλεγμένη διαμόρφωση οδηγεί σε κίνδυνο υψηλής ασφάλειας.

Συνιστάται να αλλάξετε τη θύρα τερματισμού λειτουργίας του tomcat και την προεπιλεγμένη εντολή σε κάτι απρόβλεπτο.

  • Τροποποιήστε τα ακόλουθα στο server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Αλλαγή σε κάποια άλλη αχρησιμοποίητη θύρα

SHUTDOWN – Αλλαγή σε κάτι περίπλοκο

Πρώην-

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

Αντικαταστήστε την προεπιλεγμένη σελίδα 404, 403, 500

Έχοντας προεπιλεγμένη σελίδα για σφάλμα διακομιστή μη βρέθηκε, απαγορευμένο, εκτίθενται οι λεπτομέρειες έκδοσης.

Ας δούμε την προεπιλεγμένη σελίδα 404.

Για να μετριαστείτε, μπορείτε πρώτα να δημιουργήσετε μια σελίδα γενικού σφάλματος και να διαμορφώσετε το web.xml ώστε να ανακατευθύνεται σε μια σελίδα γενικού σφάλματος.

  • Μεταβείτε στο $tomcat/webapps/$application
  • Δημιουργήστε ένα αρχείο error.jsp χρησιμοποιώντας το πρόγραμμα επεξεργασίας vi
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Μεταβείτε στο φάκελο $tomcat/conf
  • Προσθέστε τα ακόλουθα στο αρχείο web.xml. Βεβαιωθείτε ότι έχετε προσθέσει πριν από τη σύνταξη
<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>
  • Κάντε επανεκκίνηση του διακομιστή tomcat για να το δοκιμάσετε

Πολύ καλύτερα!

Μπορείτε να το κάνετε αυτό και για το java.lang.Exception. Αυτό θα βοηθήσει να μην εκτεθούν οι πληροφορίες έκδοσης του tomcat, εάν υπάρχει εξαίρεση java lang.

Απλώς προσθέστε ακόλουθους στο web.xml και επανεκκινήστε τον διακομιστή tomcat.

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

Ελπίζω ο παραπάνω οδηγός να σας δώσει μια ιδέα για την ασφάλεια του Tomcat. Αν ψάχνετε να μάθετε περισσότερα για τη διαχείριση του Tomcat, ρίξτε μια ματιά σε αυτό διαδικτυακό μάθημα.
Επίσης, μάθετε πώς να ρυθμίσετε το WAS για να σταματήσει να ζητά κωδικό πρόσβασης κατά τον τερματισμό λειτουργίας εδώ.