HTTPS nie je vždy také bezpečné, ako sa zdá. Zraniteľnosť nájdená na 5,5 % stránok HTTPS

HTTPS nie je vždy také bezpečné, ako sa zdá. Zraniteľnosť nájdená na 5,5 % stránok HTTPS
Jedna z najlepších stránok Alexa (stredový kruh), chránená protokolom HTTPS, so subdoménami (sivá) a závislosťami (biela), medzi ktorými sú zraniteľné (tieňované)

V súčasnosti sa ikona zabezpečeného pripojenia HTTPS stala štandardným a dokonca nevyhnutným atribútom každej serióznej webovej stránky. Ak osvedčenie chýba, takmer všetky najnovšie prehliadače zobrazujú varovanie, že pripojenie k stránke nie je „zabezpečené“ a neodporúčajú mu prenášať dôverné informácie.

Ukazuje sa však, že prítomnosť „zámku“ v paneli s adresou nie vždy zaručuje ochranu. Kontrola 10 000 popredných stránok z rebríčka Alexa ukázali: mnohé z nich sú vystavené kritickým zraniteľnostiam protokolu SSL/TLS, zvyčajne prostredníctvom subdomén alebo závislostí. Podľa autorov štúdie zložitosť moderných webových aplikácií výrazne zvyšuje plochu útoku.

Výsledky štúdie

Štúdiu vykonali špecialisti z Univerzity Ca' Foscari v Benátkach (Taliansko) a Technickej univerzity vo Viedni. Podrobnú správu predstavia na 40. sympóziu IEEE o bezpečnosti a súkromí, ktoré sa bude konať 20. – 22. mája 2019 v San Franciscu.

Skontrolovalo sa 10 000 najlepších stránok HTTPS na Alexovom zozname a 90 816 pridružených hostiteľov. Zraniteľné kryptografické konfigurácie boli identifikované na 5574 hostiteľoch, čo je približne 5,5 % z celkového počtu:

  • 4818 zraniteľné voči MITM
  • 733 zraniteľné voči úplnému dešifrovaniu TLS
  • 912 náchylné na čiastočné dešifrovanie TLS

898 stránok je úplne otvorených hackerstvu, to znamená, že umožňujú vkladanie skriptov tretích strán a 977 stránok sťahuje obsah zo slabo chránených stránok, s ktorými môže útočník interagovať.

Výskumníci zdôrazňujú, že medzi 898 „úplne ohrozenými“ zdrojmi sú internetové obchody, finančné služby a ďalšie veľké stránky. 660 z 898 stránok sťahuje externé skripty zo zraniteľných hostiteľov: toto je hlavný zdroj nebezpečenstva. Podľa autorov zložitosť moderných webových aplikácií značne zvyšuje plochu útoku.

Objavili sa aj ďalšie problémy: 10 % prihlasovacích formulárov má problémy s bezpečným prenosom informácií, čo ohrozuje únik hesiel, 412 stránok umožňuje zachytávanie súborov cookie a „zneškodnenie relácie“ a 543 stránok je náchylných na útoky na integritu súborov cookie (cez subdomény ).

Problémom je, že v posledných rokoch SSL/TLS protokoly a softvér bolo identifikovaných množstvo zraniteľností: PUDLÍK (CVE-2014-3566), BEAST (CVE-2011-3389), ZLOČIN (CVE-2012-4929), PORUŠENIE (CVE-2013-3587) a Heartbleed (CVE-2014-0160). Na ochranu pred nimi je na strane servera a klienta potrebné množstvo nastavení, aby sa predišlo použitiu starých zraniteľných verzií. Ide však o pomerne netriviálny postup, pretože takéto nastavenia zahŕňajú výber z rozsiahleho súboru šifier a protokolov, ktorým je dosť ťažké porozumieť. Nie je vždy jasné, ktoré šifrovacie súpravy a protokoly sa považujú za „dostatočne bezpečné“.

Odporúčané nastavenia

Neexistuje nikto oficiálne schválený a schválený zoznam odporúčaných nastavení HTTPS. takže, Konfiguračný generátor Mozilla SSL ponúka niekoľko možností konfigurácie v závislosti od požadovanej úrovne ochrany. Tu sú napríklad odporúčané nastavenia pre server nginx 1.14.0:

Moderný režim

Najstarší podporovaní klienti: Firefox 27, Chrome 30, IE 11 v systéme Windows 7, Edge, Opera 17, Safari 9, Android 5.0 a 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>;

....
}

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;

# 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>;

....
}

Stará podpora

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

....
}

Odporúča sa vždy používať úplnú šifrovaciu sadu a najnovšiu verziu OpenSSL. Sada šifier v nastaveniach servera označuje prioritu, v ktorej sa budú používať, v závislosti od nastavení klienta.

Výskum ukazuje, že jednoduchá inštalácia HTTPS certifikátu nestačí. „Hoci nezaobchádzame so súbormi cookie ako v roku 2005 a ‚slušné TLS‘ sa stalo samozrejmosťou, ukazuje sa, že tieto základné veci nestačia na zabezpečenie prekvapivo veľkého počtu veľmi populárnych stránok.“ povedať autorov diela. Ak chcete spoľahlivo chrániť kanál medzi serverom a klientom, musíte starostlivo monitorovať infraštruktúru svojich vlastných subdomén a hostiteľov tretích strán, z ktorých sa dodáva obsah pre stránku. Možno by malo zmysel objednať si audit od nejakej tretej strany, ktorá sa špecializuje na informačnú bezpečnosť.

HTTPS nie je vždy také bezpečné, ako sa zdá. Zraniteľnosť nájdená na 5,5 % stránok HTTPS

Zdroj: hab.com