HTTPS nu este întotdeauna atât de sigur pe cât pare. Vulnerabilități găsite în 5,5% dintre site-urile HTTPS

HTTPS nu este întotdeauna atât de sigur pe cât pare. Vulnerabilități găsite în 5,5% dintre site-urile HTTPS
Unul dintre site-urile Alexa de top (cerc central), protejat prin HTTPS, cu subdomenii (gri) și dependențe (alb), printre care se numără și cele vulnerabile (umbrite)

În zilele noastre, pictograma de conexiune securizată HTTPS a devenit un atribut standard și chiar necesar al oricărui site web serios. Dacă certificat lipsesc, aproape toate browserele recente afișează un avertisment că conexiunea la site este „nu este sigură” și nu recomandă transmiterea informațiilor confidențiale către acesta.

Dar se dovedește că prezența unui „blocare” în bara de adrese nu garantează întotdeauna protecție. Verificarea a 10 de site-uri de top din clasamentul Alexa a arătat: multe dintre ele sunt expuse la vulnerabilități critice ale protocolului SSL/TLS, de obicei prin subdomenii sau dependențe. Potrivit autorilor studiului, complexitatea aplicațiilor web moderne mărește foarte mult suprafața de atac.

Rezultatele studiului

Studiul a fost realizat de specialiști de la Universitatea Ca' Foscari din Veneția (Italia) și de la Universitatea Tehnică din Viena. Ei vor prezenta un raport detaliat la cel de-al 40-lea Simpozion IEEE privind securitatea și confidențialitatea, care va avea loc în perioada 20-22 mai 2019 la San Francisco.

Au fost verificate primele 10 de site-uri HTTPS de pe lista Alexa și 000 gazde asociate. Configurațiile criptografice vulnerabile au fost identificate pe 90 de gazde, adică aproximativ 816% din total:

  • 4818 vulnerabil la MITM
  • 733 vulnerabil la decriptarea TLS completă
  • 912 vulnerabil la decriptarea TLS parțială

898 de site-uri sunt complet deschise hacking-ului, adică permit injectarea de scripturi de la terți, iar 977 de site-uri descarcă conținut din pagini slab protejate cu care un atacator poate interacționa.

Cercetătorii subliniază că printre cele 898 de resurse „complet compromise” se numără magazinele online, serviciile financiare și alte site-uri mari. 660 din 898 de site-uri descarcă scripturi externe de la gazde vulnerabile: aceasta este principala sursă de pericol. Potrivit autorilor, complexitatea aplicațiilor web moderne mărește foarte mult suprafața de atac.

Au fost descoperite și alte probleme: 10% dintre formularele de autorizare au probleme cu transmiterea securizată a informațiilor, care amenință scurgerea parolelor, 412 site-uri permit interceptarea cookie-urilor și „deturnarea sesiunii”, iar 543 de site-uri sunt susceptibile la atacuri asupra integrității cookie-urilor (prin subdomenii). ).

Problema este că, în ultimii ani, protocoalele și software-ul SSL/TLS au fost identificate o serie de vulnerabilități: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) și Heartbleed (CVE-2014-0160). Pentru a vă proteja împotriva lor, sunt necesare o serie de setări pe partea serverului și a clientului pentru a evita utilizarea versiunilor vulnerabile vechi. Dar aceasta este o procedură destul de netrivială, deoarece astfel de setări implică alegerea dintr-un set extins de cifruri și protocoale, care sunt destul de greu de înțeles. Nu este întotdeauna clar care suite și protocoale de criptare sunt considerate „suficient de sigure”.

Setări recomandate

Nu există o listă de setări HTTPS recomandate, aprobată și agreată oficial. Asa de, Mozilla SSL Configuration Generator oferă mai multe opțiuni de configurare, în funcție de nivelul de protecție necesar. De exemplu, iată setările recomandate pentru serverul nginx 1.14.0:

Modul modern

Cei mai vechi clienți acceptați: Firefox 27, Chrome 30, IE 11 pe Windows 7, Edge, Opera 17, Safari 9, Android 5.0 și Java 8

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated 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;


# modern configuration. tweak to your needs.
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 is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Suport mediu

Cei mai vechi clienți acceptați: 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;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated 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;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# intermediate configuration. tweak to your needs.
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 is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Sprijin vechi

Cei mai vechi clienți acceptați: Windows XP IE6, Java 6

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated 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;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# old configuration. tweak to your needs.
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 is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Se recomandă să utilizați întotdeauna suita de criptare completă și cea mai recentă versiune a OpenSSL. Setul de cifruri din setările serverului indică prioritatea în care vor fi utilizate, în funcție de setările clientului.

Cercetările arată că simpla instalare a unui certificat HTTPS nu este suficientă. „Deși nu gestionăm cookie-urile așa cum am făcut-o în 2005, iar „TLS decent” a devenit obișnuit, se pare că aceste lucruri de bază nu sunt suficiente pentru a securiza un număr surprinzător de mare de site-uri foarte populare.” Spune autorii operei. Pentru a proteja în mod fiabil canalul dintre server și client, trebuie să monitorizați cu atenție infrastructura propriilor subdomenii și a gazdelor terțe de la care este furnizat conținutul site-ului. Ar putea avea sens să comandați un audit de la o companie terță care este specializată în securitatea informațiilor.

HTTPS nu este întotdeauna atât de sigur pe cât pare. Vulnerabilități găsite în 5,5% dintre site-urile HTTPS

Sursa: www.habr.com