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

HTTPS ni vedno tako varen, kot se zdi. Ranljivosti so bile odkrite pri 5,5 % HTTPS spletnih mest
Eden iz najboljših spletnih strani na Alexi (osrednji krog), zaščiten z HTTPS, z poddomenami (sivo) in odvisnostmi (belo), med katerimi so tudi ranljive (črtkasta polnila)

V današnjem času je ikona zaščitene povezave HTTPS postala standardna in celo potrebna značilnost vsake resne spletne strani. Če potrdilo manjka, skoraj vsi najnovejši brskalniki prikažejo opozorilo, da povezava na spletno stran 'ni zaščitena' in ne priporočajo pošiljanja zaupnih informacij nanjo.

Toda izkaže se, da prisotnost 'ključavnice' v naslovni vrstici ne zagotavlja vedno zaščite. Preverjanje 10.000 najboljših spletnih strani iz razporeda Alexe je pokazalo: mnoge od njih so izpostavljene kritičnim ranljivostim protokolov SSL/TLS, običajno prek poddomen ali odvisnosti. Po besedah avtorjev raziskave kompleksnost sodobnih spletnih aplikacij množi površino napada.

Rezultati raziskave

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

Preverjenih je bilo 10.000 najbolj priljubljenih HTTPS spletnih strani iz seznama Alexa in 90.816 povezanih gostiteljev. Ranjive kriptografske konfiguracije so bile odkrite na 5.574 gostiteljih, kar pomeni približno 5,5% od skupnega števila:

  • 4.818 je ranljivih za MITM
  • 733 je ranljivih za popolno dekriptiranje TLS
  • 912 je ranljivih za delno dekriptiranje TLS

898 spletnih strani je popolnoma odprtih za napade, torej dovoljujejo injekcijo tujih skriptov, 977 spletnih strani pa nalaga vsebino s slabo zaščitenih strani, s katerimi lahko komunicira napadalec.

Raziskovalci poudarjajo, da med 898 'popolnoma kompromitiranimi' viri najdemo spletne trgovine, finančne storitve in druge velike spletne strani. 660 od 898 spletnih strani nalaga zunanje skripte z ranljivih gostiteljev: to je glavni vir nevarnosti. Po besedah avtorjev kompleksnost sodobnih spletnih aplikacij množi površino napada.

Odkrite so bile tudi druge težave: pri 10% obrazcev za prijavo so težave z varnim prenosom informacij, kar ogroža uhajanje gesel, 412 spletnih mest dovoljuje prestrezanje piškotkov in 'krajo seje', 543 spletnih mest pa je izpostavljenih napadom na integriteto piškotkov (prek poddomen).

Težava je v tem, da so bili v protokolih SSL/TLS in programski opremi v preteklih letih odkrili številne ranljivosti kot so: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) in Heartbleed (CVE-2014-0160). Za zaščito pred njimi so potrebne določene nastavitve na strani strežnika in odjemalca, da se izognemo uporabi starejših ranljivih različic. A to je precej zahtevna procedura, saj take nastavitve zahtevajo izbiro iz obsežnega nabora šifrirnih in protokolskih možnosti, kar je lahko zelo zapleteno. Ni vedno jasno, kateri nabori šifrirnih in protokolskih možnosti se štejejo za 'zadostno varne'.

Priporočene nastavitve

Ne obstaja enega uradno odobrenega in dogovorjenega seznama priporočil za nastavitve HTTPS. Tako Mozilla SSL Configuration Generator ponuja več možnosti konfiguracije, odvisno od želenega nivoja zaščite. Na primer, tukaj so priporočene nastavitve za strežnik nginx 1.14.0:

Sodobni način

Najstareši podprti odjemalci: Firefox 27, Chrome 30, IE 11 na Windows 7, Edge, Opera 17, Safari 9, Android 5.0 in Java 8

server {
listen 80 default_server;
listen [::]:80 default_server;

# Preusmerite vse HTTP zahteve na HTTPS s 301 Moved Permanently odgovorom.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certifikati, poslani odjemalcu v SERVER HELLO, so združeni v 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;


# sodobna konfiguracija. prilagodite svojim potrebam.
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 je zahtevan) (15768000 sekund = 6 mesecev)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# pridobite OCSP zapise iz URL-ja v ssl_certificate in jih shranite v predpomnilnik
ssl_stapling on;
ssl_stapling_verify on;

## preverite verigo zaupanja OCSP odgovora z uporabo Root CA in Intermediate certifikatov
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Povprečna podpora

Najstareš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;

# Preusmjerite sve HTTP zahtjeve na HTTPS s 301 Moved Permanently odgovorom.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certifikati poslani klijentu u SERVER HELLO su povezani u 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 parametar za DHE ciphersuites, preporučena 2048 bita
ssl_dhparam /path/to/dhparam.pem;

# intermediatna konfiguracija. prilagodite svojim potrebama.
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 je potreban) (15768000 sekundi = 6 mjeseci)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# povucite OCSP zapise s URL-a u ssl_certificate i keširajte ih
ssl_stapling on;
ssl_stapling_verify on;

## provjerite lanac povjerenja OCSP odgovora koristeći Root CA i intermediatske certifikate
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Stara podrška

Najstareši podprti odjemalci: Windows XP IE6, Java 6

server {
listen 80 default_server;
listen [::]:80 default_server;

# Preusmjerite sve HTTP zahtjeve na HTTPS s 301 Moved Permanently odgovorom.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certifikati poslani klijentu u SERVER HELLO su povezani u 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 parametar za DHE ciphersuites, preporučena 2048 bita
ssl_dhparam /path/to/dhparam.pem;

# stara konfiguracija. prilagodite svojim potrebama.
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 je potreban) (15768000 sekundi = 6 mjeseci)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# povucite OCSP zapise s URL-a u ssl_certificate i keširajte ih
ssl_stapling on;
ssl_stapling_verify on;

## provjerite lanac povjerenja OCSP odgovora koristeći Root CA i intermediatske certifikate
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Priporočljivo je, da vedno uporabite celoten nabor šifer in najnovejšo različico OpenSSL. Nabor šifer v nastavitvah strežnika določa prednostni red, v katerem se bodo uporabljale, odvisno od nastavitev odjemalca.

Raziskave kažejo, da ni dovolj le namestiti HTTPS certifikat. "Čeprav ne obravnavamo piškotkov, kot smo to počeli leta 2005, in je 'spodobni TLS' postal samoumeven, se izkaže, da za zagotavljanje varnosti na presenetljivo velikem številu zelo priljubljenih spletnih strani ni dovolj teh osnovnih stvari," — pravi avtorji dela. Za zanesljivo zaščito povezave med strežnikom in odjemalcem je treba pozorno spremljati infrastrukturo lastnih poddomene in zunanjih gostiteljev, s katerih se dostavlja vsebina za spletno stran. Morda ima smisel naročiti revizijo pri kakšni zunanji družbi, ki se specializira za informacijsko varnost.

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

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster