HTTPS sempre. HTTP te lo devi dimenticare! Fare un buon sito WEB è importante, ma se non viene integrato in un ambiente ben configurato possono nascere seri problemi. I servizi WEB devono sempre essere esposti su HTTPS, senza dimenticare che il servizio HTTPS deve essere configurato e mantenuto costantemente.
HTTPS è un protocollo impiegato per consentire il trasferimento di dati secondo le specifiche HTTP su un canale cifrato.
Quando si espone un sito WEB o un applicativo WEB, è necessario che tutte le informazioni trasferite – da, e verso il server e il client (i.e: browser) – siano riservate, quindi usare un canale cifrato è indispensabile.
Usare un canale HTTPS sicuramente ci tutela, ma siamo sicuri che il canale cifrato che stiamo impiegando è affidabile? La domanda dovrebbe ammettere una sola risposta. Cioè rassicurante Sì. In realtà non è così!
Gli strumenti che vengono impiegati per implementare il servizio HTTPS si basano su componenti software e, come tutti gli strumenti software, devono essere continuamente aggiornati e mantenuti. Per la manutenzione e l’aggiornamento non sempre basta un semplice click, a volte è necessario apportare modifiche agli applicativi o agli ambienti impiegati ad ospitare i nostri preziosi siti WEB.
La cifratura
La cifratura del canale avviene a seguito di attività di handshaking (stretta di mano), tra il server e il client. Negli anni sono stati definiti ed implementati vari protocolli per raggiungere questo scopo:
SSL 1.0, SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3
Ormai alcuni protocolli sono deprecati, attualmente sono impiegati quelli della famiglia TLS.
TLS è il successore di SSL 3.0. TLS è un protocollo che fornisce la crittografia dei dati e l’integrità tra i canali di comunicazione.
SSL 3.0 è stato utilizzato come base per TLS 1.0. SSL 3.0 è vulnerabile ed è stato oggetto di attacchi con tecniche vecchie e moderne, come POODLE, BEAST, che hanno reso SSL 3.0 un protocollo di sicurezza deprecato.
Qua la mano!
Riporto l’handshake del protocollo TLS per far comprendere cosa avviene quando tentiamo di accedere ad una risorsa WEB in HTTPS:
- Scambio di messaggi di saluto per concordare algoritmi, scambiando valori a caso per verificare la ripresa della sessione.
- Scambio di parametri crittografici tra il client e il server per concordare una chiave segreta.
- Scambio di certificati e informazioni crittografiche per consentire al client e al server di autenticarsi.
- Generazione di una chiave segreta da valori random (questa chiave segreta verrà impiegata per cifrare i pacchetti di comunicazione previsti nel protocollo HTTP).
- Definizione di un insieme di parametri di sicurezza al livello di registrazione.
- Verifica, tra il client e il server, che il peer abbia calcolato gli stessi parametri di sicurezza e che l’handshake si avvenuto senza manomissione da parte di un aggressore (terzo attore).
Questo protocollo viene implementato da componenti software che sono presenti sia lato client sia lato server. Entrambi i componenti sono soggetti a mitigazione di BUG e vulnerabilità, con attività di aggiornamento.
Queste attività di aggiornamento dovrebbero essere eseguite con frequenza, sia lato client sia lato server, per prevenire criticità sulla implementazione del canale cifrato.
Basta questa attività di aggiornamento? Purtroppo NO!
Per dimostrarlo fornirò un esempio reale, basato sull’analisi di questo sito WEB.
Premetto che eseguo costantemente gli aggiornamenti, ma ho deciso di svolgere un’ulteriore attività: l’ispezione del sistema per validare la compliance con le più recenti best practice al fine di migliorare l’affidabilità sotto il profilo della sicurezza.
Lo strumento che ho utilizzato è Qualys (il servizio è gratuito, invito tutti a verificare autonomamente il livello di affidabilità del proprio fornitore di servizi WEB).
TEST 1
Il risultato è discreto, sono evidenziate alcune criticità minori, però niente di critico! Rispetto al passato il risultato è peggiorato, perché?
Perché nel tempo le tecnologie si sono evolute e, quindi, sono emerse nuove criticità che sono state risolte in parte con gli aggiornamenti, altre, invece, richiedono obbligatoriamente interventi manuali alle configurazioni dei server o agli applicativi.
Per svolgere quest’attività ho impiegato un tool reso disponibile gratuitamente dalla fondazione Mozilla, che fornisce un ottimo strumento di supporto alla configurazione dei server WEB https://ssl-config.mozilla.org/.
Attraverso lo strumento di Mozilla ho potuto capire dove effettuare le variazioni e le integrazioni. Poi ho subito testato con Qualys le nuove ottimizzazioni.
TEST 2
Adesso tocca a te! Testa i tuoi siti o applicativi WEB, potresti trovare problemi più o meno seri che possono essere risolti con minime attività di ottimizzazione.
Mantenere in buona salute le risorse su Internet richiede un costante lavoro di aggiornamento e verifica -troppo spesso sottovalutato- che deve essere messo in cima alle attività di ogni sistemista.