HTTPS no sempre és tan segur com sembla. Vulnerabilitats trobades en el 5,5% dels llocs HTTPS

HTTPS no sempre és tan segur com sembla. Vulnerabilitats trobades en el 5,5% dels llocs HTTPS
Un dels llocs principals d'Alexa (cercle central), assegurat per HTTPS, amb subdominis (gris) i dependències (blanc), entre els quals n'hi ha de vulnerables (ombrejat guionat)

Avui en dia, la icona de connexió segura HTTPS s'ha convertit en un estàndard i fins i tot un atribut necessari de qualsevol lloc seriós. Si certificat falta, gairebé tots els navegadors recents mostren un advertiment que la connexió al lloc "no és segura" i no recomanem transferir-hi informació confidencial.

Però resulta que la presència d'un "bloqueig" a la barra d'adreces no sempre garanteix la protecció. Comprovació de 10 llocs principals a partir de la qualificació, Alexa va demostrar que molts d'ells estan subjectes a vulnerabilitats crítiques en els protocols SSL / TLS, normalment a través de subdominis o dependències. Segons els autors de l'estudi, la complexitat de les aplicacions web modernes augmenta molt la superfície d'atac.

Resultats de l'estudi

L'estudi ha estat realitzat per experts de la Universitat de Venècia Ca' Foscari (Itàlia) i la Universitat Tècnica de Viena. Presentaran un informe detallat al 40è Simposi IEEE sobre seguretat i privadesa, que se celebrarà del 20 al 22 de maig de 2019 a San Francisco.

Es van provar els 10 principals llocs HTTPS de la llista d'Alexa i 000 amfitrions relacionats. Es van detectar configuracions criptogràfiques vulnerables en 90 hosts, és a dir, aproximadament el 816% del total:

  • 4818 vulnerable al MITM
  • 733 són vulnerables al desxifrat TLS complet
  • 912 són vulnerables al desxifrat TLS parcial

898 llocs estan completament oberts a la pirateria, és a dir, permeten la injecció d'scripts aliens, i 977 llocs carreguen contingut de pàgines mal protegides amb les quals un atacant pot interactuar.

Els investigadors subratllen que entre els 898 recursos "completament compromesos" hi ha botigues en línia, serveis financers i altres grans llocs. 660 de 898 llocs descarreguen scripts externs d'amfitrions vulnerables: aquesta és la principal font de perill. Segons els autors, la complexitat de les aplicacions web modernes augmenta molt la superfície d'atac.

També s'han trobat altres problemes: el 10% dels formularis d'autorització tenen problemes amb la transmissió segura d'informació, que amenaça amb filtrar contrasenyes, 412 llocs permeten la intercepció de galetes i segrest de sessions i 543 llocs estan subjectes a atacs a la integritat de les galetes (a través de subdominis). .

El problema és que en els últims anys en els protocols i programari SSL/TLS identificar una sèrie de vulnerabilitats: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) i Heartbleed (CVE-2014-0160). Per protegir-se d'ells, calen una sèrie de configuracions al servidor i al costat del client per evitar l'ús de versions vulnerables antigues. Però aquest és un procediment no trivial, perquè aquests paràmetres impliquen triar entre un ampli conjunt de xifratge i protocols, que són força difícils d'entendre. No sempre està clar quines suites i protocols de xifrat es consideren "prou segurs".

Configuració recomanada

No hi ha ningú aprovat i acordat oficialment una llista de configuracions HTTPS recomanades. Tan, Generador de configuració SSL de Mozilla ofereix diverses opcions de configuració, depenent del nivell de protecció requerit. Per exemple, aquí teniu la configuració recomanada per a un servidor nginx 1.14.0:

Mode modern

Clients compatibles més antics: Firefox 27, Chrome 30, IE 11 a 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 mitjà

Clients compatibles més antics: 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>;

....
}

Antic Suport

Clients compatibles més antics: 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>;

....
}

Es recomana que utilitzeu sempre la suite de xifratge completa i la darrera versió d'OpenSSL. El conjunt de xifratge a la configuració del servidor especifica la prioritat en què s'utilitzaran, en funció de la configuració del client.

La investigació demostra que no n'hi ha prou amb instal·lar un certificat HTTPS. "Tot i que no gestionem les galetes com ho vam fer el 2005, i el 'TLS decent' s'ha convertit en un lloc habitual, resulta que aquestes coses bàsiques no són suficients per assegurar un nombre sorprenentment gran de llocs molt populars". dir els autors de l'obra. Per protegir de manera fiable el canal entre el servidor i el client, heu de supervisar acuradament la infraestructura dels vostres propis subdominis i amfitrions de tercers des dels quals es lliura el contingut del lloc. Potser té sentit demanar una auditoria a alguna empresa de tercers especialitzada en seguretat de la informació.

HTTPS no sempre és tan segur com sembla. Vulnerabilitats trobades en el 5,5% dels llocs HTTPS

Font: www.habr.com