HTTPS tidak selalunya selamat seperti yang kelihatan. Kerentanan ditemui dalam 5,5% tapak HTTPS

HTTPS tidak selalunya selamat seperti yang kelihatan. Kerentanan ditemui dalam 5,5% tapak HTTPS
Salah satu tapak teratas Alexa (bulatan tengah), dilindungi oleh HTTPS, dengan subdomain (kelabu) dan kebergantungan (putih), antaranya terdapat tapak yang terdedah (lorek putus-putus)

Pada masa kini, ikon sambungan selamat HTTPS telah menjadi standard dan juga atribut yang diperlukan bagi mana-mana tapak yang serius. Jika sijil hilang, hampir semua pelayar terkini menunjukkan amaran bahawa sambungan ke tapak adalah "tidak selamat" dan jangan mengesyorkan untuk memindahkan maklumat sulit kepadanya.

Tetapi ternyata kehadiran "kunci" dalam bar alamat tidak selalu menjamin perlindungan. Menyemak 10 tapak terkemuka daripada penilaian, Alexa menunjukkan bahawa kebanyakan mereka tertakluk kepada kerentanan kritikal dalam protokol SSL / TLS, biasanya melalui subdomain atau kebergantungan. Menurut pengarang kajian, kerumitan aplikasi web moden sangat meningkatkan permukaan serangan.

Hasil penyelidikan

Kajian itu dijalankan oleh pakar dari Universiti Venice Ca' Foscari (Itali) dan Universiti Teknikal Vienna. Mereka akan membentangkan laporan terperinci di Simposium IEEE ke-40 mengenai Keselamatan dan Privasi, yang akan diadakan pada 20-22 Mei 2019 di San Francisco.

10 laman web HTTPS senarai Alexa teratas dan 000 hos berkaitan telah diuji. Konfigurasi kriptografi yang terdedah telah dikesan pada 90 hos, iaitu, kira-kira 816% daripada jumlah keseluruhan:

  • 4818 terdedah kepada MITM
  • 733 terdedah kepada penyahsulitan penuh TLS
  • 912 terdedah kepada penyahsulitan TLS separa

Tapak 898 terbuka sepenuhnya untuk penggodaman, iaitu, mereka membenarkan suntikan skrip luar, dan 977 tapak memuatkan kandungan daripada halaman yang dilindungi dengan buruk yang boleh berinteraksi dengan penyerang.

Para penyelidik menekankan bahawa antara 898 sumber yang "terkompromi sepenuhnya" adalah kedai dalam talian, perkhidmatan kewangan dan tapak besar lain. 660 daripada 898 tapak memuat turun skrip luaran daripada hos yang terdedah: ini adalah sumber utama bahaya. Menurut pengarang, kerumitan aplikasi web moden sangat meningkatkan permukaan serangan.

Masalah lain juga ditemui: 10% daripada borang kebenaran mempunyai masalah dengan penghantaran maklumat yang selamat, yang mengancam untuk membocorkan kata laluan, 412 tapak membenarkan pemintasan kuki dan rampasan sesi, dan 543 tapak tertakluk kepada serangan ke atas integriti kuki (melalui subdomain) .

Masalahnya ialah dalam beberapa tahun kebelakangan ini dalam protokol dan perisian SSL / TLS mengenal pasti beberapa kelemahan: PODLE (CVE-2014-3566), BEAST (CVE-2011-3389), JENAYAH (CVE-2012-4929), BREACH (CVE-2013-3587), dan Heartbleed (CVE-2014-0160). Untuk melindungi daripada mereka, beberapa tetapan diperlukan pada bahagian pelayan dan klien untuk mengelak daripada menggunakan versi lama yang terdedah. Tetapi ini adalah prosedur yang agak tidak remeh, kerana tetapan sedemikian melibatkan pemilihan daripada set sifir dan protokol yang luas, yang agak sukar untuk difahami. Tidak selalunya jelas suite dan protokol sifir yang dianggap "cukup selamat".

Tetapan yang disyorkan

Tiada siapa yang diluluskan secara rasmi dan dipersetujui senarai tetapan HTTPS yang disyorkan. Jadi, Penjana Konfigurasi SSL Mozilla menawarkan beberapa pilihan konfigurasi, bergantung pada tahap perlindungan yang diperlukan. Sebagai contoh, berikut ialah tetapan yang disyorkan untuk pelayan nginx 1.14.0:

Mod Moden

Pelanggan tertua yang disokong: Firefox 27, Chrome 30, IE 11 pada Windows 7, Edge, Opera 17, Safari 9, Android 5.0 dan 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>;

....
}

Sokongan sederhana

Pelanggan tertua yang disokong: 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>;

....
}

Sokongan Lama

Pelanggan tertua yang disokong: 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>;

....
}

Adalah disyorkan agar anda sentiasa menggunakan suite sifir penuh dan versi terkini OpenSSL. Suite sifir dalam tetapan pelayan menentukan keutamaan ia akan digunakan, bergantung pada tetapan klien.

Penyelidikan menunjukkan bahawa tidak cukup dengan hanya memasang sijil HTTPS. "Walaupun kami tidak mengendalikan kuki seperti yang kami lakukan pada tahun 2005, dan 'TLS yang baik' telah menjadi perkara biasa, ternyata perkara asas ini tidak mencukupi untuk mendapatkan sejumlah besar tapak yang sangat popular," katakan pengarang karya. Untuk melindungi saluran antara pelayan dan pelanggan dengan pasti, anda perlu memantau infrastruktur dengan teliti daripada subdomain anda sendiri dan hos pihak ketiga yang kandungan untuk tapak tersebut dibekalkan. Mungkin masuk akal untuk memerintahkan audit daripada beberapa syarikat pihak ketiga yang pakar dalam keselamatan maklumat.

HTTPS tidak selalunya selamat seperti yang kelihatan. Kerentanan ditemui dalam 5,5% tapak HTTPS

Sumber: www.habr.com