TLS 1.0 Sorununu Çözme, 2. Sürüm

Bu belgede, Microsoft işletim sistemlerinin üzerinde oluşturulan yazılımlarda Aktarım Katmanı Güvenliği (TLS) protokolü sürüm 1.0 bağımlılıklarını hızlı bir şekilde tanımlama ve kaldırma ile ilgili yönergeler sunulmakta, ardından kendi müşterilerinizi ve çevrimiçi hizmetlerinizi korumanız için Microsoft tarafından sunulan ürün değişiklikleri ile yeni özelliklerin ayrıntıları sağlanmaktadır. TLS 1.2 ve üstü ağ ortamına geçiş planı oluşturmak için başlangıç noktası olarak kullanılmak üzere tasarlanmıştır. Burada ele alınan çözümler Microsoft dışı işletim sistemlerinde veya şifreleme kitaplıklarında da TLS 1.0 kullanımını kaldırmanıza yardımcı olabilir ancak bunlar bu belgenin odağında değildir.

TLS 1.0, bilgisayar ağları üzerinde şifreleme kanalları oluşturmak için ilk olarak 1999’da tanımlanan bir güvenlik protokolüdür. Microsoft bu protokolü Windows XP/Server 2003’ten bu yana desteklemektedir. Artık modern işletim sistemleri tarafından kullanılan varsayılan güvenlik protokolü olmasa da, geriye doğru uyumluluk için TLS 1.0 desteklenmeye devam edilmektedir. TLS 1.0’daki yeni güvenlik açıklarına ek olarak gelişen düzenleme gereksinimleri, şirketleri TLS 1.0’ı tamamen devre dışı bırakmaya teşvik ediyor.

Microsoft, müşterilerin ortamlarında TLS 1.0 bağımlılıklarını kaldırarak ve mümkün olduğunda işletim sistemi düzeyinde TLS 1.0’ı devre dışı bırakarak bu sorunun önüne geçmelerini önerir. TLS 1.0’ın yazılım sektörü tarafından desteklendiği sürenin uzunluğu göz önünde bulundurulduğunda, TLS 1.0’ı kullanımdan kaldırmaya yönelik herhangi bir planın aşağıdakileri içermesi önemle önerilir:

  • TLS 1.0 veya daha eski güvenlik protokollerinin sabit kodlanmış örneklerini bulmak/onarmak için kod analizi.

  • TLS 1.0 veya daha eski protokolleri kullanan işletim sistemlerini belirlemek için ağ uç noktası tarama ve trafik analizi.

  • TLS 1.0 devre dışı olarak tüm uygulama yığınınıza ilişkin tam gerileme testi.

  • Eski işletim sistemlerini ve geliştirme kitaplıklarını/çerçevelerini, varsayılan olarak TLS 1.2 ile anlaşabilen sürümlere geçirme.

  • Herhangi bir TLS 1.2 destek sorununu belirlemek için işletmenizde kullanılan işletim sistemleri genelinde uyumluluk testi.

  • İş ortaklarınıza ve müşterilerinize TLS 1.0’ı kullanımdan kaldıracağınızı bildirmek için koordinasyon.

  • TLS 1.0 devre dışı bırakıldıktan sonra hangi istemcilerin sunucularınıza artık bağlanamayabileceğini anlama.

Bu belgenin amacı, kendi müşterilerinizin bu değişiklikten nasıl etkilenebileceğine yönelik görünürlüğü artırırken aynı zamanda TLS 1.0’ı devre dışı bırakmaya yönelik teknik engellerin ortadan kaldırılmasına yardımcı olabilecek öneriler sağlamaktır. Bu tür araştırmaları tamamlamak, TLS 1.0’daki bir sonraki güvenlik açığının işletme üzerindeki etkisini azaltmaya yardımcı olabilir. Bu belgenin amaçları doğrultusunda TLS 1.0’ın kullanımdan kaldırılmasına yönelik başvurular TLS 1.1’i de içerir.

Kurumsal yazılım geliştiricilerinin, güvenlik protokolü ile ilgili olarak gelecekte karşılaşılabilecek tehditlerle başa çıkabilmek için daha güvenli ve çevik çözümler (Şifreleme Çevikliği olarak da bilinir) benimsemeleri stratejik bir gereksinimdir. Bu belgede, TLS sabit kodlamasının ortadan kaldırılmasına yönelik çevik çözümler önerilse de, daha geniş Şifreleme Çevikliği çözümleri bu belgenin kapsamının dışındadır.

Microsoft’un TLS 1.0 uygulamasının geçerli durumu

Microsoft’un TLS 1.0 uygulamasında bilinen güvenlik açıkları yoktur. Gelecekteki protokol sürümü düşürme saldırıları ve Microsoft’un uygulamasına özgü olmayan diğer olası TLS 1.0 güvenlik açıkları nedeniyle, mümkün olduğunda TLS 1.2’den daha eski (TLS 1.1/1.0/ SSLv3/SSLv2) tüm güvenlik protokollerine yönelik bağımlılıkların kaldırılması önerilir.

Geliştiriciler ve sistem yöneticileri, TLS 1.2 ve sonraki sürümlere geçişe yönelik planlama yaparken çalışanları ve iş ortakları tarafından geliştirilmiş uygulamalarda protokol sürümünün sabit olarak kodlanmış olabileceğini bilmelidir. Burada sabit kodlama, TLS sürümünün yeni sürümlerden daha az güvenli eski bir sürüme sabitlendiği anlamına gelir. Sabit kodlanmış sürümden daha yeni olan TLS sürümleri, söz konusu program değiştirilmeksizin kullanılamaz. Bu sorun sınıfı, kaynak kodu değişiklikleri ve yazılım güncelleştirme dağıtımı olmadan çözülemez. Birçok farklı tarayıcı ve işletim sistemi farklı düzeylerde TLS desteği sunduğundan, protokol sürümünün sabit olarak kodlanması geçmişte test ve desteklenebilirlik açısından oldukça yaygındı.

Windows'da DESTEKLENEN TLS sürümleri

Birçok işletim sistemi, güncel olmayan TLS sürümü varsayılanlarına veya hesaba katılması gereken destek üst sınırlarına sahiptir.

Şekil 1: İşletim Sistemi Sürümüne Göre Güvenlik Protokolü Desteği

Windows İşletim Sistemi SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3
Windows Vista Etkin Etkin Etkin Desteklenmiyor Desteklenmiyor Desteklenmiyor
Windows Server 2008 Etkin Etkin Etkin Devre dışı* Devre dışı* Desteklenmiyor
Windows 7 (WS2008 R2) Etkin Etkin Etkin Devre dışı* Devre dışı* Desteklenmiyor
Windows 8 (WS2012) Devre Dışı Etkin Etkin Etkin Etkin Desteklenmiyor
Windows 8.1 (WS2012 R2) Devre Dışı Etkin Etkin Etkin Etkin Desteklenmiyor
Windows 10 Devre Dışı Etkin Etkin Etkin Etkin Desteklenmiyor
Windows 11 Devre Dışı Etkin Etkin Etkin Etkin Etkin
Windows Server 2016 Desteklenmiyor Devre Dışı Etkin Etkin Etkin Desteklenmiyor
Windows Server 2016 Desteklenmiyor Devre Dışı Etkin Etkin Etkin Desteklenmiyor
Windows Server 2019 Desteklenmiyor Devre Dışı Etkin Etkin Etkin Desteklenmiyor
Windows Server 2019 GS sürümü Desteklenmiyor Devre Dışı Devre Dışı Devre Dışı Etkin Desteklenmiyor
Windows Server 2022 Desteklenmiyor Devre Dışı Devre Dışı Devre Dışı Etkin Etkin

Windows Server 2019 GS sürümü Microsoft SDL uyumlu, TLS 1.2 yalnızca kısıtlı bir şifre paketleri kümesiyle.

Windows Server 2022 sürümü Microsoft SDL uyumlu, TLS 1.2 ve TLS 1.3 yalnızca kısıtlı şifreleme paketleri kümesine sahiptir.

TLS 1.1/1.2, bu isteğe bağlı Windows Update paketi aracılığıyla Windows Server 2008'de etkinleştirilebilir.

IE/Edge’de TLS 1.0/1.1 sürümünü kullanım dışı bırakma hakkında daha fazla bilgi için bkz. Microsoft Edge ve Internet Explorer 11’de TLS bağlantılarını modernleştirme, Microsoft Edge’de site uyumluluğunu etkileyen yaklaşan değişiklikler ve Yeni Edge tarayıcısında TLS/1.0 ve TLS/1.1’i devre dışı bırakma

Çevrimiçi hizmetlerinize bağlanırken çeşitli istemciler tarafından hangi TLS sürümünün istendiğini belirlemenin hızlı bir yolu, Qualys SSL Labs'teki El Sıkışma Simülasyonuna başvurmaktır. Bu simülasyon, üreticiler genelinde istemci işletim sistemi/tarayıcı kombinasyonlarını kapsar. www.microsoft.com’a bağlanırken simülasyon uygulanmış çeşitli işletim sistemi/tarayıcı birleşimleri tarafından üzerinde anlaşılan TLS protokol sürümlerini gösteren ayrıntılı bir örnek için bu belgenin sonundaki Ek A’ya bakın.

Eksikleri olsa da, kurumunuz, müşterileriniz ve iş ortaklarınız (son ikisine ulaşarak/iletişim yoluyla veya en azından HTTP Kullanıcı Aracısı dize koleksiyonu aracılığıyla) tarafından kullanılan bir işletim sistemi envanterinin gerçekleştirilmesi önemle önerilir. Bu envanter, kurumsal ağ ucunuzdaki trafik analizi ile daha ileri düzeyde desteklenebilir. Böyle bir durumda trafik analizi, hizmetlerinize bağlanan müşteriler/iş ortakları tarafından başarılı bir şekilde üzerinde anlaşılan TLS sürümlerini belirler, ancak trafiğin kendisi şifreli olarak kalır.

Microsoft’un TLS 1.0 bağımlılıklarını ortadan kaldırmaya yönelik Mühendislik Geliştirmeleri

Bu belgenin v1 sürümünden itibaren Microsoft, TLS 1.0’ı kullanımdan kaldırmayı destekleyen birkaç yazılım güncelleştirmesi ve yeni özellik göndermiştir. Bu modüller şunlardır:

  • İstemci IP/kullanıcı aracısı dizesi, hizmet URI’si, TLS protokol sürümü ve şifre paketi arasında bağıntı oluşturmak için IIS özel günlüğe kaydetme.

    • Bu günlüğe kaydetme sayesinde, yöneticiler müşterilerin daha zayıf TLS kullanımlarının miktarını belirleyebilir.
  • SecureScore: Office 365 kiracı yöneticilerinin kendi zayıf TLS kullanımını belirlemesine yardımcı olmak için SecureScore portalı, Ekim 2018’de Office 365’te TLS 1.0 desteği sona ererken bu bilgileri paylaşmak için oluşturulmuştur.

    • Bu portal Office 365 kiracı yöneticilerine, TLS 1.0 bağımlılıklarından haberdar olmayabilecek kendi müşterilerine ulaşmaları için gereken değerli bilgileri sağlar.

    • Daha fazla bilgi için https://securescore.microsoft.com/ adresini ziyaret edin.

  • Uygulama düzeyinde sabit kodlamayı ortadan kaldırmak ve çerçeve tarafından devralınan TLS 1.0 bağımlılıklarını önlemek için .NET Framework güncelleştirmeleri.

  • Müşterilerin zayıf TLS'ye yönelik .Net bağımlılıklarını tanımlamalarına ve ortadan kaldırmalarına yardımcı olmak için Geliştirici Kılavuzu ve yazılım güncelleştirmeleri yayımlandı: .NET Framework ile Aktarım Katmanı Güvenliği (TLS) en iyi yöntemleri

    • Bilgi: TLS 1.2'yi desteklemek için .NET 4.5 veya üzerini hedefleyen tüm uygulamaların değiştirilmesi gerekecek.
  • TLS 1.2, müşterilere eski yükümlülüklerinde yardımcı olmak için Windows Server 2008 SP2 ve XP POSReady 2009’a geriye yönelik olarak aktarılmıştır.

  • 2019 başında daha fazla duyuru yayımlanacak ve bu belgenin sonraki güncelleştirmelerinde iletilecektir.

Koddaki TLS 1.0 bağımlılıklarını bulma ve düzeltme

Windows işletim sistemi tarafından sağlanan şifreleme kitaplıklarını ve güvenlik protokollerini kullanan ürünler için aşağıdaki adımlar, uygulamalarınızdaki sabit kodlanmış TLS 1.0 kullanımlarını belirlemenize yardımcı olur:

  1. Tüm AcquireCredentialsHandle() örneklerini belirleyin. Bu, gözden geçirenlerin TLS’nin sabit kodlandığı kod bloklarına yaklaşmasına yardımcı olur.

  2. Sabit kodlanmış TLS için SecPkgContext_SupportedProtocols ve SecPkgContext_Bağlan ionInfo yapılarının örneklerini gözden geçirin.

  3. Yerel kodda, sıfır olmayan grbitEnabledProtocols atamalarını sıfır olarak ayarlayın. Bu, işletim sisteminin varsayılan TLS sürümünü kullanmasına izin verir.

  4. Bu belgede TLS 1.0/1.1’i açıkça devre dışı bırakmak için gereken ayarlarla çakışma olabileceğinden, eğer etkinse FIPS Modunu devre dışı bırakın. Daha fazla bilgi için bkz. Ek B.

  5. Server 2012 veya daha eski sürümlerde barındırılan WinHTTP kullanan tüm uygulamaları güncelleştirin ve yeniden derleyin.

    1. Yönetilen uygulamalar: En son .NET Framework sürümüne göre yeniden derleyin ve hedefleyin

    2. Uygulamalar WinHttpSetOption aracılığıyla TLS 1.2’yi desteklemek için kod eklemelidir

  6. Tüm açıkları kapatmak için, kaynak kodunu ve çevrimiçi hizmet yapılandırma dosyalarını tarayarak TLS sabit kodlamasında yaygın olarak kullanılan listelenmiş tür değerlerine karşılık gelen aşağıdaki desenleri belirleyin:

    1. SecurityProtocolType

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

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL veya PROTOCOL_TLS

Yukarıdaki tüm durumlarda önerilen çözüm, sabit kodlanmış protokol sürümü seçimini kaldırmak ve işletim sistemi varsayılanını kullanmaktır. DevSkim kullanıyorsanız, kendi kodunuzla kullanabileceğiniz yukarıdaki denetimleri kapsayan kuralları görmek için buraya tıklayın.

Windows PowerShell, kullanılabilir bir protokol olarak TLS 1.2’yi içermeyen .NET Framework 4.5 sürümünü kullanır. Bu sorunu geçici olarak çözmek için iki çözüm mevcuttur:

  1. Söz konusu betiği aşağıdakileri içerecek şekilde değiştirin:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Bir .NET uygulamasından TLS 1.2 bağlantısı yapması gereken herhangi bir makineye sistem genelinde bir kayıt defteri anahtarı (ör. grup ilkesi aracılığıyla) ekleyin. Bu, .NET’in kullanılabilir bir protokol olarak TLS 1.2’yi ekleyen "Sistem Varsayılanı" TLS sürümlerini kullanmasını sağlar VE betiklerin, işletim sistemi bunları desteklediğinde gelecekteki TLS Sürümlerini kullanmasına olanak sağlar. (ör. TLS 1.3)

    reg add 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

Çözüm (1) ve (2) birbirini dışlar, yani birlikte uygulanmamalıdır.

En son .NET Framework sürümünü kullanarak yönetilen uygulamaları yeniden oluşturma/hedefleme

4.7’den önceki .NET Framework sürümlerini kullanan uygulamaların, temel alınan işletim sistemi varsayılanlarından bağımsız olarak desteği TLS 1.0 ile sınırlayan kısıtlamaları olabilir. Daha fazla bilgi için aşağıdaki diyagrama ve .NET Framework ile Aktarım Katmanı Güvenliği (TLS) en iyi yöntemlerine bakın.

Yönetilen uygulamaları yeniden oluşturma

SystemDefaultTLSVersion, TLS sürümlerinin uygulama düzeyi hedeflemesine göre önceliklidir. Önerilen en iyi deneyim, her zaman işletim sistemi varsayılan TLS sürümünü kullanmaktır. Bu ayrıca, uygulamalarınızın gelecekteki TLS 1.3 desteğinden yararlanmasını sağlayan tek şifreleme çevik çözümüdür.

4.5.2 veya 3.5 gibi daha eski .NET Framework sürümlerini hedefliyorsanız, uygulamanız varsayılan olarak SSL 3.0 veya TLS 1.0 gibi, önerilmeyen daha eski protokolleri kullanır. .NET Framework 4.6 gibi daha yeni .NET Framework sürümlerine yükseltmeniz veya 'UseStrongCrypto' için uygun kayıt defteri anahtarlarını ayarlamanız önemle önerilir.

TLS 1.2+ ile test etme

Yukarıdaki bölümde önerilen düzeltmelerden sonra, ürünlerin protokol anlaşması hataları ve kurumunuzdaki diğer işletim sistemleriyle uyumluluk açısından gerileme testinden geçirilmesi gerekir.

  • Bu gerileme testinde en yaygın sorun, TLS 1.2’i desteklemeyen bir işletim sistemi veya tarayıcıdan istemci bağlantısı girişimi nedeniyle bir TLS anlaşma hatası olmasıdır.

    • Örneğin, Vista istemcisinin desteklenen en yüksek TLS sürümü 1.0 olduğundan, bir Vista istemcisi TLS 1.2+ için yapılandırılmış bir sunucu ile TLS için anlaşamaz. Bu istemci, TLS 1.2+ ortamında yükseltilmelidir veya kullanımdan kaldırılmalıdır.
  • Sertifika tabanlı Karşılıklı TLS kimlik doğrulamasını kullanan ürünler, TLS 1.0 ile ilişkili sertifika seçme kodu, TLS 1.2’den daha az ifadeye sahip olduğundan daha fazla gerileme testi gerektirebilir.

    • Bir ürün standart olmayan bir konumdan (Windows’da standart adlandırılmış sertifika depoları dışından) bir sertifika ile MTLS için anlaşma yapıyorsa, sertifikanın doğru alındığından emin olmak için bu kodun güncelleştirilmesi gerekebilir.
  • Hizmet bağımlılıkları, sorunlu noktalar bakımından incelenmelidir.

    • 3. taraf hizmetleriyle birlikte çalışan tüm hizmetler, bu 3. taraflar ile ek birlikte çalışma testi yürütmelidir.

    • Kullanımdaki tüm Windows dışı uygulamaların veya sunucu işletim sistemlerinin TLS 1.2’yi destekleyebileceğine yönelik araştırma/onay gerekir. Tarama, bunu belirlemenin en kolay yoludur.

Bu değişiklikleri çevrimiçi bir hizmette test etmek için basit bir şema aşağıdakilerden oluşur:

  1. TLS 1.2’yi desteklemeyen işletim sistemlerini belirlemek için üretim ortamı sistemleri taraması gerçekleştirin.

  2. "Koddaki TLS 1.0 bağımlılıklarını bulma ve düzeltme" bölümünde açıklandığı gibi, sabit kodlanmış TLS için kaynak kodu ve çevrimiçi hizmet yapılandırma dosyalarını tarayın

  3. Uygulamaları gerektiği şekilde güncelleştirin/yeniden derleyin:

    1. Yönetilen uygulamalar

      1. En son .NET Framework sürüme göre yeniden derleyin.

      2. Varsayılan işletim sistemi ayarlarını kullanmak için SSLProtocols sabit listesinin tüm kullanımlarının SSLProtocols.None olarak ayarlandığını doğrulayın.

    2. WinHTTP uygulamaları: TLS 1.2’yi destekleyecek şekilde WinHttpSetOption ile yeniden derleyin

  4. Kayıt defteri aracılığıyla TLS 1.2’den eski olan tüm güvenlik protokollerini devre dışı bırakarak bir ön üretim veya hazırlama ortamında teste başlayın.

  5. Test sırasında karşılaşılan tüm TLS sabit kodlaması örneklerini düzeltin. Yazılımı yeniden dağıtın ve yeni bir gerileme testi çalıştırması gerçekleştirin.

TLS 1.0’ı kullanımdan kaldırma planlarınızı iş ortaklarına bildirme

TLS sabit kodlaması giderildikten ve işletim sistemi/geliştirme çerçevesi güncelleştirmeleri tamamlandıktan sonra, TLS 1.0’ı kullanımdan kaldırmayı tercih ederseniz, bu işlem müşteriler ve iş ortakları ile koordine edilmelidir:

  • İş ortaklarına/müşterilere erkenden ulaşmak, TLS 1.0’ı kullanımdan kaldırma uygulamasının başarılı olması için gereklidir. Bu süreçte en azından blog gönderileri, teknik incelemeler veya diğer web içerikleri kullanılmalıdır.

  • İş ortaklarının, yukarıdaki bölümlerde açıklanan işletim sistemi/kod tarama/gerileme testi girişimleri aracılığıyla kendi TLS 1.2 hazırlıklarını değerlendirmesi gerekir.

Sonuç

TLS 1.0 bağımlılıklarının kaldırılması işleminin uçtan uca gerçekleştirilmesi karmaşık olabilir. Microsoft ve sektör iş ortakları, hemen harekete geçerek işletim sistemi bileşenlerinden ve geliştirme çerçevelerimizden, bunların üzerine yerleştirilmiş uygulamalara/hizmetlere kadar tüm ürün yığınımızın varsayılan olarak daha güvenli olmasını sağlamak amacıyla bu konuda çalışıyor. Bu belgede yapılan önerileri izlemek, kurumunuzun doğru yolu belirlemesine yardımcı olur ve karşılaşabileceğiniz zorluklar hakkında bilgi sağlar. Ayrıca, kendi müşterilerinizin geçişe daha iyi hazırlanmasına yardımcı olur.

Ek A: www.microsoft.com, nezaket SSLLabs.com bağlanan çeşitli istemciler için el sıkışma Benzetimi

El Sıkışma Simülasyonu sonuçları

Ek B: FIPS Modu korunurken TLS 1.0/1.1 kullanımdan kaldırılıyor

Ağınız FIPS Modu gerektiriyorsa, ancak TLS 1.0/1.1 sürümünü kullanımdan kaldırmak istiyorsanız aşağıdaki adımları izleyin:

  1. İstenmeyen TLS sürümleri için "Etkin" ayarını sıfıra ayarlayarak, kayıt defteri aracılığıyla TLS sürümlerini yapılandırın.

  2. Grup İlkesi üzerinden 25519 Eğrisini devre dışı bırakın (yalnızca Server 2016).

  3. İlgili FIPS yayını tarafından izin verilmeyen algoritmaları kullanan şifre paketlerini devre dışı bırakın. Server 2016 için (varsayılan ayarların geçerli olduğu düşünülerek), bu durum RC4, PSK ve NULL şifrelemelerinin devre dışı bırakılacağı anlamına gelir.

Katkıda Bulunanlar/Teşekkürler

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