Memecahkan Masalah TLS 1.0, Edisi ke-2

Oleh Andrew Marshall
Manajer Program Keamanan Utama
Microsoft Corporation

Ringkasan Eksekutif

Dokumen ini menyajikan panduan terbaru tentang mengidentifikasi dan menghapus protokol Transport Layer Security (TLS) versi 1.0 dengan cepat dependensi 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 dalam 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 OS 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 rencana penghentian TLS 1.0 mencakup hal-hal berikut:

  • Analisis kode untuk menemukan/memperbaiki instans yang dikodekan secara permanen dari 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 investigasi tersebut dapat membantu mengurangi dampak bisnis dari kerentanan keamanan berikutnya di TLS 1.0. Untuk keperluan dokumen ini, referensi ke 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 Kelincahan Kripto) untuk menangani kompromi protokol keamanan di masa depan. Meskipun dokumen ini mengusulkan solusi tangkas untuk penghapusan 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.

Memastikan dukungan untuk TLS 1.2 di seluruh sistem operasi yang diterapkan

Banyak sistem operasi telah kedaluarsa versi TLS default atau mendukung langit-langit yang perlu diperhitungkan. Penggunaan Windows 8/Server 2012 atau yang lebih baru berarti bahwa TLS 1.2 akan menjadi versi protokol keamanan default:

Gambar 1: Dukungan Protokol Keamanan berdasarkan Versi OS

OS Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2
Windows Vista Aktif Aktif Default Tidak Didukung Tidak Didukung
Windows Server 2008 Aktif Aktif Default Dinonaktifkan* Dinonaktifkan*
Windows 7 (WS2008 R2) Aktif Aktif Default Dinonaktifkan* Dinonaktifkan*
Windows 8 (WS2012) Dinonaktifkan Aktif Aktif Aktif Default
Windows 8.1 (WS2012 R2) Dinonaktifkan Aktif Aktif Aktif Default
Windows 10 Dinonaktifkan Aktif Aktif Aktif Default
Server Windows 2016 Tidak Didukung Dinonaktifkan Aktif Aktif Default

*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 Handshake 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 penjangkauan/komunikasi atau setidaknya pengumpulan string HTTP User-Agent). Inventori ini dapat dilengkapi 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 IP klien/string 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 membagikan 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 diwarisi kerangka kerja.

  • Panduan Pengembang dan pembaruan perangkat lunak telah dirilis untuk membantu pelanggan mengidentifikasi dan menghilangkan dependensi .Net pada TLS yang lemah: Praktik terbaik Keamanan Lapisan Transportasi (TLS) 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 dilakukan 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_ConnectionInfo untuk TLS yang dikodekan secara permanen.

  3. Dalam kode asli, atur penugasan 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 menangguhkan 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 add 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.

Rebuild managed applications

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 Timbal Balik berbasis sertifikat mungkin memerlukan pengujian regresi tambahan karena kode pemilihan sertifikat yang terkait dengan TLS 1.0 kurang ekspresif daripada 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 dengan layanan pihakketiga 3 harus melakukan pengujian interop tambahandengan 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 yang 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 saat ditemui dalam pengujian. Sebarkan ulang perangkat lunak dan lakukan uji 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 hari ini untuk memastikan seluruh tumpukan produk kami lebih aman secara default, mulai 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

Results of Handshake Simulation

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 Curve 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 kepada

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