Güvenlik

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.

 

 

 

image001

 

 

Ş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):

 

 

image002

Şekil – 2

 

 

2. adım olan SYN-ACK paketinin yollanması (sunucu):

 

 

image003

Şekil – 3

 

 

3. adım olan ACK paketinin yollanması (istemci):

 

 

image004

Ş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

 

image005

Şekil – 5

 

 

2.  adım, Server Hello ve Tercih edilen Cipher Suit

 

 

image006

Şekil – 6

 

Ve 3. Adım Client Key Exchange

 

 

image007

Ş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:

 

 

 

image008

Ş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.

 

 

image009

Şekil – 9

 

 

image010

Şekil – 10

 

 

image011

Ş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.

 

 

image012

Şekil- 12

 

Web server ssl2 hizmeti vermediginden dolayı bize TLS1.0 destegi saglayan cipherı destekledigini belirten mesajı Şekil – 13’de yolluyor.

 

 

image013

Ş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.

 

 

image014

Şekil-14

 

 

Trafiğin iletilmesinde seçilen cipher Şekil-15 ‘tedir.

 

 

 

image015

Ş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:

 

 

image016

Ş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:

 

 

 

image017

Şekil – 17

 

sslProtocol=”TLSdeğ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;

 

 

image018

Şekil – 18

 

 

Server tarafından kabul edilen cipher ise,

 

 

image019

 

Ş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.

 

 

image020

Şekil – 20

 

 

 

Client tarafından yollanan cipher listesi,

 

 

 

image021

Ş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.

 

 

image022

Ş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.wireshark.org/

http://www.openssl.org/

 http://www.myonapp.org/network-makale-dokuman/uclu-tokalasma-3-way-handshake-floodgate-834.html#ixzz2FUiqRcNe

http://www.thesprawl.org/research/tls-and-ssl-cipher-suites/

 

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu