Przewodnik po hartowaniu i bezpieczeństwie Apache Tomcat

Praktyczny przewodnik po wzmacnianiu i zabezpieczaniu serwera Apache Tomcat z najlepszymi praktykami.

Tomcat to jeden z najpopularniejszych serwerów Servlet i JSP Container. Jest używany przez niektóre z następujących witryn o dużym natężeniu ruchu:

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

Poniższy wykres przedstawia pozycję rynkową Tomcata na serwerze aplikacji Java.

Źródło: Plumbr

Technicznie rzecz biorąc, Tomcata można używać jako serwera frontonu do bezpośredniej obsługi żądań witryn. Jednak w środowisku produkcyjnym możesz chcieć użyć niektórych serwerów internetowych, takich jak Apache, Nginx, jako front-end do kierowania żądań do Tomcata.

Korzystanie z serwera WWW do obsługi żądań zapewnia korzyści w zakresie wydajności i bezpieczeństwa. Jeśli używasz Apache HTTP jako frontowego serwera WWW, musisz również rozważyć jego zabezpieczenie.

Posiadanie domyślnej konfiguracji Tomcata może ujawnić poufne informacje, co pomaga hakerowi przygotować się do ataku na aplikację.

Poniższe są testowane na Tomcat 7.x, środowisku UNIX.

Publiczność

Jest to przeznaczone dla administratora oprogramowania pośredniego, wsparcia aplikacji, analityka systemu lub każdego, kto pracuje lub chce nauczyć się hartowania i zabezpieczeń Tomcat.

Dobra znajomość komend Tomcat i UNIX jest obowiązkowa.

Uwagi

Potrzebujemy narzędzia do sprawdzania nagłówków HTTP w celu weryfikacji. Możesz to zrobić na dwa sposoby.

Jeśli testujesz aplikację dostępną w Internecie, możesz użyć następujących narzędzi HTTP Header, aby zweryfikować implementację.

A w przypadku aplikacji intranetowych możesz użyć narzędzi programistycznych Google Chrome, Firefox.

Najlepszym rozwiązaniem jest wykonanie kopii zapasowej każdego pliku, który zamierzasz zmodyfikować.

W niniejszych wytycznych będziemy nazywać folder instalacyjny Tomcat jako $tomcat.

Przejdźmy przez procedury utwardzania i zabezpieczania.

Usuń baner serwera

Usunięcie banera serwera z nagłówka HTTP jest jedną z pierwszych rzeczy, które należy wykonać jako wzmocnienie.

Posiadanie banera serwera ujawnia produkt i wersję, z której korzystasz, i prowadzi do podatności na wyciek informacji.

Domyślnie strona obsługiwana przez Tomcat będzie wyświetlana w ten sposób.

Ukryjmy szczegóły produktu i wersji w nagłówku Serwer.

  • Przejdź do folderu $tomcat/conf
  • Zmodyfikuj plik server.xml za pomocą vi
  • Dodaj następujące do portu złącza
Server =” “

Były: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Zapisz plik i uruchom ponownie Tomcata. Teraz, gdy uzyskujesz dostęp do aplikacji, powinieneś zobaczyć pustą wartość w nagłówku serwera.

Uruchamianie Tomcata z menedżerem ds. bezpieczeństwa

Security Manager chroni Cię przed niezaufanym apletem działającym w Twojej przeglądarce.

Uruchamianie Tomcata z menedżerem bezpieczeństwa jest lepsze niż uruchamianie bez niego. Tomcat ma doskonałą dokumentację na Menedżer bezpieczeństwa Tomcat.

Dobrą rzeczą jest to, że nie musisz zmieniać żadnego pliku konfiguracyjnego. To po prostu sposób, w jaki uruchamiasz plik startup.sh.

Wszystko, co musisz zrobić, to uruchomić tomcat z argumentem –security.

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

Włącz SSL/TLS

Obsługa żądań internetowych przez HTTPS jest niezbędna do ochrony danych między klientem a Tomcat. Aby Twoja aplikacja internetowa była dostępna przez HTTPS, musisz zaimplementować certyfikat SSL.

Zakładając, że masz już gotowy magazyn kluczy z certyfikatem, możesz dodać poniższy wiersz w pliku server.xml w sekcji Port łącznika.

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

Zmień nazwę pliku Keystore i hasło na swoje.

Jeśli potrzebujesz pomocy w procesie przechowywania kluczy i CSR, zapoznaj się z tym przewodnikiem.

Wymuszaj HTTPS

Ma to zastosowanie tylko wtedy, gdy masz włączony protokół SSL. Jeśli nie, zepsuje to aplikację.

Po włączeniu SSL dobrze byłoby wymusić przekierowanie wszystkich żądań HTTP do HTTPS, aby zapewnić bezpieczną komunikację między użytkownikiem a serwerem aplikacji Tomcat.

  • Przejdź do folderu $tomcat/conf
  • Zmodyfikuj plik web.xml za pomocą vi
  • Dodaj następujące przed składnią
<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>
  • Zapisz plik i uruchom ponownie Tomcat

Możliwe jest kradzież lub manipulowanie sesją aplikacji internetowej i plikami cookie bez posiadania bezpiecznego pliku cookie. Jest to flaga, która jest wstrzykiwana do nagłówka odpowiedzi.

Odbywa się to poprzez dodanie poniżej wiersza w sekcji session-config pliku web.xml

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

Zrzut ekranu konfiguracji:

Zapisz plik i uruchom ponownie Tomcat, aby sprawdzić nagłówek odpowiedzi HTTP.

Uruchom Tomcata z nieuprzywilejowanego konta

Dobrze jest użyć osobnego nieuprzywilejowanego użytkownika dla Tomcata. Chodzi o to, aby chronić inne działające usługi w przypadku naruszenia któregokolwiek z kont.

  • Utwórz użytkownika UNIX, powiedzmy tomcat
useradd tomcat
  • Zatrzymaj Tomcata, jeśli działa
  • Zmień własność $tomcat na użytkownika tomcat
chown -R tomcat:tomcat tomcat/

Uruchom Tomcat i upewnij się, że działa z użytkownikiem tomcat

Usuń domyślne/niechciane aplikacje

Domyślnie Tomcat jest dostarczany z następującymi aplikacjami internetowymi, które mogą być lub nie być wymagane w środowisku produkcyjnym.

Możesz je usunąć, aby utrzymać je w czystości i uniknąć wszelkich znanych zagrożeń bezpieczeństwa dzięki domyślnej aplikacji Tomcat.

  • ROOT – Domyślna strona powitalna
  • Dokumenty – dokumentacja Tomcat
  • Przykłady – JSP i serwlety do demonstracji
  • Manager, host-manager – administracja Tomcat

Są one dostępne w folderze $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]#

Zmień port SHUTDOWN i polecenie

Domyślnie tomcat jest skonfigurowany do wyłączania na porcie 8005.

Czy wiesz, że możesz zamknąć instancję tomcat, wykonując telnet na adres IP: port i wydając polecenie 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 #

Niebezpieczny!

Widzisz, posiadanie domyślnej konfiguracji prowadzi do wysokiego ryzyka bezpieczeństwa.

Zaleca się zmianę portu zamykania tomcat i domyślnego polecenia na coś nieprzewidywalnego.

  • Zmodyfikuj następujące elementy w pliku server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Zmień na inny nieużywany port

WYŁĄCZENIE – Zmień na coś skomplikowanego

Były-

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

Zastąp domyślną stronę 404, 403, 500

Posiadanie domyślnej strony dla nieznalezionego, zabronionego, błędu serwera ujawnia szczegóły wersji.

Spójrzmy na domyślną stronę 404.

Aby to złagodzić, możesz najpierw utworzyć stronę błędu ogólnego i skonfigurować web.xml tak, aby przekierowywał do strony błędu ogólnego.

  • Przejdź do $tomcat/webapps/$application
  • Utwórz plik error.jsp za pomocą edytora vi
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Przejdź do folderu $tomcat/conf
  • Dodaj następujące elementy w pliku web.xml. Upewnij się, że dodałeś przed składnią
<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>
  • Uruchom ponownie serwer tomcat, aby go przetestować

Dużo lepiej!

Możesz to zrobić również dla java.lang.Exception. Pomoże to w nieujawnianiu informacji o wersji tomcat w przypadku wyjątku java lang.

Wystarczy dodać następujące w web.xml i zrestartować serwer tomcat.

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

Mam nadzieję, że powyższy poradnik da ci pomysł na zabezpieczenie Tomcata. Jeśli chcesz dowiedzieć się więcej o administracji Tomcata, sprawdź to kurs online.
Dowiedz się również, jak skonfigurować WAS, aby przestał pytać o hasło podczas zamykania tutaj.