Kısa Uzunluktaki Cipherlardan Kaynaklanan Zafiyetlerin Giderilmesi
Makaleme başlamadan önce bu makalenin hazırlanmasında bana yardımcı olan değerli arkadaşım Selin Sökücü’ ye teşekkür ediyorum.
SSL Secure Socket Layer Protokolü Netscape tarafından, internet üzerinde web sunucular ve tarayıcıların güvenli haberleşmeleri için geliştirilmiştir. Zaman içinde daha da geliştirierek TLS – Transport Layer Security olarak adlandırılmıştır. SSL Protokolü’nün ana hedefi kişisel gizlilik ve güvenilirlik sağlamaktır. Bu protokol ile istemci (client) ve sunucu (server) arasında trafik şifrelenir, şifreleme için cipher adı verilen anahtarlar kullanılır. Kısa uzunluktaki olan anahtarlarla (<128 bit) şifrelenmiş olan verilerin kırılıp okunabilmesi, daha uzun anahtarla şifrelenmiş olan verinin kırılıp okunmasından çok daha basittir. Güvenli veri iletişimi sağlamak için uzunluğu kısa anahtarların kullanılmaması gerekir. Yazımızda istemci ve sunucu tarafında düşük güvenlikli, uzunluğu kısa anahtarların kapatılmasını anlatılacaktır.
Makalemize başlamadan önce sizlere makale içerisinde geçecek olan bir takım terimlerin tanımlarını yapmak istiyorum.
Tanımlar;
Plaintext: Şifrelenmemiş asıl metin.
Ciphertext: Bir anahtarla şifrelenmiş metin.
Cipher: Şifreleme ve/veya şifre çözmede kullanılan anahtara Cipher denir. Cipher’lar birçok farklı şekilde kategorilere ayrılabilirler.
· Block Cipher: Şifreleme algoritmalarında kullanılan bir yöntem olan blok şifreleme, açık mesajın (plain text) belirli uzunluklarda bloklara bölünmesi ile çalışır.
· Stream Cipher: Bloklar halinde çalışmayıp, devam eden semboller üzerinde çalışan cipherlara stream ciphers denir.
Cipher’lar şifreleme anahtarlarının uzunluklarına göre üçe ayrılmaktadır.
· Düşük (Low): 128 bitten daha kısa olan cipherlardır.
· Orta (Medium): 128 bit uzunluğunda olan cipherlardır.
· Yüksek (High): 128 bitten daha uzun olan cipherlardır.
Anahtarlama yöntemleri ikiye ayrılır:
· Simetrik Anahtarlama (symmetric key algorithms): Şifrelemede ve şifre çözmede aynı anahtar kullanılır. Bu anahtarlama türünde, anahtar alıcı ve gönderici tarafından bilinmeli ve başka kimse tarafından bilinmemelidir.
· Asimetrik Anahtarlama (asymmetric key algorithms): Şifrelemede ve şifre çözmede farklı anahtar kullanılır. Bunlar public key (açık anahtar) ve private key (gizli-kapalı anahtar)’lerdir. Private key public keyden öğrenilemez ve böylece şifrelemenin de güvenliği sağlanmış olur.
Üçlü El Sıkışması (3-way-handshake): İstemci bilgisayarın HTTPS protokolü üzerinden sunucu sisteme bağlanması Üçlü Tokalaşma (3 way handshake) yöntemiyle gerçekleştirilmektedir. Buna göre İstemci bilgisayar bağlantı kurmak istediği sunucuya içinde kendini tanıtıcı bilgileri bulunduran bir SYN (Synchronize) paketi gönderir. Sunucu SYN paketini aldığında alındı onayı olan ACK (Acknowledgement) paketiyle birlikte kendini tanıtıcı bir SYN paketi gönderir. İstemci bilgisayarın sunucudan gelen SYN+ACK paketini aldığını son adımda göndereceği ACK paketiyle Üçlü Tokalaşma tamamlanır ve veri akışı başlar.
Şekil – 1
Network tarafında giden ve gelen paketleri incelemek için Wireshark yazılımını kullanacağız.( http://www.wireshark.org/download.html)
Wireshark programından üçlü el sıkışma paketlerini incelemek istersek:
1. adım olan SYN paketinin yollanması (istemci):
Şekil – 2
2. adım olan SYN-ACK paketinin yollanması (sunucu):
Şekil – 3
3. adım olan ACK paketinin yollanması (istemci):
Şekil – 4
Cipher Açıklaması:
Cipher’ların isimlerinin açıklamalarını gösteren tablo aşağıdaki gibidir.
Kx: Key Exchange Algorithm.
Au: Authentication Algorithm.
Enc: Encryption.
Mac: Message Authentication Code Algorithm; Mesajın bütünlüğünü ve değiştirilmediğini kontrol etmek için kullanılır. Bütünlük sayesinde mesaj üzerinde yapılan rastlantısal ve kasıtlı mesaj değişiklikleri algılanır. Mesajın değiştirilmemesi kontrolü sayesinde ise mesajı gönderen doğrulanmış olur.
Adı |
Protokol |
Kx |
Au |
Enc |
Bits |
Mac |
TLS_RSA_WITH_NULL_MD5 |
TLS |
RSA |
RSA |
NULL |
0 |
MD5 |
TLS_RSA_WITH_NULL_SHA |
TLS |
RSA |
RSA |
NULL |
0 |
SHA |
TLS_RSA_WITH_RC4_128_MD5 |
TLS |
RSA |
RSA |
RC4_128 |
128 |
MD5 |
TLS_RSA_WITH_RC4_128_SHA |
TLS |
RSA |
RSA |
RC4_128 |
128 |
SHA |
TLS_RSA_WITH_DES_CBC_SHA |
TLS |
RSA |
RSA |
DES_CBC |
56 |
SHA |
TLS_RSA_WITH_3DES_EDE_CBC_SHA |
TLS |
RSA |
RSA |
3DES_EDE_CBC |
168 |
SHA |
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA |
TLS |
DH |
DSS |
DES40_CBC |
40 |
SHA |
TLS_DH_DSS_WITH_DES_CBC_SHA |
TLS |
DH |
DSS |
DES_CBC |
56 |
SHA |
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA |
TLS |
DH |
DSS |
3DES_EDE_CBC |
168 |
SHA |
TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA |
TLS |
DH |
RSA |
DES40_CBC |
40 |
SHA |
TLS_DH_RSA_WITH_DES_CBC_SHA |
TLS |
DH |
RSA |
DES_CBC |
56 |
SHA |
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA |
TLS |
DH |
RSA |
3DES_EDE_CBC |
168 |
SHA |
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA |
TLS |
DHE |
DSS |
DES40_CBC |
40 |
SHA |
TLS_DHE_DSS_WITH_DES_CBC_SHA |
TLS |
DHE |
DSS |
DES_CBC |
56 |
SHA |
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
TLS |
DHE |
DSS |
3DES_EDE_CBC |
168 |
SHA |
TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA |
TLS |
DHE |
RSA |
DES40_CBC |
40 |
SHA |
TLS_DHE_RSA_WITH_DES_CBC_SHA |
TLS |
DHE |
RSA |
DES_CBC |
56 |
SHA |
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
TLS |
DHE |
RSA |
3DES_EDE_CBC |
168 |
SHA |
TLS_DH_Anon_EXPORT_WITH_RC4_40_MD5 |
TLS |
DH |
Anon |
RC4_40 |
40 |
MD5 |
TLS_DH_Anon_WITH_RC4_128_MD5 |
TLS |
DH |
Anon |
RC4_128 |
128 |
MD5 |
TLS_DH_Anon_EXPORT_WITH_DES40_CBC_SHA |
TLS |
DH |
Anon |
DES40_CBC |
40 |
SHA |
TLS_DH_Anon_WITH_DES_CBC_SHA |
TLS |
DH |
Anon |
DES_CBC |
56 |
SHA |
TLS_DH_Anon_WITH_3DES_EDE_CBC_SHA |
TLS |
DH |
Anon |
3DES_EDE_CBC |
168 |
SHA |
TLS_RSA_WITH_AES_128_CBC_SHA |
TLS |
RSA |
RSA |
AES_128_CBC |
128 |
SHA |
TLS_DH_DSS_WITH_AES_128_CBC_SHA |
TLS |
DH |
DSS |
AES_128_CBC |
128 |
SHA |
TLS_DH_RSA_WITH_AES_128_CBC_SHA |
TLS |
DH |
RSA |
AES_128_CBC |
128 |
SHA |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA |
TLS |
DHE |
DSS |
AES_128_CBC |
128 |
SHA |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA |
TLS |
DHE |
RSA |
AES_128_CBC |
128 |
SHA |
TLS_DH_Anon_WITH_AES_128_CBC_SHA |
TLS |
DH |
Anon |
AES_128_CBC |
128 |
SHA |
TLS_RSA_WITH_AES_256_CBC_SHA |
TLS |
RSA |
RSA |
AES_256_CBC |
256 |
SHA |
TLS_DH_DSS_WITH_AES_256_CBC_SHA |
TLS |
DH |
DSS |
AES_256_CBC |
256 |
SHA |
TLS_DH_RSA_WITH_AES_256_CBC_SHA |
TLS |
DH |
RSA |
AES_256_CBC |
256 |
SHA |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA |
TLS |
DHE |
DSS |
AES_256_CBC |
256 |
SHA |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
TLS |
DHE |
RSA |
AES_256_CBC |
256 |
SHA |
TLS_DH_Anon_WITH_AES_256_CBC_SHA |
TLS |
DH |
Anon |
AES_256_CBC |
256 |
SHA |
TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA |
TLS |
DHE |
DSS |
DES_CBC |
56 |
SHA |
TLS_DHE_DSS_WITH_RC4_128_SHA |
TLS |
DHE |
DSS |
RC4_128 |
128 |
SHA |
Client Tarafındaki Cipherların Ayarlanması:
SSL (Secure Sockets Layer) Transport katmanı için Uygulama katmanında, anahtar değişimi için asimetrik, gizlilik için simetrik şifreleme kullanan, network üzerindeki iletişim güvenliğini amaçlayan kriptografi protokolüdür. Network üzerinden gönderilen kişisel bilgilerin güvenliği sadece SSL’i aktif ederek sağlanamaz. SSL en az 3 protokol (SSLv2, SSLv3 ve TLSv1) ve farklı güçlerde şifreleme algoritmaları bulundurur. Bu şifreleme algoritmalarının bir kısmı bugün ciddi kullanımlar için yeterince güçlü değildir. SSL üçlü el sıkışması sırasında client ve server kullanılacak olan cipher konusunda pazarlık yaparlar. Client kendisinin kullanabildiği cipherların bir listesini server’a gönderir ve server da bu listeden kendisinin de kullanabildiği bir tanesini seçer ve client’a gönderir. Bir değişiklik yapılmadığı durumlarda düşük güvenlikli cipherların kullanımına imkan sağlanmış olabilir.
Cipher listesi paylaşımı ve tercih edilen cipher’ın wireshark sayesinde alınan ekran görüntüleri aşağıdaki gibidir.
1. adım, Client Hello ve Client Cipher Listesi
Şekil – 5
2. adım, Server Hello ve Tercih edilen Cipher Suit
Şekil – 6
Ve 3. Adım Client Key Exchange
Şekil – 7
Microsoft tabanlı sistemlerde, kullanılacak Cipherları schannel.dll ile kontrol edebiliriz. Schannel.dll, Internet Explorer 3.x ve 4.x için kullanılan ve 128-bit güçlü şifreleme sağlayan dynamic link library’dir.
Değişiklik yapılmadığı durumda, aşağıdaki tabloda gösterildiği şekilde cipher önceliği vardır:
Şekil – 8
Client tarafında zayıf cipher (< 128 bit) kullanılmasını engellemek için schannel.dll üzerinden değişiklik yapmamız gerekir. Schannel’da değişiklik yapmak için Registry Editor (regedit) çalıştırılarak
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL dalına gelinir.
Low Cipher’ların, Düşük güvenlikli Protokol ya da hash’lerin, kullanılmasını engellemek için, disable edilmesi istenilen dizinin Client dosyasının içerisine sağ tıklanarak yeni DWORD yaratılır, DWORD’ün adı Enabled olarak değiştirilir ve değeri 0x00000000 yapılır. Cipher enable edilmek isteniyorsa da DWORD değeri 0x00000001 yapılır.
Şekil – 9
Şekil – 10
Şekil – 11
Ayrıca, aynı işlem .reg dosyası hazırlayarak da yapılabilir. Bu sayede, hem değişikliklerden önceki durumların yedekleri alınabilir, hem de değişikliklerin tek tek yapmak yerine topluca yapılmasına olanak sağlanır.
Bunun için SCHANNEL’a sağ tıklanıp Export seçeneği seçilir. Dosya adı verildikten sonra kaydedilir. Yaratılan dosyaya sağ tıklanıp edit seçilirse, aşağıdaki gibi schannel’in içeriğinin ve durumlarının bulunduğu notepad sayfası açılır.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]
“EventLogging”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES 56/56]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\NULL]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 128/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 40/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 56/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 64/128]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168/168]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\PKCS]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
Burada kapatmak istediğimiz cipherların bir alt satırına “Enabled”=dword:00000000, açmak istediklerimize ise “Enabled”=dword:00000001 yazılır. Aşağıda, düşük güvenliği olan cipherları, 128 bit’den daha düşük olan cipherları kapattığımız reg dosyasının içeriği bulunmaktadır.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]
“EventLogging”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES 56/56]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\NULL]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 128/128]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 40/128]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 56/128]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 64/128]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168/168]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\PKCS]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Client]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Client]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Server]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
“Enabled”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
“Enabled”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
“Enabled”=dword:00000001
Kaydettikten sonra bu reg dosyasına çift tıklanarak ayarların registera yüklenmesi sağlanabilir. Değişikliklerin geçerli olabilmesi için bilgisayarın yeniden başlatılması gerekmektedir.
TLS1.0, SSL3.0 ve SSL2.0 enabled ve bütün cipherlar Enabled iken sunucuya önerilen cipher listesi Şekil- 12’te görülebilir.
Şekil- 12
Web server ssl2 hizmeti vermediginden dolayı bize TLS1.0 destegi saglayan cipherı destekledigini belirten mesajı Şekil – 13’de yolluyor.
Şekil – 13
Ve seçilen TLS_RSA_WITH_RC4_128_MD5 cipher ile güvenli iletişim başlıyor.
RemoveWeakCiphers.reg dosyası (yukarda oluşturduğumuz) çalıştırılarak Low cipher’ların (128 bitten düşük) kapatılması sağlanır.
Client’in yolladığı cipherlar listesi Şekil-14’te görülebilir.
Şekil-14
Trafiğin iletilmesinde seçilen cipher Şekil-15 ‘tedir.
Şekil – 15
Server Tarafındaki Cipherların Ayarlanması:
Client üzerinde nasıl daha güvenli cipher ayarlandığını inceledik. Aynı şekilde sunucu üzerinde de nasıl ayarlandığını inceleyelim.
Örnek olarak, Apache Web Server üzerinde yapılması gereken konfigürasyonlardan bahsediyor olacağız.
Apache Web Server üzerinden Low Cipherları disable ederek, Client gönderdiği cipher listesinde Low cipherlar olsa bile, bunlarla bağlanamaması sağlanabilir. Fakat cipher listesini güncellerken aklımızda bulunması gereken bir konu da Server ile Client arasında iletişimsizliğe sebep olabileceğimizdir. Client tarafında bulunan cipher listesinde Server tarafında belirtilmeyen cipherlar mevcut ise iletişim sağlanamaz.
<install_dir>\conf dizininin altında server.xml dosyası içerisinde yapılması gereken konfigürasyonlar:
Şekil – 16
İçerik olarak server tarafında hangi cipher desteklenmesi isteniyorsa server.xml’in içerisindeki ciphers kısmına ekleme veya çıkartma işlemi gerçekleştirilebilir. Server.xml dosyasındaki cipher adlarının yazım sırası, tercih sıralamasını etkilemez. Server.xml dosyasına hangi sıra ile yazılmış olurlarsa olsunlar, Şekil – 8’de verilen sıralamaya göre tercih edilirler.
Server.xml üzerinde aşağıdaki satırlar bulunarak gerekli düzenlemeler yapılır:
Şekil – 17
sslProtocol=”TLS” değeri sadece TLS üzerinden iletişime geçmesi için verilen değerdir. Buraya SSLv2 yazılırsa sadece SSLv2 üzerinden iletişime geçecektir. Buradaki değişiklik sadece Apache Web Server tarafında yapılmıştır. Bu durumda Client tarafından yollanan cipher listesinde sadece TLS desteği verilen cipherlar arası seçim yapılacaktır.
sslProtocol=”TLS“ ciphers=”SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA, SSL_DH_anon_WITH_RC4_128_MD5, TLS_DH_anon_WITH_AES_128_CBC_SHA, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA“ |
İstemci(client) sunucuya(server) https bağlantı isteği gönderdiğinde yollanan cipher listesi;
Şekil – 18
Server tarafından kabul edilen cipher ise,
Şekil – 19
Bir başka yöntem olarak server.xml dosyasını tercih edeceğimiz şekilde düzenleyebiliriz; kullanılmasını istediğimiz veya daha güvenli bir cipher var ise ya tek başına o cipher’ı server.xml’e koymamız gerekir ya da yukarda verilen tercih listesinde (Şekil – 8) tercih ettiğimiz cipher’ın önceliği daha düşük olan cipherları listeye ekleyerek ilerleyebiliriz.
Biz burada SSL_RSA_WITH_3DES_EDE_CBC_SHA cipher kullanmasını istiyoruz. Bunun için yeni listemiz aşağıdaki gibidir.
Şekil – 20
Client tarafından yollanan cipher listesi,
Şekil – 21
Server tarafından bağlantı sırasında kullanılan önceliği en yüksek olan cipher Şekil – 22’de görülebilir.
Şekil – 22
Makalemizde Client ve Server arasındaki https bağlantısının nasıl daha güvenli hale getirilebileceğini hem server hem de client tarafından ele aldık. Buradaki ayarları yaparken, Server’da low cipherların kaldırıldığında, client’ın da low cipherlarla bağlanamayacağı unutulmamalıdır.
Kaynakça:
http://www.openssl.org/docs/apps/ciphers.html
http://docs.oracle.com/javase/1.4.2/docs/guide/security/jsse/JSSERefGuide.html#SunJSSE
http://support.microsoft.com/kb/245030
http://www.thesprawl.org/research/tls-and-ssl-cipher-suites/