Przewodnik po hartowaniu i bezpieczeństwie Apache Tomcat

Opublikowany: 2015-02-14

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.

kocur-udział-rynkowy
Ź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 Tomcat.

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

  • Sprawdzanie nagłówków HTTP
  • Cel hakera

W przypadku aplikacji intranetowych możesz używać narzędzi programistycznych Google Chrome i 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.

tomcat-server-header

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 Connector port
 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.
tomcat-usunięty-serwer-nagłówek

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ę dotyczącą Tomcat Security Manager.

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 .

 [root@geekflare 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. [root@geekflare 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 na server. plik xml w sekcji Connector port .

 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 web.xml za pomocą vi
  • Dodaj następujące przed składnią </web-app>
 <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

Dodaj flagę Secure & HttpOnly do pliku cookie

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:

tomcat-http tylko

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

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

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.

tomcat-default-404-strona

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>
<głowa> 
<title>Strona błędu</title>
</head>
<ciało> To błąd! </body>
</html>
  • Przejdź do folderu $tomcat/conf
  • Dodaj następujące elementy w pliku web.xml. Upewnij się, że dodałeś przed składnią </web-app>
 <strona-błędu> 
<error-code>404</error-code> 
<location>/error.jsp</location>
</error-page>
<strona-błędu> 
<error-code>403</error-code> 
<location>/error.jsp</location>
</error-page>
<strona-błędu> 
<error-code>500</error-code> 
<location>/error.jsp</location>
</error-page>
  • Uruchom ponownie serwer tomcat, aby go przetestować
tomcat-niestandardowy-błąd

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.

 <strona-błędu> 
<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 Tomcat, sprawdź ten kurs online.
Dowiedz się również, jak skonfigurować WAS, aby przestał pytać o hasło podczas zamykania tutaj.