HTTPS er ikke alltid så sikkert som det ser ut til. Sårbarheter funnet i 5,5 % av HTTPS-nettsteder

HTTPS er ikke alltid så sikkert som det ser ut til. Sårbarheter funnet i 5,5 % av HTTPS-nettsteder
En av Alexas toppsider (sentral sirkel), sikret av HTTPS, med underdomener (grå) og avhengigheter (hvit), blant dem er det sårbare (stiplet skyggelegging)

I dag har HTTPS-ikonet for sikker tilkobling blitt en standard og til og med en nødvendig egenskap for et seriøst nettsted. Hvis sertifikat mangler, nesten alle nyere nettlesere viser en advarsel om at tilkoblingen til nettstedet er "ikke sikker" og anbefaler ikke å overføre konfidensiell informasjon til den.

Men det viser seg at tilstedeværelsen av en "lås" i adressefeltet ikke alltid garanterer beskyttelse. Sjekker 10 000 ledende nettsteder fra vurderingen viste Alexa at mange av dem er utsatt for kritiske sårbarheter i SSL / TLS-protokollene, vanligvis gjennom underdomener eller avhengigheter. I følge forfatterne av studien øker kompleksiteten til moderne webapplikasjoner angrepsoverflaten betraktelig.

Forskningsresultater

Studien ble utført av eksperter fra universitetet i Venezia Ca' Foscari (Italia) og Wiens tekniske universitet. De vil presentere en detaljert rapport på det 40. IEEE Symposium on Security and Privacy, som vil bli avholdt 20.-22. mai 2019 i San Francisco.

Topp 10 000 HTTPS-nettsteder på Alexa-listen og 90 816 relaterte verter ble testet. Sårbare kryptografiske konfigurasjoner ble oppdaget på 5574 verter, det vil si omtrent 5,5 % av totalen:

  • 4818 sårbar for MITM
  • 733 er sårbare for full TLS-dekryptering
  • 912 er sårbare for delvis TLS-dekryptering

898 nettsteder er helt åpne for hacking, det vil si at de tillater injeksjon av fremmede skript, og 977 nettsteder laster inn innhold fra dårlig beskyttede sider som en angriper kan samhandle med.

Forskerne understreker at blant de 898 «fullstendig kompromitterte» ressursene er nettbutikker, finansielle tjenester og andre store nettsteder. 660 av 898 nettsteder laster ned eksterne skript fra sårbare verter: dette er hovedkilden til fare. I følge forfatterne øker kompleksiteten til moderne webapplikasjoner angrepsoverflaten betraktelig.

Andre problemer ble også funnet: 10 % av autorisasjonsskjemaene har problemer med sikker overføring av informasjon, som truer med å lekke passord, 412 nettsteder tillater avskjæring av informasjonskapsler og øktkapring, og 543 nettsteder er utsatt for angrep på informasjonskapselintegritet (gjennom underdomener) .

Problemet er at de siste årene i SSL / TLS protokoller og programvare identifisert en rekke sårbarheter: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) og Heartbleed (CVE-2014-0160). For å beskytte mot dem kreves det en rekke innstillinger på server- og klientsiden for å unngå bruk av gamle sårbare versjoner. Men dette er en ganske ikke-triviell prosedyre, fordi slike innstillinger innebærer å velge fra et omfattende sett med chiffer og protokoller, som er ganske vanskelige å forstå. Det er ikke alltid klart hvilke chiffersuiter og protokoller som anses som "sikre nok".

Anbefalte innstillinger

Det er ingen offisielt godkjent og godkjent liste over anbefalte HTTPS-innstillinger. Så, Mozilla SSL -konfigurasjonsgenerator tilbyr flere konfigurasjonsalternativer, avhengig av det nødvendige beskyttelsesnivået. For eksempel, her er de anbefalte innstillingene for en nginx 1.14.0-server:

Moderne modus

Eldste støttede klienter: Firefox 27, Chrome 30, IE 11 på Windows 7, Edge, Opera 17, Safari 9, Android 5.0 og 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>;

....
}

Middels støtte

Eldste støttede klienter: 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>;

....
}

Gammel støtte

Eldste støttede klienter: 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>;

....
}

Det anbefales at du alltid bruker hele chifferpakken og den nyeste versjonen av OpenSSL. Chifferpakken i serverinnstillingene spesifiserer prioriteten de skal brukes i, avhengig av klientinnstillingene.

Forskning viser at det ikke er nok å bare installere et HTTPS-sertifikat. "Selv om vi ikke håndterer informasjonskapsler som vi gjorde i 2005, og "anstendig TLS" har blitt vanlig, viser det seg at disse grunnleggende tingene ikke er nok til å sikre et overraskende stort antall veldig populære nettsteder." si forfatterne av verket. For pålitelig å beskytte kanalen mellom serveren og klienten, må du nøye overvåke infrastrukturen fra dine egne underdomener og tredjepartsverter som innholdet til nettstedet leveres fra. Kanskje det er fornuftig å bestille en revisjon fra et tredjepartsselskap som spesialiserer seg på informasjonssikkerhet.

HTTPS er ikke alltid så sikkert som det ser ut til. Sårbarheter funnet i 5,5 % av HTTPS-nettsteder

Kilde: www.habr.com