Guida all’indurimento e alla sicurezza di Apache Tomcat

Una guida pratica per rafforzare e proteggere Apache Tomcat Server con le migliori pratiche.

Tomcat è uno dei server Servlet e JSP Container più popolari. È utilizzato da alcuni dei seguenti siti Web ad alto traffico:

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

Il grafico sottostante mostra la posizione di mercato di Tomcat nel server delle applicazioni Java.

Fonte: Plumbr

Tecnicamente, puoi utilizzare Tomcat come server front-end per soddisfare direttamente le richieste del sito. Tuttavia, in un ambiente di produzione, potresti voler utilizzare alcuni server Web come Apache, Nginx come front-end per instradare le richieste a Tomcat.

L’utilizzo di un server Web per gestire le richieste offre vantaggi in termini di prestazioni e sicurezza. Se stai utilizzando Apache HTTP come server Web front-end, devi considerare di proteggere anche quello.

Avere una configurazione Tomcat predefinita può esporre informazioni riservate, il che aiuta l’hacker a prepararsi per un attacco all’applicazione.

Di seguito sono testati su Tomcat 7.x, ambiente UNIX.

Pubblico

È progettato per l’amministratore del middleware, il supporto delle applicazioni, l’analista di sistema o chiunque lavori o sia desideroso di apprendere Tomcat Hardening and Security.

È obbligatoria una buona conoscenza del comando Tomcat e UNIX.

Appunti

Abbiamo bisogno di uno strumento per esaminare le intestazioni HTTP per la verifica. Ci sono due modi per farlo.

Se si esegue il test di un’applicazione con connessione a Internet, è possibile utilizzare i seguenti strumenti di intestazione HTTP per verificare l’implementazione.

E per un’applicazione Intranet, puoi utilizzare Google Chrome, gli strumenti per sviluppatori di Firefox.

Come best practice, devi eseguire un backup di qualsiasi file che stai per modificare.

Chiameremo la cartella di installazione di Tomcat come $tomcat in tutte queste linee guida.

Esaminiamo le procedure di indurimento e fissaggio.

Rimuovi il banner del server

La rimozione del banner del server dall’intestazione HTTP è una delle prime cose da fare come protezione avanzata.

Avere un banner del server espone il prodotto e la versione che stai utilizzando e porta alla vulnerabilità della perdita di informazioni.

Per impostazione predefinita, una pagina servita da Tomcat verrà visualizzata in questo modo.

Nascondiamo i dettagli del prodotto e della versione dall’intestazione Server.

  • Vai alla cartella $tomcat/conf
  • Modifica server.xml utilizzando vi
  • Aggiungi quanto segue alla porta del connettore
Server =” “

Es: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Salva il file e riavvia il Tomcat. Ora, quando accedi a un’applicazione, dovresti vedere un valore vuoto per l’intestazione Server.

Avvio di Tomcat con un Security Manager

Security Manager ti protegge da un’applet non attendibile in esecuzione nel tuo browser.

Eseguire Tomcat con un gestore della sicurezza è meglio che correre senza. Tomcat ha un’eccellente documentazione su Responsabile della sicurezza Tomcat.

La cosa buona di questo è che non è necessario modificare alcun file di configurazione. È solo il modo in cui esegui il file startup.sh.

Tutto quello che devi fare è iniziare Tomcat con l’argomento –security.

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

Abilita SSL/TLS

Il servizio di richieste Web su HTTPS è essenziale per proteggere i dati tra il client e Tomcat. Per rendere la tua applicazione web accessibile tramite HTTPS, devi implementare il certificato SSL.

Supponendo che tu abbia già il keystore pronto con il certificato, puoi aggiungere la riga seguente nel file server.xml nella sezione della porta del connettore.

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

Cambia il nome del file Keystore e la password con la tua.

Se hai bisogno di aiuto con il processo di keystore e CSR, fai riferimento a questa guida.

Applica HTTPS

Questo è applicabile solo quando hai abilitato SSL. In caso contrario, interromperà l’applicazione.

Dopo aver abilitato SSL, sarebbe opportuno forzare il reindirizzamento di tutte le richieste HTTP a HTTPS per una comunicazione sicura tra l’utente al server delle applicazioni Tomcat.

  • Vai alla cartella $tomcat/conf
  • Modifica web.xml usando vi
  • Aggiungi seguito prima di sintassi
<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>
  • Salva il file e riavvia il Tomcat

È possibile rubare o manipolare la sessione dell’applicazione Web e i cookie senza disporre di un cookie sicuro. È un flag che viene inserito nell’intestazione della risposta.

Questo viene fatto aggiungendo sotto la riga nella sezione session-config del file web.xml

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

Schermata di configurazione:

Salva il file e riavvia Tomcat per esaminare l’intestazione della risposta HTTP.

Esegui Tomcat da un account non privilegiato

È utile utilizzare un utente non privilegiato separato per Tomcat. L’idea qui è quella di proteggere altri servizi in esecuzione nel caso in cui uno qualsiasi degli account venga compromesso.

  • Crea un utente UNIX, diciamo Tomcat
useradd tomcat
  • Ferma il Tomcat se è in esecuzione
  • Cambia la proprietà di $tomcat in utente tomcat
chown -R tomcat:tomcat tomcat/

Avvia Tomcat e assicurati che sia in esecuzione con l’utente Tomcat

Rimuovere le applicazioni predefinite/indesiderate

Per impostazione predefinita, Tomcat viene fornito con le seguenti applicazioni Web, che potrebbero essere richieste o meno in un ambiente di produzione.

Puoi eliminarli per mantenerlo pulito ed evitare qualsiasi rischio per la sicurezza noto con l’applicazione predefinita Tomcat.

  • ROOT – Pagina di benvenuto predefinita
  • Documenti – Documentazione Tomcat
  • Esempi – JSP e servlet per la dimostrazione
  • Manager, host-manager – Amministrazione Tomcat

Sono disponibili nella cartella $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]#

Cambia la porta di SPEGNIMENTO e il comando

Per impostazione predefinita, Tomcat è configurato per l’arresto sulla porta 8005.

Sai che puoi spegnere l’istanza di Tomcat eseguendo un telnet su IP: porta ed emettendo il comando 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 #

Pericoloso!

Vedete, avere una configurazione predefinita comporta un rischio elevato per la sicurezza.

Si consiglia di modificare la porta di arresto di Tomcat e il comando predefinito in qualcosa di imprevedibile.

  • Modificare quanto segue in server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Passa a un’altra porta inutilizzata

SHUTDOWN – Passa a qualcosa di complicato

Ex-

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

Sostituisci la pagina predefinita 404, 403, 500

Avere una pagina predefinita per errore del server non trovato, vietato espone i dettagli della versione.

Diamo un’occhiata alla pagina 404 predefinita.

Per mitigare, puoi prima creare una pagina di errore generale e configurare web.xml per reindirizzare a una pagina di errore generale.

  • Vai a $tomcat/webapps/$applicazione
  • Crea un file error.jsp usando l’editor vi
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Vai alla cartella $tomcat/conf
  • Aggiungi quanto segue nel file web.xml. Assicurati di aggiungere prima la sintassi di
<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>
  • Riavvia il server Tomcat per testarlo

Molto meglio!

Puoi farlo anche per java.lang.Exception. Ciò aiuterà a non esporre le informazioni sulla versione di Tomcat in caso di eccezioni di java lang.

Basta aggiungere il seguito in web.xml e riavviare il server Tomcat.

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

Spero che la guida sopra ti dia un’idea su come proteggere Tomcat. Se stai cercando di saperne di più sull’amministrazione Tomcat, dai un’occhiata a questo corso in linea.
Inoltre, scopri come configurare WAS per interrompere la richiesta di password durante lo spegnimento qui.