🔐
Dijital Kimlik Lab PKI & Siber Güvenlik Mimarisi Portalı

GİB merkez sistemlerinde SSL/TLS versiyon güncellemeleri (örn. TLS 1.2 zorunluluğu) eski .NET uygulamalarını nasıl etkiler?

Gelir İdaresi Başkanlığı (GİB) merkez sistemleri, siber güvenlik iyileştirmeleri kapsamında eski TLS protokollerine (TLS 1.0 ve 1.1) desteği kesti ve tamamen TLS 1.2 veya TLS 1.3 zorunluluğuna geçti. Bizim e-fatura modülümüz eski nesil bir .NET Framework (örneğin 4.0 veya 4.5) üzerinde koşuyor. GİB'in bu güncellemesi sonrası fatura gönderim ve alım web servislerinde aniden 'The request was aborted: Could not create SSL/TLS secure channel' hatası almaya başladık. Bu durumun arka planındaki şifreleme uyuşmazlığı tam olarak nedir ve kod tabanını baştan yazmadan veya altyapıyı tamamen yenilemeden nasıl bir çözüm bulabiliriz?
Durum: Çözüldü Kategori: Soru-Cevap

1 Cevap

✓

Bu sorun, eski .NET Framework sürümleriyle modern güvenlik standartları arasındaki protokol uyumsuzluğundan kaynaklanmaktadır ve GİB gibi kamu kurumlarının sistemlerini güncel zafiyetlerden (örneğin POODLE, BEAST saldırıları) korumak için attığı standart ve zorunlu bir adımın sonucudur.

Gelir İdaresi Başkanlığı, iletişim güvenliğini sağlamak için artık sadece TLS 1.2 ve üzeri kriptografik protokolleri kabul etmektedir. .NET Framework 4.0 veya 4.5 gibi eski sürümler ise varsayılan (default) olarak TLS 1.0 veya SSL 3.0 gibi artık zafiyetli olduğu kanıtlanmış protokolleri kullanarak dış bağlantı (handshake) kurmaya çalışır. İşletim sistemi TLS 1.2'yi desteklese bile, .NET uygulamasının içindeki ServicePointManager.SecurityProtocol ayarı modern standartlara göre yapılandırılmadığı için GİB'in sunucuları bu zayıf bağlantı taleplerini reddeder (Handshake failure), siz de bahsettiğiniz 'Could not create SSL/TLS secure channel' hatasını alırsınız.

Bunu çözmek için uygulamanızın kodlarını tamamen baştan yazmanıza gerek yoktur, ancak API güvenlik katmanlarında ve uygulama yapılandırmasında birkaç kritik müdahale yapmanız şarttır. Birinci yöntem, eğer kaynak kodlarına erişiminiz varsa, uygulamanızın web isteklerini (HTTP request) oluşturduğu kod bloğunun en başına şu satırı eklemektir: ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;. Buradaki 3072 değeri, .NET'in eski sürümlerinde enum (sabit) olarak tanımlı olmasa bile TLS 1.2 protokolünü temsil eder ve uygulamanızı TLS 1.2 kullanmaya zorlar. Eğer kod müdahalesi şansınız yoksa, Windows Registry (Kayıt Defteri) üzerinden güçlü kriptografiyi sistem genelinde zorlayabilirsiniz. SchUseStrongCrypto kayıt defteri anahtarlarını (Hem 32-bit hem de 64-bit yolları için) aktif hale getirerek, .NET tabanlı uygulamaların işletim sisteminin desteklediği en yüksek güvenli protokolü (örneğin TLS 1.2) kullanmasını sağlayabilirsiniz. Ayrıca RDP veya diğer ağ olaylarını incelediğinizde (Event Viewer'da SChannel kaynaklı Event ID 36871 hataları), bu tür protokol uyuşmazlıklarının loglandığını net bir şekilde görebilirsiniz. Uzun vadede ise, adli bilişim incelemelerinde veya sızma testlerinde eski .NET versiyonlarının başka memory corruption veya deserialization zafiyetleri barındırma ihtimaline karşı sistemlerinizi güncel framework sürümlerine taşımanız kesinlikle önerilir.

Yanıtlayan
SOC Analisti Berke K.