
Uno dei siti top di Alexa (cerchio centrale), protetto da HTTPS, con sottodomini (grigio) e dipendenze (bianco), tra cui ci sono vulnerabili (riempimento a righe)
Al giorno d'oggi, l'icona della connessione sicura HTTPS è diventata un attributo standard e quasi necessario di qualsiasi sito serio. Se è assente, quasi tutti i browser moderni mostrano un avviso che e sconsigliano di inviare informazioni riservate.
Ma risulta che avere il “lucchetto” nella barra degli indirizzi non garantisce sempre protezione. dalla classifica di Alexa ha mostrato: molti di essi sono soggetti a vulnerabilità critiche dei protocolli SSL/TLS, solitamente tramite sottodomini o dipendenze. Secondo gli autori dello studio, la complessità delle moderne applicazioni web aumenta esponenzialmente la superficie d'attacco.
Risultati dello studio
Lo studio è stato condotto da esperti dell'Università Ca' Foscari di Venezia (Italia) e dell'Università Tecnica di Vienna. Presenteranno un rapporto dettagliato al 40° simposio IEEE sulla sicurezza e privacy, che si terrà dal 20 al 22 maggio 2019 a San Francisco.
Sono stati verificati 10.000 dei siti HTTPS più popolari della lista Alexa e 90.816 host correlati. Configurazioni crittografiche vulnerabili sono state riscontrate su 5.574 host, cioè circa il 5,5% del totale:
- 4.818 vulnerabili ai MITM
- 733 vulnerabili a una completa decrittazione TLS
- 912 vulnerabili a una parziale decrittazione TLS
898 siti sono completamente aperti agli attacchi, cioè consentono l'inserimento di script esterni, e 977 siti caricano contenuti da pagine poco sicure, con cui un malintenzionato può interagire.
I ricercatori sottolineano che tra le 898 risorse “completamente compromesse” ci sono negozi online, servizi finanziari e altri grandi siti. 660 dei 898 siti caricano script esterni da host vulnerabili: questa è la principale fonte di pericolo. Secondo gli autori, la complessità delle moderne applicazioni web aumenta esponenzialmente la superficie d'attacco.
Sono emersi anche altri problemi: il 10% dei moduli di autorizzazione presenta problemi con la trasmissione sicura delle informazioni, il che comporta il rischio di fuoriuscita delle password, 412 siti consentono l'intercettazione dei cookie e il "furto di sessione", e 543 siti sono vulnerabili ad attacchi all'integrità dei cookie (tramite sottodomini).
Il problema è che negli ultimi anni nei protocolli SSL/TLS e nel software : POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) e Heartbleed (CVE-2014-0160). Per proteggersi da esse sono necessarie alcune impostazioni sul lato server e client, per evitare di utilizzare versioni vulnerabili obsolete. Ma si tratta di una procedura non triviale, poiché tali impostazioni prevedono la scelta tra un ampio set di algoritmi e protocolli, nei quali è piuttosto difficile orientarsi. Non è sempre chiaro quali set di algoritmi e protocolli considerare "sufficientemente sicuri".
Impostazioni raccomandate
Non esiste un elenco ufficialmente approvato e concordato di impostazioni HTTPS raccomandate. Così, offre diverse opzioni di configurazione, a seconda del livello di protezione richiesto. Ad esempio, ecco le impostazioni raccomandate per il server nginx 1.14.0:
Modalità moderna
I clienti più vecchi supportati: Firefox 27, Chrome 30, IE 11 su Windows 7, Edge, Opera 17, Safari 9, Android 5.0 e Java 8
server {
listen 80 default_server;
listen [::]:80 default_server;
# Reindirizza tutte le richieste HTTP a HTTPS con una risposta 301 Moved Permanently.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certificati inviati al client in SERVER HELLO sono concatenati in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# configurazione moderna. personalizza in base alle tue esigenze.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module è richiesto) (15768000 secondi = 6 mesi)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# recupera i record OCSP dall'URL in ssl_certificate e memorizzali nella cache
ssl_stapling on;
ssl_stapling_verify on;
## verifica la catena di fiducia della risposta OCSP utilizzando Root CA e certificati intermedi
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver ;
....
}Supporto medio
I clienti più vecchi supportati: Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7
server {
listen 80 default_server;
listen [::]:80 default_server;
# Reindirizza tutte le richieste HTTP a HTTPS con una risposta 301 Moved Permanently.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# I certificati inviati al client in SERVER HELLO sono concatenati in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Parametro Diffie-Hellman per suite di cifratura DHE, raccomandato 2048 bit
ssl_dhparam /path/to/dhparam.pem;
# configurazione intermedia. adattala alle tue esigenze.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module è richiesto) (15768000 secondi = 6 mesi)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# ottieni i record OCSP dall'URL in ssl_certificate e memorizzali nella cache
ssl_stapling on;
ssl_stapling_verify on;
## verifica la catena di fiducia della risposta OCSP utilizzando i certificati Root CA e Intermediate
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver ;
....
}Supporto obsoleto
I clienti più vecchi supportati: Windows XP IE6, Java 6
server {
listen 80 default_server;
listen [::]:80 default_server;
# Reindirizza tutte le richieste HTTP a HTTPS con una risposta 301 Moved Permanently.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# I certificati inviati al client in SERVER HELLO sono concatenati in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Parametro Diffie-Hellman per suite di cifratura DHE, raccomandato 2048 bit
ssl_dhparam /path/to/dhparam.pem;
# vecchia configurazione. adattala alle tue esigenze.
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module è richiesto) (15768000 secondi = 6 mesi)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# ottieni i record OCSP dall'URL in ssl_certificate e memorizzali nella cache
ssl_stapling on;
ssl_stapling_verify on;
## verifica la catena di fiducia della risposta OCSP utilizzando i certificati Root CA e Intermediate
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver ;
....
}Si consiglia di utilizzare sempre un set completo di algoritmi di crittografia e l'ultima versione di OpenSSL. Il set di algoritmi nelle impostazioni del server indica la priorità con cui verranno utilizzati, a seconda delle impostazioni del client.
La ricerca dimostra che non è sufficiente installare semplicemente un certificato HTTPS. «Sebbene non gestiamo i cookie come nel 2005, e il autori del lavoro. Per una protezione affidabile del canale tra server e client, è necessario monitorare attentamente l'infrastruttura dei propri sottodomini e degli host esterni da cui viene fornito il contenuto per il sito. Potrebbe avere senso richiedere un audit a qualche azienda esterna specializzata in sicurezza informatica.
Fonte: habr.com
