HTTPS er ikke altid så sikkert, som det ser ud til. Sårbarheder fundet i 5,5 % af HTTPS-websteder

HTTPS er ikke altid så sikkert, som det ser ud til. Sårbarheder fundet i 5,5 % af HTTPS-websteder
Et af Alexas topsider (central cirkel), sikret af HTTPS, med underdomæner (grå) og afhængigheder (hvid), blandt hvilke der er sårbare (stiplet skygge)

I dag er HTTPS sikker forbindelsesikonet blevet en standard og endda en nødvendig egenskab for ethvert seriøst websted. Hvis certifikat mangler, viser næsten alle nyere browsere en advarsel om, at forbindelsen til siden er "ikke sikker" og anbefaler ikke at overføre fortrolige oplysninger til den.

Men det viser sig, at tilstedeværelsen af ​​en "lås" i adresselinjen ikke altid garanterer beskyttelse. Tjek 10 førende websteder fra vurderingen viste Alexa, at mange af dem er underlagt kritiske sårbarheder i SSL/TLS-protokollerne, normalt gennem underdomæner eller afhængigheder. Ifølge forfatterne af undersøgelsen øger kompleksiteten af ​​moderne webapplikationer angrebsoverfladen i høj grad.

Forskningsresultater

Undersøgelsen blev udført af eksperter fra universitetet i Venedig Ca' Foscari (Italien) og Wiens tekniske universitet. De vil præsentere en detaljeret rapport på det 40. IEEE Symposium on Security and Privacy, som afholdes 20.-22. maj 2019 i San Francisco.

Top 10 Alexa liste HTTPS-websteder og 000 relaterede værter blev testet. Sårbare kryptografiske konfigurationer blev opdaget på 90 værter, det vil sige cirka 816 % af det samlede antal:

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

898 websteder er fuldstændig åbne for hacking, det vil sige, at de tillader indsprøjtning af uvedkommende scripts, og 977 websteder indlæser indhold fra dårligt beskyttede sider, som en angriber kan interagere med.

Forskerne understreger, at blandt de 898 "fuldstændig kompromitterede" ressourcer er onlinebutikker, finansielle tjenester og andre store sider. 660 ud af 898 websteder downloader eksterne scripts fra sårbare værter: dette er hovedkilden til fare. Ifølge forfatterne øger kompleksiteten af ​​moderne webapplikationer angrebsoverfladen i høj grad.

Andre problemer blev også fundet: 10 % af autorisationsformularerne har problemer med sikker transmission af information, som truer med at lække adgangskoder, 412 websteder tillader opsnapning af cookies og sessionskapring, og 543 websteder er genstand for angreb på cookie-integritet (gennem underdomæner) .

Problemet er, at i de seneste år i SSL / TLS protokoller og software identificeret en række sårbarheder: PUDLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) og Heartbleed (CVE-2014-0160). For at beskytte mod dem kræves der en række indstillinger på server- og klientsiden for at undgå at bruge gamle sårbare versioner. Men dette er en temmelig ikke-triviel procedure, fordi sådanne indstillinger involverer at vælge fra et omfattende sæt ciphers og protokoller, som er ret svære at forstå. Det er ikke altid klart, hvilke krypteringspakker og protokoller, der anses for at være "sikre nok".

Anbefalede indstillinger

Der er ingen officielt godkendt og aftalt liste over anbefalede HTTPS-indstillinger. Så, Mozilla SSL Configuration Generator tilbyder flere konfigurationsmuligheder, afhængigt af det nødvendige beskyttelsesniveau. For eksempel, her er de anbefalede indstillinger for en nginx 1.14.0-server:

Moderne tilstand

Ældste understø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>;

....
}

Middel støtte

Ældste understø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

Ældste understø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 altid bruger hele krypteringspakken og den seneste version af OpenSSL. Chifferpakken i serverindstillingerne angiver den prioritet, som de vil blive brugt i, afhængigt af klientindstillingerne.

Forskning viser, at det ikke er nok kun at installere et HTTPS-certifikat. "Selvom vi ikke håndterer cookies, som vi gjorde i 2005, og 'anstændigt TLS' er blevet almindeligt, viser det sig, at disse grundlæggende ting ikke er nok til at sikre et overraskende stort antal meget populære websteder." de siger værkets forfattere. For pålideligt at beskytte kanalen mellem serveren og klienten skal du nøje overvåge infrastrukturen fra dine egne underdomæner og tredjepartsværter, hvorfra indholdet til webstedet leveres. Måske giver det mening at bestille en revision fra en tredjepartsvirksomhed, der har specialiseret sig i informationssikkerhed.

HTTPS er ikke altid så sikkert, som det ser ud til. Sårbarheder fundet i 5,5 % af HTTPS-websteder

Kilde: www.habr.com