KVKK kapsamında teknik tedbirlerden biri olan veri tabanı güvenliği için veri maskeleme ve veri şifreleme, önem arz etmektedir . Özellikle veri tabanındaki veriler şifrelenmediği taktirde veri tabanı yedeklerine ulaşan kötü niyetli kişiler tarafından verilere kolayca erişilebilir.
Fakat veri maskeleme yöntemi, canlı ortamlarda çalışan geliştiriciler için bazı durumlarda kendi ayağına sıkmak anlamına gelebilir. Yani geliştiriciler veriyi anlamlandırmak için verinin açık haline ihtiyaç duyacaklardır. Veri şifrelemede ise verinin şifrelenmesi ve şifrenin çözülme işlemleri, performans açısından veri tabanına ek bir yük getireceğinden tüm bu yöntemlerin uygulanabilirliği önceden iyice analiz edilmelidir. Yoksa dimyata pirince giderken evdeki bulgurdan olabiliriz.
Veri tabanında şifreleme için iki yöntem kullanabiliriz.
Transparant Database Encryption (TDE) : Bu makalenin konusu olan TDE ile durağan veriler (data at rest) disk üzerinde şifrelenir. Bu şifreleme türü Microsoft, IBM, ve Oracle tarafından kullanılan dosya düzeyinde şifreleme yapan bir teknolojidir. Veriler disk üzerine yazılırken şifrelenir ancak bellekte okurken şifre çözülür. Bunun için DBA tarafında veriler yine açık bir şekilde okunur. Verilerde herhangi bir değişiklik olmayacağı için veri tabanı boyutunu da değiştirmemesi kullanım açısından en önemli avantajdır. Şifreleme işlemi disk üzerinde gerçekleşeceği için ağ üzerinde dolaşan veriler yine açık bir şekilde hareket eder.
Always Encryption : Bu yöntemde ise hareketli veri (data in motion) ,veri tabanına ulaşmadan şifrelenir. Yani veriler daha diske yazılmadan şifrelenmiştir. Bu veriler DBA tarafında da şifreli olarak gözükür. Dolaysıyla aradaki trafiği dinleyen birisi bu verilere açık bir şekilde ulaşamaz. Bu yöntem TDE ye göre daha güvenlidir ancak yukarıda bahsettiğimiz performans kayıpları göz önüne alındığında (veri tabanı boyutunun artması, verilerin şifrelenirken yüksek CPU kullanması) bilgi güvenliği CIA ( Confidentiality, Integrity and Availability) üçgeninde bir yandan gizliliği arttırırken diğer yandan erişilebilirlikten taviz vereceğimiz anlamını taşır.
Yukarıda kısaca değindiğimiz TDE yi MSSQL Server 2008 ve üzerindeki sürümlerde kullanabilirsiniz.
Uygulamaya geçmeden önce ilk duruma bakalım. Aşağıda görüleceği gibi şifrelenmemiş veri tabanı yedeğini ele geçirmiş birisi başka instance üzerinde açmadan sadece bu dosyada text bazında arama yapsa bile istediği veriye açık bir şekilde erişebilir.
Aşağıdaki diyagramda transparent şifreleme için yaptığımız işlemlerin hiyerarşisi baştan sona doğru verilmiştir. Biz bu adımları veri tabanında nasıl uygulayacağımızı aşağıda detaylı şekilde inceleyeceğiz.
- Master Key Oluşturma
İlk etapta master veri tabanında herhangi bir sertifika olmadığını aşağıdaki resimde görebiliriz.
SMK (Service Master Key), SQL Server şifreleme hiyerarşisinin en üstündedir ve SQL Server kurulumu sırasında oluşturulur ve Windows Data Protection API (DPAPI) tarafından korunur.
İlk önce master veri tabanında Database Master Key (DMK) oluşturuyoruz.
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘Password’;
GO
- Master Key tarafından korunan bir sertifika oluşturma.
USE master;
CREATE CERTIFICATE TDECert WITH SUBJECT= ‘TDE Certification’;
GO
- Database Encryption Key oluşturma.
USE AdventureWorksLT2019;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO
Bu scripti yazdığımızda sertifika ve private key’in backup’ını almadığımız uyarısını alacağız. Eğer sertifika kullanılamaz hale gelirse ve TDE aktif hale getirilmiş bir veri tabanını başka bir instance’a taşımak zorunda kalırsanız sertifika ve private key’in backup’ı olmadan veri tabanını açamazsınız. Bundan dolayı oluşturduğumuz sertifika ve keyin yedeğini almalıyız.
- Sertifika ve keyin yedeğini alma.
use master
BACKUP CERTIFICATE TDECert
TO FILE = ‘D:\Backup\MyTDECert.cer’
WITH PRIVATE KEY
(
FILE = ‘D:\Backup\CertPrivateKey.key’,
ENCRYPTION BY PASSWORD = ‘VeryStrongPassword’
);
GO
- Veri tabanında şifrelemeyi aktif etme
ALTER DATABASE AdventureWorksLT2019
SET ENCRYPTION ON;
GO
- Test etme
Aşağıdaki sorguda hangi veri tabanının şifreli olduğunu görebilirsiniz.
Ayrıca şifrelemenin enable olduğunu aşağıdaki gibi veri tabanı özelliklerinden de görebiliriz.
TDE şifreleme için tüm aşamaları tamamladıktan sonra başta bahsettiğim verinin diskte açık bir şekilde bulunmasını ve bu yedeği başka instance larda açmak isteyen kötü niyetli kişileri hüsrana uğratmış oluyoruz. Bunun da sağlamasını yapmak için şifrelenmiş veri tabanının yedeğini alıp aynı text aramasını yapalım.
Görüldüğü gibi veri tabanımızdaki verilere artık 3.şahıslar açık bir şekilde ulaşamayacak. Başka instancelarda açmak istese bile sertifika ve key olmadan açamayacaklardır.
Son olarak şifrelemeyi disable etmek için
ALTER DATABASE AdventureWorksLT2019
SET ENCRYPTION OFF;
GO
Kullanabiliriz. Bu haliyle şifreleme durumuna baktığımızda FALSE olduğunu göreceğiz.