Memecahkan Masalah TLS 1.0, Edisi ke-2

Dokumen ini menyajikan panduan terbaru tentang mengidentifikasi dan menghapus dependensi protokol Transport Layer Security (TLS) versi 1.0 dengan cepat dalam perangkat lunak yang dibangun di atas sistem operasi Microsoft, menindaklanjuti detail tentang perubahan produk dan fitur baru yang dikirimkan oleh Microsoft untuk melindungi pelanggan dan layanan online Anda sendiri. Ini dimaksudkan untuk digunakan sebagai titik awal untuk membangun rencana migrasi ke lingkungan jaringan TLS 1.2+. Meskipun solusi yang dibahas di sini dapat membawa dan membantu menghapus penggunaan TLS 1.0 di sistem operasi non-Microsoft atau pustaka kripto, itu bukan fokus dari dokumen ini.

TLS 1.0 adalah protokol keamanan yang pertama kali ditentukan pada tahun 1999 untuk membuat saluran enkripsi melalui jaringan komputer. Microsoft telah mendukung protokol ini sejak Windows XP/Server 2003. Meskipun tidak lagi menjadi protokol keamanan default yang digunakan oleh OSes modern, TLS 1.0 masih didukung untuk kompatibilitas mundur. Persyaratan peraturan yang berkembang serta kerentanan keamanan baru di TLS 1.0 memberi perusahaan insentif untuk menonaktifkan TLS 1.0 sepenuhnya.

Microsoft merekomendasikan pelanggan untuk mengatasi masalah ini dengan menghapus dependensi TLS 1.0 di lingkungan mereka dan menonaktifkan TLS 1.0 di tingkat sistem operasi jika memungkinkan. Mengingat lamanya waktu TLS 1.0 telah didukung oleh industri perangkat lunak, sangat disarankan agar setiap rencana penghentian TLS 1.0 mencakup yang berikut:

  • Analisis kode untuk menemukan/memperbaiki instans hardcode TLS 1.0 atau protokol keamanan yang lebih lama.

  • Pemindaian titik akhir jaringan dan analisis lalu lintas untuk mengidentifikasi sistem operasi menggunakan TLS 1.0 atau protokol yang lebih lama.

  • Pengujian regresi penuh melalui seluruh tumpukan aplikasi Anda dengan TLS 1.0 dinonaktifkan.

  • Migrasi sistem operasi warisan dan pustaka/kerangka kerja pengembangan ke versi yang mampu menegosiasikan TLS 1.2 secara default.

  • Pengujian kompatibilitas di seluruh sistem operasi yang digunakan oleh bisnis Anda untuk mengidentifikasi masalah dukungan TLS 1.2.

  • Koordinasi dengan mitra bisnis dan pelanggan Anda sendiri untuk memberi tahu mereka tentang langkah Anda untuk menghentikan TLS 1.0.

  • Memahami klien mana yang mungkin tidak lagi dapat terhubung ke server Anda setelah TLS 1.0 dinonaktifkan.

Tujuan dari dokumen ini adalah untuk memberikan rekomendasi yang dapat membantu menghapus pemblokir teknis untuk menonaktifkan TLS 1.0 sementara pada saat yang sama meningkatkan visibilitas ke dalam dampak perubahan ini kepada pelanggan Anda sendiri. Menyelesaikan penyelidikan tersebut dapat membantu mengurangi dampak bisnis dari kerentanan keamanan berikutnya di TLS 1.0. Untuk keperluan dokumen ini, referensi untuk penghentian TLS 1.0 juga menyertakan TLS 1.1.

Pengembang perangkat lunak perusahaan memiliki kebutuhan strategis untuk mengadopsi solusi yang lebih aman dan tangkas di masa depan (atau dikenal sebagai Crypto Agility) untuk menangani penyusupan protokol keamanan di masa depan. Meskipun dokumen ini mengusulkan solusi yang gesit untuk menghilangkan hardcoding TLS, solusi Kelincahan Kripto yang lebih luas berada di luar cakupan dokumen ini.

Status implementasi TLS 1.0 Microsoft saat ini

Implementasi TLS 1.0 Microsoft bebas dari kerentanan keamanan yang diketahui. Karena potensi serangan penurunan protokol di masa depan dan kerentanan TLS 1.0 lainnya yang tidak spesifik untuk implementasi Microsoft, disarankan agar dependensi pada semua protokol keamanan yang lebih lama dari TLS 1.2 dihapus jika memungkinkan (TLS 1.1/1.0/ SSLv3/SSLv2).

Dalam merencanakan migrasi ini ke TLS 1.2+, pengembang dan administrator sistem harus mengetahui potensi hardcoding versi protokol dalam aplikasi yang dikembangkan oleh karyawan dan mitra mereka. Hardcoding di sini berarti bahwa versi TLS diperbaiki ke versi yang kedaluarsa dan kurang aman daripada versi yang lebih baru. Versi TLS yang lebih baru dari versi hardcoded tidak dapat digunakan tanpa memodifikasi program yang dimaksud. Kelas masalah ini tidak dapat diatasi tanpa perubahan kode sumber dan penyebaran pembaruan perangkat lunak. Hardcoding versi protokol adalah hal yang biasa di masa lalu untuk tujuan pengujian dan dukungan karena banyak browser dan sistem operasi yang berbeda memiliki berbagai tingkat dukungan TLS.

Versi TLS yang didukung di Windows

Banyak sistem operasi telah kedaluarsa versi TLS default atau mendukung langit-langit yang perlu diperhitungkan.

Gambar 1: Dukungan Protokol Keamanan berdasarkan Versi OS

OS Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3
Windows Vista Diaktifkan Diaktifkan Diaktifkan Tidak Didukung Tidak Didukung Tidak Didukung
Windows Server 2008 Diaktifkan Diaktifkan Diaktifkan Tamu penyandang cacat* Tamu penyandang cacat* Tidak Didukung
Windows 7 (WS2008 R2) Diaktifkan Diaktifkan Diaktifkan Tamu penyandang cacat* Tamu penyandang cacat* Tidak Didukung
Windows 8 (WS2012) Nonaktif Diaktifkan Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Windows 8.1 (WS2012 R2) Nonaktif Diaktifkan Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Windows 10 Nonaktif Diaktifkan Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Windows 11 Nonaktif Diaktifkan Diaktifkan Diaktifkan Diaktifkan Diaktifkan
Server Windows 2016 Tidak Didukung Nonaktif Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Server Windows 2016 Tidak Didukung Nonaktif Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Server Windows 2019 Tidak Didukung Nonaktif Diaktifkan Diaktifkan Diaktifkan Tidak Didukung
Edisi Windows Server 2019 GS Tidak Didukung Nonaktif Nonaktif Nonaktif Diaktifkan Tidak Didukung
Windows Server 2022 Tidak Didukung Nonaktif Nonaktif Nonaktif Diaktifkan Diaktifkan

Windows Server 2019 edisi GS sesuai dengan Microsoft SDL, TLS 1.2 hanya dengan serangkaian suite sandi terbatas.

Edisi Windows Server 2022 sesuai dengan Microsoft SDL, TLS 1.2, dan TLS 1.3 hanya dengan serangkaian suite sandi terbatas.

TLS 1.1/1.2 dapat diaktifkan pada Windows Server 2008 melalui paket Windows Update opsional ini.

Untuk informasi selengkapnya tentang penghentian TLS 1.0/1.1 di IE/Edge, lihat Memodernisasi koneksi TLS di Microsoft Edge dan Internet Explorer 11, Perubahan yang memengaruhi kompatibilitas situs yang datang ke Microsoft Edge dan Menonaktifkan TLS/1.0 dan TLS/1.1 di Browser Edge baru

Cara cepat untuk menentukan versi TLS apa yang akan diminta oleh berbagai klien saat terhubung ke layanan online Anda adalah dengan merujuk pada Simulasi Jabat Tangan di Qualys SSL Labs. Simulasi ini mencakup kombinasi OS/browser klien di seluruh produsen. Lihat Lampiran A di akhir dokumen ini untuk contoh terperinci yang menunjukkan versi protokol TLS yang dinegosiasikan oleh berbagai kombinasi OS/browser klien yang disimulasikan saat menyambungkan ke www.microsoft.com.

Jika belum selesai, sangat disarankan untuk melakukan inventarisasi sistem operasi yang digunakan oleh perusahaan, pelanggan, dan mitra Anda (dua yang terakhir melalui pencapaian/komunikasi atau setidaknya koleksi string HTTP User-Agent). Persediaan ini dapat ditambahkan lebih lanjut dengan analisis lalu lintas di tepi jaringan perusahaan Anda. Dalam situasi seperti itu, analisis lalu lintas akan menghasilkan versi TLS yang berhasil dinegosiasikan oleh pelanggan/mitra yang terhubung ke layanan Anda, tetapi lalu lintas itu sendiri akan tetap dienkripsi.

Peningkatan Teknik Microsoft untuk menghilangkan dependensi TLS 1.0

Sejak rilis v1 dokumen ini, Microsoft telah mengirimkan sejumlah pembaruan perangkat lunak dan fitur baru untuk mendukung penghentian TLS 1.0. Ini termasuk:

  • Pengelogan kustom IIS untuk menghubungkan string IP klien/agen pengguna, URI layanan, versi protokol TLS, dan cipher suite.

    • Dengan pengelogan ini, admin akhirnya dapat mengukur paparan pelanggan mereka terhadap TLS yang lemah.
  • SecureScore - Untuk membantu admin penyewa Office 365 mengidentifikasi penggunaan TLS mereka sendiri yang lemah, portal SecureScore telah dibuat untuk berbagi informasi ini karena TLS 1.0 keluar dari dukungan di Office 365 pada Oktober 2018.

    • Portal ini memberi admin penyewa Office 365 informasi berharga yang mereka butuhkan untuk menjangkau pelanggan mereka sendiri yang mungkin tidak menyadari dependensi TLS 1.0 mereka sendiri.

    • Silakan kunjungi https://securescore.microsoft.com/ untuk informasi lebih lanjut.

  • Pembaruan .Net Framework untuk menghilangkan hardcoding tingkat aplikasi dan mencegah dependensi TLS 1.0 yang diwariskan kerangka kerja.

  • Panduan Pengembang dan pembaruan perangkat lunak telah dirilis untuk membantu pelanggan mengidentifikasi dan menghilangkan dependensi .Net pada praktik terbaik TLS: Keamanan Lapisan Transportasi (TLS) yang lemah dengan .NET Framework

    • FYI: Semua aplikasi yang menargetkan .NET 4.5 atau di bawahnya kemungkinan harus dimodifikasi untuk mendukung TLS 1.2.
  • TLS 1.2 telah didukung ke Windows Server 2008 SP2 dan XP POSReady 2009 untuk membantu pelanggan dengan kewajiban warisan.

  • Pengumuman lebih lanjut akan dibuat pada awal 2019 dan dikomunikasikan dalam pembaruan berikutnya dari dokumen ini.

Menemukan dan memperbaiki dependensi TLS 1.0 dalam kode

Untuk produk yang menggunakan pustaka kriptografi dan protokol keamanan yang disediakan OS Windows, langkah-langkah berikut akan membantu mengidentifikasi penggunaan TLS 1.0 yang dikodekan secara permanen di aplikasi Anda:

  1. Identifikasi semua instans AcquireCredentialsHandle(). Ini membantu peninjau mendapatkan kedekatan yang lebih dekat dengan blok kode di mana TLS mungkin dikodekan secara permanen.

  2. Tinjau instans struktur SecPkgContext_SupportedProtocols dan SecPkgContext_Koneksi ionInfo untuk TLS yang dikodekan secara permanen.

  3. Dalam kode asli, atur penetapan non-nol grbitEnabledProtocols ke nol. Ini memungkinkan sistem operasi untuk menggunakan versi TLS defaultnya.

  4. Nonaktifkan Mode FIPS jika diaktifkan karena potensi konflik dengan pengaturan yang diperlukan untuk menonaktifkan TLS 1.0/1.1 secara eksplisit dalam dokumen ini. Lihat Lampiran B untuk informasi selengkapnya.

  5. Perbarui dan kompilasi ulang aplikasi apa pun menggunakan WinHTTP yang dihosting di Server 2012 atau yang lebih lama.

    1. Aplikasi terkelola – membangun kembali dan menargetkan ulang terhadap versi .NET Framework terbaru

    2. Aplikasi harus menambahkan kode untuk mendukung TLS 1.2 melalui WinHttpSetOption

  6. Untuk mencakup semua basis, pindai kode sumber dan file konfigurasi layanan online untuk pola di bawah ini yang sesuai dengan nilai jenis enumerasi yang umum digunakan dalam hardcoding TLS:

    1. SecurityProtocolType

    2. SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL atau PROTOCOL_TLS

Solusi yang direkomendasikan dalam semua kasus di atas adalah menghapus pemilihan versi protokol yang dikodekan secara permanen dan menugaskan ke default sistem operasi. Jika Anda menggunakan DevSkim, klik di sini untuk melihat aturan yang mencakup pemeriksaan di atas yang dapat Anda gunakan dengan kode Anda sendiri.

Windows PowerShell menggunakan .NET Framework 4.5, yang tidak menyertakan TLS 1.2 sebagai protokol yang tersedia. Untuk mengatasi hal ini, tersedia dua solusi:

  1. Ubah skrip yang dimaksud untuk menyertakan yang berikut ini:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Tambahkan kunci registri di seluruh sistem (misalnya melalui kebijakan grup) ke komputer apa pun yang perlu membuat koneksi TLS 1.2 dari aplikasi .NET. Ini akan menyebabkan .NET menggunakan versi TLS "Default Sistem" yang menambahkan TLS 1.2 sebagai protokol yang tersedia DAN akan memungkinkan skrip untuk menggunakan Versi TLS di masa mendatang ketika OS mendukungnya. (misalnya TLS 1.3)

    reg tambahkan HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64

    reg tambahkan HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

Solusi (1) dan (2) saling eksklusif, yang berarti tidak perlu diimplementasikan bersama.

Membangun kembali/menargetkan ulang aplikasi terkelola menggunakan versi .Net Framework terbaru

Aplikasi yang menggunakan versi .NET framework sebelum 4.7 mungkin memiliki batasan yang secara efektif membatasi dukungan ke TLS 1.0 terlepas dari default OS yang mendasar. Lihat diagram di bawah ini dan praktik terbaik Keamanan Lapisan Transportasi (TLS) dengan .NET Framework untuk informasi selengkapnya.

Membangun kembali aplikasi terkelola

SystemDefaultTLSVersion lebih diutamakan daripada penargetan tingkat aplikasi versi TLS. Praktik terbaik yang direkomendasikan adalah selalu menugaskan ke versi TLS default OS. Ini juga merupakan satu-satunya solusi crypto-agile yang memungkinkan aplikasi Anda memanfaatkan dukungan TLS 1.3 di masa mendatang.

Jika Anda menargetkan versi .NET Framework yang lebih lama seperti 4.5.2 atau 3.5, maka secara default aplikasi Anda akan menggunakan protokol yang lebih lama dan tidak direkomendasikan seperti SSL 3.0 atau TLS 1.0. Sangat disarankan agar Anda meningkatkan ke versi .NET Framework yang lebih baru seperti .NET Framework 4.6 atau mengatur kunci registri yang sesuai untuk 'UseStrongCrypto'.

Pengujian dengan TLS 1.2+

Mengikuti perbaikan yang direkomendasikan di bagian di atas, produk harus diuji regresi untuk kesalahan negosiasi protokol dan kompatibilitas dengan sistem operasi lain di perusahaan Anda.

  • Masalah paling umum dalam pengujian regresi ini adalah kegagalan negosiasi TLS karena upaya koneksi klien dari sistem operasi atau browser yang tidak mendukung TLS 1.2.

    • Misalnya, klien Vista akan gagal menegosiasikan TLS dengan server yang dikonfigurasi untuk TLS 1.2+ karena versi TLS maksimum Vista yang didukung adalah 1.0. Klien tersebut harus ditingkatkan atau dinonaktifkan di lingkungan TLS 1.2+.
  • Produk yang menggunakan autentikasi TLS Timah berbasis sertifikat mungkin memerlukan pengujian regresi tambahan karena kode pemilihan sertifikat yang terkait dengan TLS 1.0 kurang ekspresif daripada yang untuk TLS 1.2.

    • Jika produk menegosiasikan MTLS dengan sertifikat dari lokasi non-standar (di luar penyimpanan sertifikat bernama standar di Windows), kode tersebut mungkin perlu diperbarui untuk memastikan sertifikat diperoleh dengan benar.
  • Interdependensi layanan harus ditinjau untuk titik masalah.

    • Setiap layanan yang beroperasi denganlayanan pihak ketiga harus melakukan pengujian interop tambahan dengan pihak ketiga tersebut.

    • Setiap aplikasi non-Windows atau sistem operasi server yang digunakan memerlukan investigasi / konfirmasi bahwa mereka dapat mendukung TLS 1.2. Pemindaian adalah cara term mudah untuk menentukan hal ini.

Cetak biru sederhana untuk menguji perubahan ini dalam layanan online terdiri dari hal-hal berikut:

  1. Lakukan pemindaian sistem lingkungan produksi untuk mengidentifikasi sistem operasi yang tidak mendukung TLS 1.2.

  2. Pindai kode sumber dan file konfigurasi layanan online untuk TLS yang dikodekan secara permanen seperti yang dijelaskan dalam "Menemukan dan memperbaiki dependensi TLS 1.0 dalam kode"

  3. Perbarui/kompilasi ulang aplikasi sesuai kebutuhan:

    1. Aplikasi terkelola

      1. Bangun ulang terhadap versi .NET Framework terbaru.

      2. Verifikasi penggunaan enumerasi SSLProtocols diatur ke SSLProtocols.None untuk menggunakan pengaturan default OS.

    2. Aplikasi WinHTTP – membangun kembali dengan WinHttpSetOption untuk mendukung TLS 1.2

  4. Mulai pengujian di lingkungan pra-produksi atau penahapan dengan semua protokol keamanan yang lebih lama dari TLS 1.2 dinonaktifkan melalui registri.

  5. Perbaiki instans hardcoding TLS yang tersisa seperti yang ditemui dalam pengujian. Sebarkan ulang perangkat lunak dan lakukan uji coba regresi baru.

Memberi tahu mitra tentang rencana penghentian TLS 1.0 Anda

Setelah hardcoding TLS ditangani dan pembaruan kerangka kerja sistem operasi/pengembangan selesai, jika Anda memilih untuk menghentikan TLS 1.0, anda perlu berkoordinasi dengan pelanggan dan mitra:

  • Pencapaian mitra awal/pelanggan sangat penting untuk peluncuran penghentian TLS 1.0 yang sukses. Minimal ini harus terdiri dari posting blog, laporan resmi, atau konten web lainnya.

  • Mitra masing-masing perlu mengevaluasi kesiapan TLS 1.2 mereka sendiri melalui sistem operasi/pemindaian kode/inisiatif pengujian regresi yang dijelaskan di bagian di atas.

Kesimpulan

Menghapus dependensi TLS 1.0 adalah masalah rumit untuk mendorong end to end. Microsoft dan mitra industri mengambil tindakan ini hari ini untuk memastikan seluruh tumpukan produk kami lebih aman secara default, dari komponen OS dan kerangka kerja pengembangan hingga aplikasi/layanan yang dibangun di atasnya. Mengikuti rekomendasi yang dibuat dalam dokumen ini akan membantu perusahaan Anda membuat bagan kursus yang tepat dan mengetahui tantangan apa yang diharapkan. Ini juga akan membantu pelanggan Anda sendiri menjadi lebih siap untuk transisi.

Lampiran A: Simulasi Jabat Tangan untuk berbagai klien yang terhubung ke www.microsoft.com, sopan SSLLabs.com

Hasil Simulasi Jabat Tangan

Lampiran B: Menghentikan TLS 1.0/1.1 saat mempertahankan Mode FIPS

Ikuti langkah-langkah di bawah ini jika jaringan Anda memerlukan Mode FIPS tetapi Anda juga ingin menghentikan TLS 1.0/1.1:

  1. Konfigurasikan versi TLS melalui registri, dengan mengatur "Diaktifkan" ke nol untuk versi TLS yang tidak diinginkan.

  2. Nonaktifkan Kurva 25519 (hanya Server 2016) melalui Kebijakan Grup.

  3. Nonaktifkan suite sandi apa pun menggunakan algoritma yang tidak diizinkan oleh publikasi FIPS yang relevan. Untuk Server 2016 (dengan asumsi pengaturan default berlaku) ini berarti menonaktifkan cipher RC4, PSK, dan NULL.

Kontributor/Terima kasih untuk

Tandai Cartwright
Bryan Sullivan
Hutan Patrick
Michael Scovetta
Beras Tony
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrei Popov
Michiko Pendek
Justin Burke
Gov Maharaj
Brad Turner
Sean Stevenson