Çoğu veritabanı sisteminde sunucu ile istemci arasındaki ağ trafiği, varsayılan kurulan veritabanları için şifrelenmeden gerçekleşir. Araya girme saldırıları ile bu trafik dinlenilebilir ve veritabanında bulunan bilgiler yetkisiz kişilerce elde edilebilir. Bu durum verinin bütünlüğünü ortadan kaldırır.
Bu yazımızda Oracle ve MSSQL Server veritabanlarında varsayılan kurulumlarda istemci ve sunucu arasındaki trafiğin açık bir halde iletildiğini göstereceğiz. Ayrıca bu trafiğin şifreli şekilde iletilmesi için gerekli adımlardan bahsedeceğiz. Bu yazıda örnek olarak Oracle 11g ve MSSQL Server 2008R2 veritabanları kullanılmıştır.
Oracle veritabanlarında istemci ve sunucu arasındaki trafik varsayılan olarak şifresiz gerçekleşir. Belirtilen duruma örnek bir senaryo şu şekildedir. İlk olarak istemci tarafındaki veritabanı uygulamasından Oracle veritabanında bir sorgu çalıştırılmıştır. Çalıştırılan sorgu Şekil 1de görülmektedir. İstemci ile veritabanı sunucusu arasındaki trafik pfSense güvenlik duvarının paket yakalama özelliği kullanılarak yakalanmıştır. Elde edilen trafiğin bulunduğu paket Wireshark aracı ile açıldığında, istemci tarafından veritabanı sunucusuna TNS protokolü ile gönderilen sorgunun açık bir şekilde iletildiği Şekil 2de görülmektedir. Aynı zamanda veritabanı sunucusu tarafından sorguya verilen cevabın da aynı şekilde açık halde istemciye gönderildiği Şekil 3'te görülmektedir.
![oracle_version_sqldeveloper.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_version_sqldeveloper.png)
Şekil 1. İstemci tarafından veritabanında çalıştırılan sorgu
![oracle_version_istek_wireshark.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_version_istek_wireshark.png)
Şekil 2. İstemci tarafından gönderilen sorgunun açık olarak iletilmesi
![oracle_version_sonuc_wireshark.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_version_sonuc_wireshark.png)
Şekil 3. Sunucu tarafından sorguya verilen cevabın açık olarak iletilmesi
Oracle veritabanında istemci ve sunucu arasındaki trafiğin şifreli olarak iletilmesini sağlayan yapılandırma ayarları için 4 farklı değer bulunmaktadır: Accepted, Rejected, Requested, Required .
Oracle veritabanlarındaki yapılandırma ayarlarında varsayılan değer Accepted değeridir. Accepted değeri seçildiği durumda, ağ trafiğinin şifrelenmesi için bağlantının diğer tarafı için Requested ya da Required değeri seçilmelidir.
Required değeri seçildiğinde, bağlantının diğer tarafında Rejected değeri seçilmediği durumda ağ trafiği şifrelenerek gönderilir. Bağlantının diğer tarafında Rejected değeri seçilirse, bağlantı sona erdirilir.
Rejected değeri seçildiğinde, bağlantının diğer tarafında Required değeri seçilmediğinde ağ trafiği şifrelenmeden gönderilir. Ancak Required değeri seçildiği durumda bağlantı hata verilerek sona erdirilir.
Requested değeri seçildiği durumda, bağlantının diğer tarafında Accepted, Requested, Required değerlerinden biri seçilirse ağ trafiği şifrelenerek gönderilir.
Şifreleme mekanizmasının çalışması ile ilgili yapılandırma ayarlarını gösteren tablo referansta[1] belirtilmiştir.
Oracle veritabanında istemci ve sunucu arasındaki trafiğin şifrelenmesini sağlayan güvenlik mekanizması Oracle Net Manager ya da sqlnet.ora yapılandırma dosyasını kullanarak etkinleştirilebilir. Şekil 4'te Oracle Net Manager aracı ile şifreleme mekanizmasının yapılandırılması gösterilmiştir. Ayrıca şifreleme mekanizması Oracle Net Manager aracı kullanılmadan sqlnet.ora yapılandırma dosyası ile de yapılandırılabilir.
![oracle_encrpyt_yaplandrma.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_encrpyt_yaplandrma.png)
Şekil 4. Oracle Net Manager ile şifreleme mekanizmasının aktifleştirilmesi
![sqlnet.ora.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/sqlnet.ora.png)
Şekil 5. sqlnet.ora yapılandırma dosyasındaki şifreleme ayarları
Oracle veritabanında şifreleme mekanizmasının aktifleştirilmesi sonucunda istemci ve sunucu arasındaki trafiğin şifreli olarak iletildiği Şekil 6 ve Şekil 7de görülmektedir.
![oracle_version_istek_wireshark_encyrpt_sonra.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_version_istek_wireshark_encyrpt_sonra.png)
Şekil 6. İstemci tarafından gönderilen sorgunun şifreli olarak iletilmesi
![oracle_version_sonuc_wireshark_encrypt_sonra.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/oracle_version_sonuc_wireshark_encrypt_sonra.png)
Şekil 7. Sunucu tarafından gönderilen cevabın şifreli olarak iletilmesi
MSSQL Server veritabanları da Oracle veritabanları gibi istemci ve sunucu arasındaki trafiği varsayılan olarak açık halde göndermektedir. İstemci tarafında veritabanı üzerinde bir sorgu çalıştırılmış ve oluşan trafik pfSense güvenlik duvarı ile araya girilerek elde edilmiştir. İstemci tarafından oluşturulan trafik Şekil 8de, sunucu tarafından istemcinin gönderdiği isteğin sonucunu içeren trafik Şekil 9da verilmiştir. Şekillerden görüldüğü üzere her iki tarafın oluşturduğu trafik açık olarak karşı tarafa iletilmektedir.
![mssql_version_istek_wireshark.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/mssql_version_istek_wireshark.png)
Şekil 8. İstemci tarafından oluşturulan trafik
![mssql_version_sonuc_wireshark.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/mssql_version_sonuc_wireshark.png)
Şekil 9. Sunucu tarafından isteğin sonucunu içeren trafik
MSSQL Server veritabanları üzerinde istemci ve sunucu arasındaki trafiğin şifreli olarak iletilmesini sağlamak için Force Encryption değeri aktif hale getirilmelidir. İlgili değer Sql Server Configuration Manager -> Sql Server Network Configuration -> Protocols for %Instance_Name% -> Properties -> Force Encryption yolu izlenerek yapılandırılabilir. Şifrelemeyi etkinleştirmek için bu değer Yes olarak değiştirilmelidir. Bu işlemin ardından SQL Server servisi yeniden başlatılmalıdır.
MSSQL Server veritabanları şifreleme işlemini öncelikli olarak güvenilir bir sertifikasyon makamı tarafından verilen bir sertifika ile gerçekleştirir. Ancak sistemde böyle bir sertifika bulunmadığı durumlarda kendisinin oluşturduğu bir sertifika (self-signed) ile şifreleme işlemini gerçekleştirir.
Şekil 10 ve Şekil 11de MSSQL Server veritabanında şifreleme yöntemi aktif hale getirildikten sonra istemci ve sunucu arasındaki trafik gösterilmektedir. Şekillerden görüleceği gibi her iki yönlü trafik de şifreli olarak iletilmektedir.
![mssql_version_istek_wireshark_encypt_sonra.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/mssql_version_istek_wireshark_encypt_sonra.png)
Şekil 10. Şifreleme yöntemi etkinleştirildikten sonra istemci tarafından oluşturulan trafik
![mssql_version_sonuc_wireshark_encrypt_sonra.png](https://www.bilgiguvenligi.gov.tr/images/stories/maslan/ifreleme/mssql_version_sonuc_wireshark_encrypt_sonra.png)
Şekil 11. Şifreleme yöntemi etkinleştirildikten sonra sunucu tarafından oluşturulan trafik
Veritabanı sistemlerinde istemci ve sunucu arasındaki trafiğin şifreli olarak iletilmesi, iletilen verinin bütünlüğünün korunması açısından önemlidir. Ancak trafiğin şifreli olarak iletilmesi sonucunda belirli ölçüde bir performans kaybı yaşanacağı göz önünde bulundurulmalıdır. Ayrıca istemci uygulamaları veritabanına bağlanırken veritabanında belirtilen şifreleme algoritmasını kullanmalıdır.