HTTPS tidak selalu seaman kelihatannya. Kerentanan ditemukan di 5,5% situs HTTPS

HTTPS tidak selalu seaman kelihatannya. Kerentanan ditemukan di 5,5% situs HTTPS
Salah satu situs teratas Alexa (lingkaran tengah), diamankan dengan HTTPS, dengan subdomain (abu-abu) dan dependensi (putih), di antaranya ada yang rentan (bayangan putus-putus)

Saat ini, ikon koneksi aman HTTPS telah menjadi standar dan bahkan atribut yang diperlukan dari situs serius mana pun. Jika sertifikat hilang, hampir semua browser terbaru menampilkan peringatan itu koneksi ke situs "tidak aman" dan tidak merekomendasikan mentransfer informasi rahasia ke sana.

Namun ternyata keberadaan "kunci" di bilah alamat tidak selalu menjamin perlindungan. Memeriksa 10 situs terkemuka dari peringkat, Alexa menunjukkan bahwa banyak dari mereka tunduk pada kerentanan kritis dalam protokol SSL / TLS, biasanya melalui subdomain atau dependensi. Menurut penulis penelitian, kompleksitas aplikasi web modern sangat meningkatkan permukaan serangan.

Hasil penelitian

Studi tersebut dilakukan oleh para ahli dari University of Venice Ca' Foscari (Italia) dan Vienna Technical University. Mereka akan mempresentasikan laporan terperinci pada Simposium IEEE ke-40 tentang Keamanan dan Privasi, yang akan diadakan 20-22 Mei 2019 di San Francisco.

10 situs HTTPS daftar Alexa teratas dan 000 host terkait telah diuji. Konfigurasi kriptografi yang rentan terdeteksi pada 90 host, yaitu sekitar 816% dari total:

  • 4818 rentan terhadap MITM
  • 733 rentan terhadap dekripsi TLS penuh
  • 912 rentan terhadap dekripsi TLS parsial

898 situs benar-benar terbuka untuk peretasan, yaitu, memungkinkan injeksi skrip asing, dan 977 situs memuat konten dari halaman yang tidak terlindungi dengan baik yang dapat berinteraksi dengan penyerang.

Para peneliti menekankan bahwa di antara 898 sumber daya yang “sepenuhnya disusupi” adalah toko online, layanan keuangan, dan situs besar lainnya. 660 dari 898 situs mengunduh skrip eksternal dari host yang rentan: ini adalah sumber utama bahaya. Menurut penulis, kompleksitas aplikasi web modern sangat meningkatkan permukaan serangan.

Masalah lain juga ditemukan: 10% formulir otorisasi memiliki masalah dengan pengiriman informasi yang aman, yang mengancam kebocoran kata sandi, 412 situs memungkinkan pencegatan cookie dan pembajakan sesi, dan 543 situs mengalami serangan terhadap integritas cookie (melalui subdomain) .

Masalahnya adalah bahwa dalam beberapa tahun terakhir dalam protokol dan perangkat lunak SSL / TLS mengidentifikasi sejumlah kerentanan: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587), dan Heartbleed (CVE-2014-0160). Untuk melindunginya, sejumlah pengaturan diperlukan di sisi server dan klien untuk menghindari penggunaan versi lama yang rentan. Tetapi ini adalah prosedur yang agak tidak sepele, karena pengaturan seperti itu melibatkan pemilihan dari serangkaian sandi dan protokol yang ekstensif, yang cukup sulit untuk dipahami. Tidak selalu jelas cipher suite dan protokol mana yang dianggap “cukup aman”.

Setelan yang direkomendasikan

Tidak ada yang secara resmi menyetujui dan menyetujui daftar pengaturan HTTPS yang direkomendasikan. Jadi, Generator Konfigurasi Mozilla SSL menawarkan beberapa opsi konfigurasi, tergantung pada tingkat perlindungan yang diperlukan. Misalnya, berikut adalah pengaturan yang disarankan untuk server nginx 1.14.0:

Modus Modern

Klien terlama yang didukung: 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>;

....
}

Dukungan sedang

Klien terlama yang didukung: 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>;

....
}

Dukungan Lama

Klien terlama yang didukung: Windows XP IE6, Jawa 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>;

....
}

Disarankan agar Anda selalu menggunakan cipher suite lengkap dan OpenSSL versi terbaru. Cipher suite dalam pengaturan server menentukan prioritas penggunaannya, tergantung pada pengaturan klien.

Penelitian menunjukkan bahwa menginstal sertifikat HTTPS saja tidak cukup. "Meskipun kami tidak menangani cookie seperti yang kami lakukan pada tahun 2005, dan 'TLS yang layak' telah menjadi hal biasa, ternyata hal-hal mendasar ini tidak cukup untuk mengamankan sejumlah besar situs yang sangat populer," kata orang penulis karya tersebut. Untuk melindungi saluran antara server dan klien dengan andal, Anda perlu memantau infrastruktur dengan hati-hati dari subdomain Anda sendiri dan host pihak ketiga yang menyediakan konten untuk situs tersebut. Mungkin masuk akal untuk memesan audit dari beberapa perusahaan pihak ketiga yang berspesialisasi dalam keamanan informasi.

HTTPS tidak selalu seaman kelihatannya. Kerentanan ditemukan di 5,5% situs HTTPS

Sumber: www.habr.com