Saya mencoba mengurangi kerentanan kami terhadap serangan Poodle SSL 3.0 Fallback . Admin kami telah mulai menonaktifkan SSL untuk mendukung TLS untuk koneksi masuk ke server kami. Dan kami juga menyarankan tim kami untuk menonaktifkan SSL di browser web mereka. Saya sekarang melihat basis kode .NET kami, yang memulai koneksi HTTPS dengan berbagai layanan melalui System.Net.HttpWebRequest . Saya yakin bahwa koneksi ini dapat rentan terhadap serangan MITM jika memungkinkan fallback dari TLS ke SSL. Inilah yang telah saya tentukan sejauh ini. Bisakah seseorang memeriksa ulang ini untuk memverifikasi bahwa saya benar? Kerentanan ini masih baru, jadi saya belum melihat panduan apa pun dari Microsoft tentang cara menguranginya di .NET:
Protokol yang diizinkan untuk kelas System.Net.Security.SslStream, yang menopang komunikasi aman di .NET, disetel secara global untuk setiap AppDomain melalui properti System.Net.ServicePointManager.SecurityProtocol .
Nilai default dari properti ini di .NET 4.5 adalah
Ssl3 | Tls
(walaupun saya tidak dapat menemukan dokumentasi untuk mendukungnya.) SecurityProtocolType adalah enum dengan atribut Flags, jadi itu sedikit OR dari dua nilai tersebut. Anda dapat memeriksanya di lingkungan Anda dengan baris kode ini:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Ini harus diubah menjadi hanya
Tls
, atau mungkinTls12
, sebelum Anda memulai koneksi apa pun di aplikasi Anda:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Penting: Karena properti mendukung beberapa bendera bitwise, saya berasumsi bahwa SslStream tidak akan otomatis mundur ke protokol tidak ditentukan lainnya selama jabat tangan. Jika tidak, apa gunanya mendukung banyak bendera?
Pembaruan pada TLS 1.0 vs 1.1 / 1.2:
Menurut pakar keamanan Google Adam Langley, TLS 1.0 kemudian ditemukan rentan terhadap POODLE jika tidak diterapkan dengan benar , jadi Anda harus mempertimbangkan untuk pindah ke TLS 1.2 secara eksklusif.
Pembaruan untuk .NET Framework 4.7 dan yang lebih baru:
Seperti disinggung oleh Prof Von Lemongargle di bawah ini, dimulai dengan versi 4.7 dari .NET Framework, tidak perlu menggunakan peretasan ini karena pengaturan default akan memungkinkan OS untuk memilih versi protokol TLS yang paling aman. Lihat praktik terbaik Transport Layer Security (TLS) dengan .NET Framework untuk informasi selengkapnya.
Jawaban:
Kami melakukan hal yang sama. Untuk hanya mendukung TLS 1.2 dan tanpa protokol SSL, Anda dapat melakukan ini:
SecurityProtocolType.Tls hanya TLS 1.0, tidak semua versi TLS.
Sebagai tambahan: Jika Anda ingin memeriksa bahwa situs Anda tidak mengizinkan koneksi SSL, Anda dapat melakukannya di sini (menurut saya ini tidak akan terpengaruh oleh pengaturan di atas, kami harus mengedit registri untuk memaksa IIS menggunakan TLS untuk koneksi masuk): https://www.ssllabs.com/ssltest/index.html
Untuk menonaktifkan SSL 2.0 dan 3.0 di IIS, lihat halaman ini: https://www.sslshopper.com/article-how-to-disable-ssl-2.0-in-iis-7.html
sumber
SecurityProtocolType.Tls11
danSecurityProtocolType.Tls12
nilai enum hanya tersedia di ASP.net 4.5 dan yang lebih baru. Tidak yakin apa yang harus kami lakukan untuk basis kode lama yang berjalan pada 2.0 jika TLS 1.0 melewati batas.Jawaban @Eddie Loeffen tampaknya menjadi jawaban paling populer untuk pertanyaan ini, tetapi memiliki beberapa efek jangka panjang yang buruk. Jika Anda meninjau halaman dokumentasi untuk System.Net.ServicePointManager.SecurityProtocol di sini , bagian komentar menyiratkan bahwa fase negosiasi seharusnya hanya membahas ini (dan memaksa protokol adalah praktik yang buruk karena di masa mendatang, TLS 1.2 akan dikompromikan juga). Namun, kami tidak akan mencari jawaban ini jika ya.
Meneliti, ternyata protokol negosiasi ALPN diperlukan untuk sampai ke TLS1.2 dalam fase negosiasi. Kami menganggapnya sebagai titik awal dan mencoba versi yang lebih baru dari kerangka .Net untuk melihat di mana dukungan dimulai. Kami menemukan bahwa .Net 4.5.2 tidak mendukung negosiasi ke TLS 1.2, tetapi .Net 4.6 mendukung.
Jadi, meskipun memaksa TLS1.2 akan menyelesaikan pekerjaan sekarang, saya sarankan Anda meningkatkan ke .Net 4.6 sebagai gantinya. Karena ini adalah masalah PCI DSS untuk Juni 2016, jendelanya pendek, tetapi kerangka kerja baru adalah jawaban yang lebih baik.
UPDATE: Bekerja dari komentar, saya membuat ini:
Untuk memvalidasi konsep, saya atau bersama-sama dengan SSL3 dan TLS1.2 dan menjalankan kode yang menargetkan server yang hanya mendukung TLS 1.0 dan TLS 1.2 (1.1 dinonaktifkan). Dengan protokol or'd, tampaknya terhubung dengan baik. Jika saya mengubah ke SSL3 dan TLS 1.1, itu gagal terhubung. Validasi saya menggunakan HttpWebRequest dari System.Net dan hanya memanggil GetResponse (). Misalnya, saya mencoba ini dan gagal:
sementara ini berhasil:
Ini memiliki keunggulan dibandingkan memaksa TLS 1.2 karena, jika kerangka kerja .Net ditingkatkan sehingga ada lebih banyak entri di Enum, mereka akan didukung oleh kode sebagaimana adanya. Ini memiliki kelemahan daripada hanya menggunakan .Net 4.6 di 4.6 menggunakan ALPN dan harus mendukung protokol baru jika tidak ada batasan yang ditentukan.
Sunting 29/4/2019 - Microsoft menerbitkan artikel ini Oktober lalu. Ini memiliki sinopsis yang cukup bagus dari rekomendasi mereka tentang bagaimana hal ini harus dilakukan dalam berbagai versi kerangka kerja .net.
sumber
@tokopedia
Pada bentuk jendela tersedia, di bagian atas put kelas
karena windows adalah single threaded, itu semua yang Anda butuhkan, jika itu adalah layanan yang Anda butuhkan untuk meletakkannya tepat di atas panggilan ke layanan (karena tidak ada yang tahu utas apa yang akan Anda gunakan).
juga dibutuhkan.
sumber
Jika Anda penasaran dengan protokol mana yang didukung .NET, Anda dapat mencoba HttpClient di https://www.howsmyssl.com/
Hasilnya memberatkan:
Seperti yang dijelaskan Eddie di atas, Anda dapat mengaktifkan protokol yang lebih baik secara manual:
Saya tidak tahu mengapa itu menggunakan protokol yang buruk di luar kotak. Tampaknya pilihan pengaturan yang buruk, sama saja dengan bug keamanan utama (saya yakin banyak aplikasi tidak mengubah default). Bagaimana kami dapat melaporkannya?
sumber
Saya harus memasukkan bilangan bulat yang setara untuk menyiasati fakta bahwa saya masih menggunakan .NET 4.0
sumber
Saya menemukan solusi paling sederhana adalah menambahkan dua entri registri sebagai berikut (jalankan ini di prompt perintah dengan hak istimewa admin):
Entri ini tampaknya mempengaruhi bagaimana .NET CLR memilih protokol saat membuat sambungan aman sebagai klien.
Ada informasi lebih lanjut tentang entri registri ini di sini:
https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2015/2960358#suggested-actions
Ini tidak hanya lebih sederhana, tetapi dengan asumsi itu berfungsi untuk kasus Anda, jauh lebih kuat daripada solusi berbasis kode, yang mengharuskan pengembang untuk melacak protokol dan pengembangan dan memperbarui semua kode yang relevan. Mudah-mudahan, perubahan lingkungan serupa dapat dibuat untuk TLS 1.3 dan seterusnya, selama .NET tetap cukup bodoh untuk tidak secara otomatis memilih protokol tertinggi yang tersedia.
CATATAN : Meskipun, menurut artikel di atas, ini hanya untuk menonaktifkan RC4, dan orang tidak akan berpikir ini akan mengubah apakah klien .NET diizinkan untuk menggunakan TLS1.2 + atau tidak, untuk beberapa alasan memang memiliki ini efek.
CATATAN : Seperti dicatat oleh @Jordan Rieger di komentar, ini bukan solusi untuk POODLE, karena tidak menonaktifkan protokol yang lebih lama a - ini hanya memungkinkan klien untuk bekerja dengan protokol yang lebih baru misalnya ketika server yang ditambal telah menonaktifkan yang lebih lama protokol. Namun, dengan serangan MITM, jelas server yang dikompromikan akan menawarkan klien protokol yang lebih lama, yang kemudian akan digunakan dengan senang hati oleh klien.
TODO : Coba nonaktifkan penggunaan sisi klien TLS1.0 dan TLS1.1 dengan entri registri ini, namun saya tidak tahu apakah pustaka klien .NET http menghormati pengaturan ini atau tidak:
https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-10
https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-11
sumber