HTTPS är inte alltid så säkert som det verkar. Sårbarheter finns på 5,5 % av HTTPS-webbplatserna

HTTPS är inte alltid så säkert som det verkar. Sårbarheter finns på 5,5 % av HTTPS-webbplatserna
En av de bästa Alexa-sajterna (central cirkel), skyddad av HTTPS, med underdomäner (grå) och beroenden (vita), bland vilka det finns sårbara (skuggade)

Nuförtiden har HTTPS-ikonen för säker anslutning blivit ett standard- och till och med nödvändigt attribut för alla seriösa webbplatser. Om certifikat saknas, nästan alla senaste webbläsare visar en varning om att anslutningen till webbplatsen är "inte säker" och rekommenderar inte att du överför konfidentiell information till den.

Men det visar sig att närvaron av ett "lås" i adressfältet inte alltid garanterar skydd. Kontrollerar 10 000 ledande sajter från Alexa-rankingen visade: många av dem är utsatta för kritiska SSL/TLS-protokollsårbarheter, vanligtvis genom underdomäner eller beroenden. Enligt studiens författare ökar komplexiteten hos moderna webbapplikationer attackytan kraftigt.

Forskningsresultat

Studien utfördes av specialister från Ca' Foscari-universitetet i Venedig (Italien) och Wiens tekniska universitet. De kommer att presentera en detaljerad rapport vid det 40:e IEEE Symposium on Security and Privacy, som kommer att hållas 20−22 maj 2019 i San Francisco.

De 10 000 bästa HTTPS-sajterna på Alexas lista och 90 816 associerade värdar kontrollerades. Sårbara kryptografiska konfigurationer identifierades på 5574 värdar, det vill säga ungefär 5,5 % av det totala:

  • 4818 sårbar för MITM
  • 733 sårbar för full TLS-dekryptering
  • 912 sårbar för partiell TLS-dekryptering

898 webbplatser är helt öppna för hackning, det vill säga de tillåter injektion av tredjepartsskript, och 977 webbplatser laddar ner innehåll från svagt skyddade sidor som en angripare kan interagera med.

Forskare betonar att bland de 898 "helt komprometterade" resurserna finns onlinebutiker, finansiella tjänster och andra stora sajter. 660 av 898 sajter laddar ner externa skript från sårbara värdar: detta är den främsta källan till fara. Enligt författarna ökar komplexiteten hos moderna webbapplikationer attackytan kraftigt.

Andra problem upptäcktes också: 10 % av auktoriseringsformulären har problem med säker överföring av information, vilket hotar lösenordsläckage, 412 webbplatser tillåter avlyssning av cookies och "sessionskapning" och 543 webbplatser är mottagliga för attacker på cookieintegritet (via underdomäner) ).

Problemet är att de senaste åren har SSL/TLS-protokoll och mjukvara ett antal sårbarheter har identifierats: PUDLE (CVE-2014-3566), BEAST (CVE-2011-3389), BROTT (CVE-2012-4929), BREACH (CVE-2013-3587) och Heartbleed (CVE-2014-0160). För att skydda mot dem krävs ett antal inställningar på server- och klientsidan för att undvika användning av gamla sårbara versioner. Men detta är en ganska icke-trivial procedur, eftersom sådana inställningar innebär att man väljer från en omfattande uppsättning chiffer och protokoll, som är ganska svåra att förstå. Det är inte alltid klart vilka chiffersviter och protokoll som anses vara "tillräckligt säkra".

Rekommenderade inställningar

Det finns ingen officiellt godkänd och överenskommen lista över rekommenderade HTTPS-inställningar. Så, Mozilla SSL Configuration Generator erbjuder flera konfigurationsalternativ, beroende på vilken skyddsnivå som krävs. Till exempel, här är de rekommenderade inställningarna för nginx 1.14.0-servern:

Modernt läge

Äldsta klienter som stöds: Firefox 27, Chrome 30, IE 11 på Windows 7, Edge, Opera 17, Safari 9, Android 5.0 och 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>;

....
}

Genomsnittligt stöd

Äldsta klienter som stöds: 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>;

....
}

Gammalt stöd

Äldsta klienter som stöds: 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 rekommenderas att alltid använda hela chiffersviten och den senaste versionen av OpenSSL. Uppsättningen av chiffer i serverinställningarna anger i vilken prioritet de kommer att användas, beroende på klientinställningarna.

Forskning visar att det inte räcker att bara installera ett HTTPS-certifikat. "Även om vi inte hanterar cookies som vi gjorde 2005, och "anständig TLS" har blivit vanligt, visar det sig att dessa grundläggande saker inte räcker för att säkra ett förvånansvärt stort antal mycket populära webbplatser," de säger författare till verket. För att på ett tillförlitligt sätt skydda kanalen mellan servern och klienten måste du noggrant övervaka infrastrukturen för dina egna underdomäner och tredjepartsvärdar från vilka innehållet för webbplatsen levereras. Det kan vara vettigt att beställa en revision från något tredjepartsföretag som är specialiserat på informationssäkerhet.

HTTPS är inte alltid så säkert som det verkar. Sårbarheter finns på 5,5 % av HTTPS-webbplatserna

Källa: will.com