HTTPS is net altyd sa feilich as it liket. Kwetsberheden fûn yn 5,5% fan HTTPS-siden

HTTPS is net altyd sa feilich as it liket. Kwetsberheden fûn yn 5,5% fan HTTPS-siden
Ien fan 'e topsiden fan Alexa (sintrale sirkel), befeilige troch HTTPS, mei subdomeinen (griis) en ôfhinklikens (wyt), wêrfan d'r kwetsbere binne (stiple skaad)

Tsjintwurdich is it ikoan foar befeilige ferbining HTTPS in standert wurden wurden en sels in needsaaklike attribút fan elke serieuze side. As it sertifikaat missing, hast alle resinte browsers litte in warskôging dat ferbining mei de side is "net feilich" en riede net oan om fertroulike ynformaasje nei it oer te bringen.

Mar it docht bliken dat de oanwêzigens fan in "slot" yn 'e adresbalke net altyd garandearret beskerming. Kontrolearje 10 liedende siden út 'e beoardieling liet Alexa sjen dat in protte fan harren ûnderwurpen binne oan krityske kwetsberens yn' e SSL / TLS-protokollen, meastentiids fia subdomeinen as ôfhinklikens. Neffens de auteurs fan 'e stúdzje fergruttet de kompleksiteit fan moderne webapplikaasjes it oanfalflak sterk.

Undersyksresultaten

De stúdzje waard útfierd troch saakkundigen fan 'e Universiteit fan Feneesje Ca' Foscari (Itaalje) en de Technyske Universiteit fan Wenen. Se sille in detaillearre rapport presintearje op it 40e IEEE Sympoasium oer Feiligens en Privacy, dat sil hâlden wurde 20-22 maaie 2019 yn San Francisco.

De top 10 Alexa list HTTPS-siden en 000 relatearre hosts waarden hifke. Kwetsbere kryptografyske konfiguraasjes waarden ûntdutsen op 90 hosts, dat is sawat 816% fan it totaal:

  • 4818 kwetsber foar MITM
  • 733 binne kwetsber foar folsleine TLS-ûntsifering
  • 912 binne kwetsber foar in part TLS-ûntsifering

898 siden binne folslein iepen foar hacking, dat is, se tastean de ynjeksje fan skripts fan tredden, en 977 siden laden ynhâld fan min beskerme siden wêrmei in oanfaller kin ynteraksje.

De ûndersikers beklamje dat ûnder de 898 "folslein kompromittearre" boarnen online winkels, finansjele tsjinsten en oare grutte siden binne. 660 fan 898 siden downloade eksterne skripts fan kwetsbere hosts: dit is de wichtichste boarne fan gefaar. Neffens de auteurs fergruttet de kompleksiteit fan moderne webapplikaasjes it oanfalsflak sterk.

Oare problemen waarden ek fûn: 10% fan autorisaasjeformulieren hawwe problemen mei de feilige oerdracht fan ynformaasje, dy't driget wachtwurden te lekken, 412 siden tastean it ûnderskeppen fan cookies en sesjekaping, en 543 siden binne ûnderwurpen oan oanfallen op cookie-yntegriteit (fia subdomeinen) .

It probleem is dat yn 'e ôfrûne jierren yn' e SSL / TLS-protokollen en software identifisearre in oantal kwetsberens: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587), en Heartbleed (CVE-2014-0160). Om har tsjin te beskermjen, binne in oantal ynstellings nedich op 'e server- en kliïntside om foar te kommen dat âlde kwetsbere ferzjes brûkt wurde. Mar dit is in nochal net-triviale proseduere, om't sokke ynstellingen omfetsje it kiezen út in wiidweidige set fan sifers en protokollen, dy't frijwat lestich te begripen binne. It is net altyd dúdlik hokker cipher suites en protokollen wurde beskôge as "feilich genôch".

Oanbefelle ynstellings

D'r is gjinien offisjeel goedkard en oerienkommen list mei oanrikkemandearre HTTPS-ynstellingen. Sa, Mozilla SSL Konfiguraasje Generator biedt ferskate konfiguraasje opsjes, ôfhinklik fan it fereaske nivo fan beskerming. Hjir binne bygelyks de oanrikkemandearre ynstellingen foar in nginx 1.14.0-tsjinner:

Moderne modus

Aldste stipe kliïnten: Firefox 27, Chrome 30, IE 11 op Windows 7, Edge, Opera 17, Safari 9, Android 5.0, en 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>;

....
}

Medium Support

Aldste stipe kliïnten: 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>;

....
}

Alde Stipe

Aldste stipe kliïnten: 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>;

....
}

It wurdt oanrikkemandearre dat jo altyd de folsleine fersifersuite en de lêste ferzje fan OpenSSL brûke. De sifersuite yn 'e serverynstellingen spesifisearret de prioriteit wêryn't se sille wurde brûkt, ôfhinklik fan de kliïntynstellingen.

Undersyk lit sjen dat it net genôch is om gewoan in HTTPS-sertifikaat te ynstallearjen. "Hoewol't wy net omgean mei cookies lykas yn 2005, en 'fatsoenlike TLS' is gewoan wurden, docht bliken dat dizze basis dingen net genôch binne om in ferrassend grut oantal tige populêre siden te befeiligjen," sizze de skriuwers fan it wurk. Om it kanaal betrouber te beskermjen tusken de tsjinner en de kliïnt, moatte jo de ynfrastruktuer soarchfâldich kontrolearje fan jo eigen subdomeinen en hosts fan tredden wêrfan ynhâld foar de side wurdt levere. Miskien is it logysk om in kontrôle te bestellen fan in bedriuw fan tredden dat spesjalisearre is yn ynformaasjefeiligens.

HTTPS is net altyd sa feilich as it liket. Kwetsberheden fûn yn 5,5% fan HTTPS-siden

Boarne: www.habr.com