HTTPS ni vedno tako varen, kot se zdi. Ranljivosti so bile najdene na 5,5 % spletnih mest HTTPS

HTTPS ni vedno tako varen, kot se zdi. Ranljivosti so bile najdene na 5,5 % spletnih mest HTTPS
Eno najboljših spletnih mest Alexa (osrednji krog), zavarovano s HTTPS, s poddomenami (sivo) in odvisnostmi (belo), med katerimi so ranljive (črtkano senčenje)

Dandanes je ikona varne povezave HTTPS postala standard in celo nujen atribut vsakega resnega mesta. če Potrdilo manjka, skoraj vsi novejši brskalniki prikazujejo opozorilo, da povezava s spletnim mestom "ni varna" in ne priporočamo prenosa zaupnih informacij nanj.

Vendar se izkaže, da prisotnost "ključavnice" v naslovni vrstici ne zagotavlja vedno zaščite. Preverjanje 10 vodilnih spletnih mest iz ocene je Alexa pokazala, da so mnogi od njih podvrženi kritičnim ranljivostim v protokolih SSL/TLS, običajno prek poddomen ali odvisnosti. Po mnenju avtorjev študije kompleksnost sodobnih spletnih aplikacij močno poveča površino napada.

Rezultati raziskav

Študijo so izvedli strokovnjaki z univerze v Benetkah Ca' Foscari (Italija) in dunajske tehnične univerze. Podrobno poročilo bodo predstavili na 40. simpoziju IEEE o varnosti in zasebnosti, ki bo potekal od 20. do 22. maja 2019 v San Franciscu.

Preizkušenih je bilo 10 najboljših spletnih mest HTTPS s seznama Alexa in 000 povezanih gostiteljev. Ranljive kriptografske konfiguracije so bile odkrite na 90 gostiteljih, kar je približno 816 % vseh:

  • 4818 ranljiv za MITM
  • 733 so ranljivi za popolno dešifriranje TLS
  • 912 so ranljivi za delno dešifriranje TLS

898 spletnih mest je popolnoma odprtih za vdore, kar pomeni, da omogočajo vbrizgavanje tujih skriptov, 977 spletnih mest pa nalaga vsebino s slabo zaščitenih strani, s katerimi lahko napadalec komunicira.

Raziskovalci poudarjajo, da so med 898 "popolnoma ogroženimi" viri spletne trgovine, finančne storitve in druga velika spletna mesta. 660 od 898 spletnih mest prenaša zunanje skripte z ranljivih gostiteljev: to je glavni vir nevarnosti. Po mnenju avtorjev kompleksnost sodobnih spletnih aplikacij močno poveča površino napada.

Ugotovljene so bile tudi druge težave: 10 % avtorizacijskih obrazcev ima težave z varnim prenosom informacij, kar grozi z uhajanjem gesel, 412 spletnih mest omogoča prestrezanje piškotkov in ugrabitev sej, 543 spletnih mest pa je izpostavljenih napadom na celovitost piškotkov (prek poddomen). .

Težava je v tem, da so v zadnjih letih v protokolih in programski opremi SSL / TLS odkrili številne ranljivosti: PUDELJ (CVE-2014-3566), ZVER (CVE-2011-3389), ZLOČIN (CVE-2012-4929), KRŠITEV (CVE-2013-3587) in Heartbleed (CVE-2014-0160). Za zaščito pred njimi so potrebne številne nastavitve na strani strežnika in odjemalca, da se izognete uporabi starih ranljivih različic. Toda to je precej netrivialen postopek, saj takšne nastavitve vključujejo izbiro iz obsežnega nabora šifer in protokolov, ki jih je precej težko razumeti. Ni vedno jasno, kateri paketi šifer in protokoli veljajo za "dovolj varne".

Priporočene nastavitve

Nobenega uradno potrjenega in dogovorjenega seznama priporočenih nastavitev HTTPS ni. Torej, Mozilla SSL konfiguracijski generator ponuja več možnosti konfiguracije, odvisno od zahtevane stopnje zaščite. Tukaj so na primer priporočene nastavitve za strežnik nginx 1.14.0:

Sodoben način

Najstarejši podprti odjemalci: Firefox 27, Chrome 30, IE 11 v sistemih Windows 7, Edge, Opera 17, Safari 9, Android 5.0 in 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>;

....
}

Srednja podpora

Najstarejši podprti odjemalci: 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>;

....
}

Stara podpora

Najstarejši podprti odjemalci: 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>;

....
}

Priporočljivo je, da vedno uporabljate celotno zbirko šifrantov in najnovejšo različico OpenSSL. Zbirka šifer v nastavitvah strežnika določa prioriteto, v kateri bodo uporabljeni, odvisno od nastavitev odjemalca.

Raziskave kažejo, da ni dovolj samo namestiti potrdilo HTTPS. "Čeprav ne obdelujemo piškotkov tako kot leta 2005 in je "dostojen TLS" postal nekaj običajnega, se je izkazalo, da te osnovne stvari niso dovolj za zaščito presenetljivo velikega števila zelo priljubljenih spletnih mest," pravijo avtorji dela. Za zanesljivo zaščito kanala med strežnikom in odjemalcem morate skrbno spremljati infrastrukturo iz lastnih poddomen in gostiteljev tretjih oseb, iz katerih se dobavlja vsebina za spletno mesto. Morda je smiselno naročiti revizijo pri kakšnem tretjem podjetju, ki je specializirano za informacijsko varnost.

HTTPS ni vedno tako varen, kot se zdi. Ranljivosti so bile najdene na 5,5 % spletnih mest HTTPS

Vir: www.habr.com