HTTPS nie je vždy tak bezpečný, ako sa zdá. Zraniteľnosti boli zistené na 5,5 % webových stránok HTTPS

HTTPS nie je vždy tak bezpečný, ako sa zdá. Zraniteľnosti boli zistené na 5,5 % webových stránok HTTPS
Jeden z top webov Alexa (centrálny kruh), chránený HTTPS, so subdoménami (sivý) a závislosťami (biely), medzi ktorými sú zraniteľné (šrafovaná výplň)

Dnes sa ikona zabezpečeného pripojenia HTTPS stala štandardným a dokonca nevyhnutným atribútom akejkoľvek serióznej webovej stránky. Ak certifikát chýba, takmer všetky moderné prehliadače zobrazujú upozornenie, že pripojenie k stránke „nie je zabezpečené“ a neodporúčajú posielať na ňu dôverné informácie.

Ale ukazuje sa, že prítomnosť „zámku“ v adresnom riadku neznamená vždy záruku ochrany. Kontrola 10 000 popredných stránok z rebríčka Alexa ukázala: mnohé z nich sú náchylné na kritické zraniteľnosti protokolov SSL/TLS, obvykle prostredníctvom subdomén alebo závislostí. Podľa autorov štúdie zložitost moderných webových aplikácií mnohonásobne zvyšuje povrch útoku.

Výsledky štúdie

Štúdiu vykonali odborníci z Benátskej univerzity Ca' Foscari (Taliansko) a Viedenskej technickej univerzity. Podrobnú správu predstavia na 40. sympóziu IEEE o bezpečnosti a súkromí, ktoré sa uskutoční 20.-22. mája 2019 v San Franciscu.

Bolo skontrolovaných 10 000 najpopulárnejších webových stránok HTTPS z rebríčka Alexa a 90 816 súvisiacich hostiteľov. Zraniteľné kryptografické konfigurácie boli zistené na 5574 hostiteľoch, teda približne na 5,5 % z celkového počtu:

  • 4818 je zraniteľných voči MITM
  • 733 je zraniteľných pre úplné dešifrovanie TLS
  • 912 je zraniteľných pre čiastočné dešifrovanie TLS

898 stránok je úplne otvorených na hackovanie, teda dovoľujú injekciu cudzích skriptov, a 977 stránok načítava obsah z málo zabezpečených stránok, s ktorými môže interagovať útočník.

Výskumníci zdôrazňujú, že medzi 898 „úplne skompromitovanými“ zdrojmi sú internetové obchody, finančné služby a iné veľké stránky. 660 z 898 stránok načítava externé skripty z zraniteľných hostiteľov: to je hlavný zdroj nebezpečenstva. Podľa autorov zložitost moderných webových aplikácií mnohonásobne zvyšuje povrch útoku.

Boli zistené aj ďalšie problémy: 10 % formulárov pre autentifikáciu má problémy so zabezpečeným prenášaním informácií, čo hrozí únikom hesiel, 412 stránok umožňuje zachytávanie cookies a „únik relácií“, a 543 stránok je náchylných na útoky na integritu cookies (cez subdomény).

Problém je v tom, že v posledných rokoch boli v protokoloch SSL/TLS a softvéri identifikované viaceré zraniteľnosti: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) a Heartbleed (CVE-2014-0160). Na ochranu pred nimi je potrebné množstvo nastavení na strane servera a klienta, aby sa predišlo používaniu starých zraniteľných verzií. No to je dosť netriviálna procedúra, pretože tieto nastavenia si vyžadujú výber z rozsiahlej škály šifrov a protokolov, v ktorých sa dosť ťažko orientuje. Nie vždy je jasné, ktoré sady šifrov a protokolov považovať za „dostatočne bezpečné“.

Odporúčané nastavenia

Neexistuje jeden oficiálne schválený a dohodnutý zoznam odporúčaných nastavení HTTPS. Tak napríklad, Mozilla SSL Configuration Generator ponúka niekoľko variantov konfigurácie v závislosti od požadovanej úrovne ochrany. Napríklad, tu sú odporúčané nastavenia pre server nginx 1.14.0:

Moderný režim

Najstarší podporovaní klienti: Firefox 27, Chrome 30, IE 11 na Windows 7, Edge, Opera 17, Safari 9, Android 5.0 a Java 8

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

# Premeniť všetky HTTP požiadavky na HTTPS s odpoveďou 301 Presunuté natrvalo.
return 301 https://$host$request_uri;
}

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

# certifikáty zaslané klientovi v SERVER HELLO sú skombinované 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;


# moderná konfigurácia. prispôsobte si to podľa svojich potrieb.
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 potrebný) (15768000 sekúnd = 6 mesiacov)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# načítať OCSP záznamy z URL v ssl_certificate a uložiť ich
ssl_stapling on;
ssl_stapling_verify on;

## overiť reťazec dôvery OCSP odpovede pomocou Root CA a intermediálnych certifikátov
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Priemerná podpora

Najstarší podporovaní klienti: 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;

# Preveďte všetky požiadavky HTTP na HTTPS s odpoveďou 301 Presunuté natrvalo.
return 301 https://$host$request_uri;
}

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

# certifikáty poslané klientovi v SERVER HELLO sú skombinované 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;

# Diffie-Hellman parameter pre DHE ciphersuites, odporúčaných 2048 bitov
ssl_dhparam /path/to/dhparam.pem;

# stredná konfigurácia. prispôsobte si to podľa svojich potrieb.
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 potrebný) (15768000 sekúnd = 6 mesiacov)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# načítať OCSP záznamy z URL v ssl_certificate a uchovávať ich v cache
ssl_stapling on;
ssl_stapling_verify on;

## overiť reťazec dôvery OCSP odpovede pomocou Root CA a medzicertifikátov
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Staršia podpora

Najstarší podporovaní klienti: Windows XP IE6, Java 6

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

# Preveďte všetky požiadavky HTTP na HTTPS s odpoveďou 301 Presunuté natrvalo.
return 301 https://$host$request_uri;
}

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

# certifikáty poslané klientovi v SERVER HELLO sú skombinované 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;

# Diffie-Hellman parameter pre DHE ciphersuites, odporúčaných 2048 bitov
ssl_dhparam /path/to/dhparam.pem;

# stará konfigurácia. prispôsobte si to podľa svojich potrieb.
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 potrebný) (15768000 sekúnd = 6 mesiacov)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# načítať OCSP záznamy z URL v ssl_certificate a uchovávať ich v cache
ssl_stapling on;
ssl_stapling_verify on;

## overiť reťazec dôvery OCSP odpovede pomocou Root CA a medzicertifikátov
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver ;

....
}

Odporúča sa vždy používať kompletný súbor šifrov a najnovšiu verziu OpenSSL. Sada šifrov v nastaveniach servera určuje prioritu, v akej budú používané, v závislosti od nastavení klienta.

Skúmanie ukazuje, že nestačí len nainštalovať certifikát HTTPS. „Hoci už nenašeme cookies ako v roku 2005 a „slušný TLS” sa stal bežnou praxou, ukazuje sa, že tieto základné veci nestačia na zabezpečenie prekvapivo veľkého množstva veľmi populárnych webových stránok,“ hovoria autori štúdie. Pre spoľahlivú ochranu kanála medzi serverom a klientom je potrebné starostlivo sledovať infraštruktúru z vlastných subdomén a externých hostiteľov, z ktorých je dodávaný obsah pre stránku. Možno má zmysel objednať audit od nejakej externé spoločnosti, ktorá sa špecializuje na informačnú bezpečnosť.

HTTPS nie je vždy tak bezpečný, ako sa zdá. Zraniteľnosti boli zistené na 5,5 % webových stránok HTTPS

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster