HTTPS ne vienmēr ir tik drošs, kā šķiet. Ievainojamības atrastas 5,5% HTTPS vietņu

HTTPS ne vienmēr ir tik drošs, kā šķiet. Ievainojamības atrastas 5,5% HTTPS vietņu
Viena no Alexa populārākajām vietnēm (centrālais aplis), ko nodrošina HTTPS, ar apakšdomēniem (pelēks) un atkarībām (balts), starp kuriem ir arī neaizsargātas (pārtraukts ēnojums)

Mūsdienās HTTPS drošā savienojuma ikona ir kļuvusi par standarta un pat nepieciešamu jebkuras nopietnas vietnes atribūtu. Ja apliecība trūkst, gandrīz visās jaunākajās pārlūkprogrammās tiek parādīts brīdinājums, ka savienojums ar vietni nav drošs un neiesakām tai pārsūtīt konfidenciālu informāciju.

Bet izrādās, ka "slēdzenes" klātbūtne adreses joslā ne vienmēr garantē aizsardzību. Pārbauda 10 000 vadošo vietņu No vērtējuma Alexa parādīja, ka daudzi no tiem ir pakļauti kritiskām ievainojamībām SSL/TLS protokolos, parasti izmantojot apakšdomēnus vai atkarības. Pēc pētījuma autoru domām, mūsdienu tīmekļa lietojumprogrammu sarežģītība ievērojami palielina uzbrukuma virsmu.

Pētījuma rezultāti

Pētījumu veica eksperti no Venēcijas universitātes Ca' Foscari (Itālija) un Vīnes Tehniskās universitātes. Viņi prezentēs detalizētu ziņojumu 40. IEEE simpozijā par drošību un privātumu, kas notiks 20. gada 22.–2019. maijā Sanfrancisko.

Tika pārbaudītas 10 000 populārākās Alexa saraksta HTTPS vietnes un 90 816 saistītie resursdatori. Neaizsargātas kriptogrāfijas konfigurācijas tika atklātas 5574 saimniekdatoros, tas ir, aptuveni 5,5% no kopējā skaita:

  • 4818 neaizsargāts pret MITM
  • 733 ir neaizsargāti pret pilnīgu TLS atšifrēšanu
  • 912 ir neaizsargāti pret daļēju TLS atšifrēšanu

898 vietnes ir pilnībā atvērtas uzlaušanai, tas ir, tās ļauj ievadīt svešus skriptus, un 977 vietnes ielādē saturu no slikti aizsargātām lapām, ar kurām uzbrucējs var mijiedarboties.

Pētnieki uzsver, ka starp 898 “pilnīgi apdraudētajiem” resursiem ir tiešsaistes veikali, finanšu pakalpojumi un citas lielas vietnes. 660 no 898 vietnēm lejupielādē ārējos skriptus no neaizsargātiem saimniekiem: tas ir galvenais briesmu avots. Pēc autoru domām, mūsdienu tīmekļa lietojumprogrammu sarežģītība ievērojami palielina uzbrukuma virsmu.

Tika konstatētas arī citas problēmas: 10% autorizācijas veidlapu ir problēmas ar drošu informācijas pārsūtīšanu, kas draud ar paroļu noplūdi, 412 vietnes ļauj pārtvert sīkfailus un sesiju nolaupīšanu, un 543 vietnes ir pakļautas uzbrukumiem sīkfailu integritātei (caur apakšdomēniem) .

Problēma ir tā, ka pēdējos gados SSL / TLS protokoli un programmatūra identificēja vairākas ievainojamības: PŪDLIS (CVE-2014-3566), ZVĒRS (CVE-2011-3389), NOZIEGUMS (CVE-2012-4929), BREACH (CVE-2013-3587) un Heartbleed (CVE-2014-0160). Lai aizsargātu pret tiem, servera un klienta pusē ir nepieciešami vairāki iestatījumi, lai izvairītos no veco ievainojamo versiju izmantošanas. Bet šī ir diezgan netriviāla procedūra, jo šādi iestatījumi ietver izvēli no plaša šifru un protokolu komplekta, ko ir diezgan grūti saprast. Ne vienmēr ir skaidrs, kuri šifru komplekti un protokoli tiek uzskatīti par “pietiekami drošiem”.

Ieteicamie iestatījumi

Nav neviena oficiāli apstiprināta un saskaņota ieteicamo HTTPS iestatījumu saraksta. Tātad, Mozilla SSL konfigurācijas ģenerators piedāvā vairākas konfigurācijas iespējas atkarībā no nepieciešamā aizsardzības līmeņa. Piemēram, šeit ir ieteicamie iestatījumi nginx 1.14.0 serverim:

Mūsdienīgs režīms

Vecākie atbalstītie klienti: Firefox 27, Chrome 30, IE 11 operētājsistēmā Windows 7, Edge, Opera 17, Safari 9, Android 5.0 un 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>;

....
}

Vidējs atbalsts

Vecākie atbalstītie 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>;

....
}

Vecais atbalsts

Vecākie atbalstītie 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>;

....
}

Ieteicams vienmēr izmantot pilno šifru komplektu un jaunāko OpenSSL versiju. Šifru komplekts servera iestatījumos norāda prioritāti, kādā tie tiks izmantoti atkarībā no klienta iestatījumiem.

Pētījumi liecina, ka nepietiek tikai ar HTTPS sertifikāta instalēšanu. "Lai gan mēs neapstrādājam sīkfailus, kā to darījām 2005. gadā, un "pienācīgs TLS" ir kļuvis par ikdienu, izrādās, ka ar šīm pamata lietām nepietiek, lai nodrošinātu pārsteidzoši lielu skaitu ļoti populāru vietņu," viņi saka darba autori. Lai droši aizsargātu kanālu starp serveri un klientu, jums rūpīgi jāuzrauga infrastruktūra no saviem apakšdomēniem un trešo pušu resursdatoriem, no kuriem tiek piegādāts vietnes saturs. Varbūt ir jēga pasūtīt auditu no kādas trešās puses uzņēmuma, kas specializējas informācijas drošībā.

HTTPS ne vienmēr ir tik drošs, kā šķiet. Ievainojamības atrastas 5,5% HTTPS vietņu

Avots: www.habr.com