HTTP Strict Transport Security
Storia della specifica
HSTS è la concretizzazione di uno degli aspetti della visione progettuale di Jeff Hodges e Andy Steingruebl per migliorare la sicurezza del web, e presentata nel 2010 all'interno del loro articolo 2010 intitolato The Need for Coherent Web Security Policy Framework(s).[1]
Le specifiche HSTS si basano sul contributo originale di Jackson e Barth descritto nell'articolo ForceHTTPS: Protecting High-Security Web Sites from Network Attacks.[2]
La prima bozza originale delle specifiche fu scritta da Jeff Hodges[3] di PayPal, Collin Jackson[4] e Adam Barth[5] e pubblicata 18 settembre 2009.[6]
La prima specifica di HSTS fu resa pubblica il 18 dicembre 2009 e corrispose all'ultima cosiddetta "versione della comunità", che beneficiava appunto del riscontro pubblico.[7]
In seguito all'approvazione del 2 ottobre 2012 da parte dell'IESG, la specifica di HSTS è stata pubblicata come RFC Proposed Standard (standard proposto) il 19 novembre 2012 nel RFC 6797[8]. La prima versione originale del documento fu però depositata già il 17 giugno 2010 come Internet-Draft, momento nel quale il titolo della specifica fu cambiato da "Strict Transport Security" (STS) al più preciso "HTTP Strict Transport Security".[9] Ciononostante, l'intestazione HTTP definita dalle specifiche ha mantenuto il nome di "Strict-Transport-Security".
Panoramica della procedura
Un server implementa la politica HSTS se emette la relativa intestazione in un messaggio di una comunicazione HTTPS (su HTTP tali intestazioni sono invece ignorate).[10] Per esempio, un server potrebbe inviare un'intestazione che richieda che ogni richiesta a lui diretta nell'anno successivo sia trasmessa necessariamente tramite HTTPS. In tal caso, dato che il parametro max-age è espresso in secondi e che 31.536.000 secondi sono una buona approssimazione di un anno, l'intestazione sarebbe:
Strict-Transport-Security: max-age=31536000; includeSubDomains;
.
Quando un'applicazione web[11] dichiara agli user agent una politica HSTS, i client che supportano il meccanismo si comportano come descritto di seguito.[12]
- Ogni collegamento non sicuro è trasformato in un collegamento sicuro, cioè, per esempio,
http://example.com/some/page/
è modificato inhttps://example.com/some/page/
prima che tale risorsa venga utilizzata. - Se la sicurezza della connessione non è considerata affidabile, ad esempio se il certificato TLS non è tale, un messaggio d'errore è mostrato all'utente e l'accesso all'applicazione web è impedito.[12]
La politica HSTS aiuta a proteggere gli utenti delle applicazioni web da certi attacchi passivi (eavesdropping) o attivi:[13] in un attacco man-in-the-middle è molto più difficile intercettare domande e risposte tra l'utente e l'applicazione web quando il primo è in modalità HSTS rispetto alla seconda.
Applicabilità
La vulnerabilità di sicurezza più importante che possa essere scongiurata da HSTS è il cosiddetto man-in-the-middle con la tecnica di SSL-stripping, illustrata pubblicamente per la prima volta nel 2009 da Moxie Marlinspike nel suo intervento «New Tricks For Defeating SSL In Practice» (Messa in pratica dei nuovi trucchi per sconfiggere SSL) presentato al BlackHat Federal.[14][15] Questo attacco consiste nel convertire silenziosamente una connessione HTTP sicura, appoggiata a SSL o a TLS, in una connessione HTTP in chiaro: l'utente può verificare che effettivamente la connessione non sia sicura, ma non ha alcun modo di sapere che essa debba esserlo. Dato che diversi siti non usano TLS/SSL, infatti, non c'è modo di capire, se non conoscendo a priori lo specifico sito, se l'insicurezza della connessione sia l'effetto di un attacco, o se invece è il comportamento abituale dell'applicazione web. Inoltre il processo di regressione di sicurezza non genera alcun messaggio d'avvertimento all'utente, rendendo l'attacco discreto agli occhi di quasi chiunque. Lo strumento sslstrip di Marlinspike automatizza completamente tale attacco.
HSTS si occupa di questo problema[13] informando il browser che le sue connessioni al sito dovrebbero fare sempre uso di TLS/SSL. Visto che l'intestazione HSTS può però essere comunque manomessa da un attaccante nel momento della prima visita da parte di un utente, Google Chrome, Mozilla Firefox, Internet Explorer e Microsoft Edge cercano di limitare la problematica inserendo un elenco preliminare dei siti HSTS.[16][17][18] Nel prossimo paragrafo Limiti si discuterà anche di come questa soluzione sia necessariamente insufficiente, dato che il suddetto elenco non può essere esaustivo.
HSTS aiuta anche a evitare il furto di credenziali di accesso a siti web basati su cookie HTTP, un attacco praticabile con strumenti facilmente disponibili, quale Firesheep.[19]
Dato che HSTS ha limiti temporali, il protocollo è sensibile ad attacchi che prevedono di spostare l'orologio della vittima, per esempio inviando falsi pacchetti NTP.[20]
Supporto da parte dei browser
- Chromium e Google Chrome dalla versione 4.0.211.0[21][22]
- Firefox dalla versione 4;[23] la versione 17 contiene una lista di siti che supportano HSTS.[17]
- Opera dalla versione 12[24]
- Safari da OS X Mavericks[25]
- Internet Explorer 11 su Windows 8.1 e Windows 7 qualora sia installato KB 3058515, su support.microsoft.com (pubblicato nel giugno 2015).[26]
- Microsoft Edge e Internet Explorer 11 su Windows 10.[27][28]
Buone norme per la messa in opera
A seconda della specifica messa in opera, certe buone norme consentono di evitare alcune minacce alla sicurezza, come gli attacchi con iniezione di cookie.
- Gli host HSTS dovrebbero dichiarare la politica HSTS nel loro nome di livello massimo: per esempio, un server in ascolto su https://sub.example.com dovrebbe rispondere con l'intestazione HSTS anche per richieste a https://example.com .
- Un host che serve https://www.example.com dovrebbe aggiungere una richiesta ad una risorsa di https://example.com , cosicché HSTS sia impostato anche per il dominio padre. In tal modo l'utente è protetto da eventuali cookie injection effettuati da un man-in-the-middle che potrebbe iniettare un riferimento verso il dominio superiore o un altro dello stesso livello (come http://nonexistentpeer.example.com) dove risponderebbe.
Note
- ^ Hodges, Jeff; Steinguebl, Andy (29 ottobre 2010).
- ^ "ForceHTTPS: Protecting High-Security Web Site from Network Attacks", su crypto.stanford.edu.
- ^ "Jeff Hodges's homepage", su kingsmountain.com.
- ^ "Collin Jackson's homepage", su collinjackson.com.
- ^ "Adam Barth's homepage", su adambarth.com.
- ^ "Strict Transport Security -05", su lists.w3.org, 18 settembre 2009.
- ^ "Strict Transport Security -06", su lists.w3.org, 18 dicembre 2009.
- ^ "[websec] Protocol Action: 'HTTP Strict Transport Security (HSTS)' to Proposed Standard (draft-ietf-websec-strict-transport-sec-14.txt)", su ietf.org, 2 ottobre 2012.
- ^ Jeff Hodges (30 giugno 2010).
- ^ "HTTP Strict Transport Security", su developer.mozilla.org.
- ^ Daniel Nations
- ^ a b Errore nelle note: Errore nell'uso del marcatore
<ref>
: non è stato indicato alcun testo per il marcatorehsts-no-user-recourse
- ^ a b Jeff Hodges, Collin Jackson e Adam Barth, 2.3. Threat Model, su RFC 6797, IETF, novembre 2012. URL consultato il 21 novembre 2012.
- ^ New Tricks For Defeating SSL In Practice (PDF).
- ^ Defeating SSL Using Sslstrip, in YouTube.
- ^ Adam Langley, Strict Transport Security, su The Chromium Projects, 8 luglio 2010. URL consultato il 22 luglio 2010.
- ^ a b David Keeler (1 novembre 2012).
- ^ Mike Bell e David Walp, HTTP Strict Transport Security comes to Internet Explorer, su blogs.msdn.com, 16 febbraio 2015. URL consultato il 16 febbraio 2015.
- ^ Jeff Hodges, Firesheep and HSTS (HTTP Strict Transport Security), su identitymeme.org, 31 ottobre 2010. URL consultato l'8 marzo 2011.
- ^ Jose Selvi, Bypassing HTTP Strict Transport Security (PDF), su blackhat.com, 17 ottobre 2014. URL consultato il 22 ottobre 2014.
- ^ The Chromium Developers, Strict Transport Security - The Chromium Projects, su dev.chromium.org, 17 novembre 2010. URL consultato il 17 novembre 2010.
- ^ Jeff Hodges (18 settembre 2009). "fyi: Strict Transport Security specification", su lists.w3.org.
- ^ "HTTP Strict Transport Security", su blog.mozilla.org.
- ^ Opera Software ASA, Web specifications support in Opera Presto 2.10, su opera.com, 23 aprile 2012. URL consultato l'8 maggio 2012 (archiviato dall'url originale il 4 maggio 2012).
- ^ @agl__ (Adam Langley).
- ^ HTTP Strict Transport Security comes to Internet Explorer 11 on Windows 8.1 and Windows 7, su windows.com. URL consultato il 12 giugno 2015.
- ^ Internet Explorer Web Platform Status and Roadmap, su status.modern.ie. URL consultato il 14 aprile 2014.
- ^ "Project Spartan and the Windows 10 January Preview Build - IEBlog", su blogs.msdn.com.
Voci correlate
Collegamenti esterni
- (EN) RFC, Internet Engineering Task Force.
- (EN) IETF WebSec Working Group, su tools.ietf.org.
- (EN) The State of HSTS Deployment: A Survey and Common Pitfalls provides an analysis of HSTS deployment statistics, patterns, mistakes, and best practices.
- (EN) Security Now 262: Strict Transport Security, su twit.tv.
- (EN) Open Web Application Security Project (OWASP): HSTS description
- (EN) Online browser HSTS and Public Key Pinning test, su projects.dm.id.lv.
- (EN) HSTS Preload Submission for Google Chrome, Mozilla Firefox, Safari, IE 11, and Edge