Oracle Veritabanında Kimlik Doğrulama
Kullanıcı (cihaz , varlık) ‘dan birinin , dataya (kaynak ,uygulama) erişmek için kimlik doğrulama yapması gerekmektedir. Kimlik doğrulama, güvenli bir şekilde belirli bir veriye erişimi sağlar. Kimlik doğrulamadan sonra, sahip olunan yetki işleme izin verir yada erişim basamaklarına limitler koyar. Bu erişim basamakları Oracle da privileges , roles , profiles ve resource limitations dan yapılandırılır.
Kulllanıcıların kimlik doğrulama yapabilmesi için, bazı işletim sistemleri bilgi kullanması için Oracle’a izin verir. Yani bir kez işletim sistemi ile kimlik doğrulama gerçekleştirildiğinde, kullanıcı adı ve şifre belirlemeden Oracle ‘ a bağlanılabilir.
Örn: İşletim sisteminde kimlik doğrulama SQL plus ‘a başvurur. Kullanıcı adı ve şifreyi yönlendirir.
Oracle veritabanı kimlik doğrulaması gerçekleşebilmesi için kullanıcının oracle veritabanı ile bağlantı kurması gerekmektedir. Bu sebeple kullanıcı adı ve şifreyi tanımlamalıdır. Bu işlem veritabanı ‘na yetkisiz erişimleri önler, eğerki kullanıcı hatalı şifre işlemi sağlarsa bağlantı engellenir.
Oracle 11g ‘de Kullanıcı Doğrulama (Authentication – Standart Logon Process) Adımları ;
Oracle 11g de kimlik doğrulama adımları aşağıdaki sırayı takip eder.
1. Client logon adını Db’ye gönderir.
Tool üzerinden kullanıcı adı ve şifre bilgisini girdiği anda DB tarafına logon bilgisini iletmiş olur.
2. DB logon bilgisine karşılık , bir challenge gönderir. Challenge random number(salt) ile şifrenin hashlenmesinden oluşur.
Challenge = Hash(ran num + şifre)
Client şifreden hashi hesaplar ve random number’ı decyrpt eder.Böylece random numarın açık halini elde etmiş olur.
3. Client random number’ı (salt) şifreyi encyrpt etmek için anahtar(key) olarak kullanır ve bu bilgiyi db’ye gönderir.
Üçüncü adımın sonunda kimlik doğrulama işlemi gerçekleşmiş olur.
Şifre USER$ tablosu altında tutulur ve burada açık bir şekilde tutulmaz. Şifre bir hashleme algoritmasına tabi tutulur.Bu algoritma tek yönlü bir hashleme algoritmasıdır.
Oracle 11g ‘de hash algoritması olarak SHA-1 kullanılır. Oracle 11g hash Algoritması aşağıdaki adımları takip eder;
1. Random bit (salt) yaratılır.
2. Şifre , salt ile birleştirilir. (password +salt)
Burada şifre büyük harf küçük harf duyarlı bir şekilde birleştirilir. (case sensitive)
3. SHA-1 kullanılarak hashli string elde edilir.
4. Hash value ile random number(salt) birleştirilir.Bu değer ise db ‘de tutulur.
Dördüncü adımda kullanıcı db’ye authenticate olurken şifre saklandı.Hash’in farklı bir değerde gelmemesi için aynı random sayı kullanıldı.
Oracle 11g öncesinde çalışan Oracle’ın özel hash algoritması ise aşağıdaki adımları takip eder;
1. Kullanıcı adı , şifre ile birleştirilir.Ve tamamı büyük harfe çevrilir.
Bunun sebebi Oracle 11g ‘den öncesinde Oracle’ın büyük harf küçük harf duyarlılığı olmamasıydı(case insensitive).
2. Elde edilen string’in uzunluğu 16 bit oluncaya kadar “0”(sıfır) ‘lar ile tamamlanır.
3. String’i 3DES /CBC(chiper block coding) kullanarak fix key kullanarak encyrpt eder.
4. Encyrpted text ‘in son 8 karakterini yeni bir anahtar (key) olarak alınır.
5. String tekrar 3DES /CBC kullanılarak encrypt edilir. Şifrelerken 4. Adımda elde edilen anahtar kullanılır.
6. String’in son 8 karakteri alınır ve hex ‘a ya çevrilir. Böylece elimizde 16 bitlik hashli karakter dizisi olur.
Oracle ‘da Taşınan Veri
Oracle veritabanında, veritabanına yetkili erişim olmadan verinin ele geçirilebilmesi için çeşitli yollar mevcuttur. Çünkü veri hem trafik olarak network üzerinden geçmektedir hem de dosyalar üzerinde saklanmaktadır.
Network üzerinden geçen trafik üçüncü şahıslar tarafından izlenebilir ve hassas veriler çalınabilir. Aynı zamanda hassas veri içeren bilgiler, işletim sistemi üzerinde dosya olarak saklanmaktadır. Bu dosyalara yapılan yetkisiz erişimler olması durumunda hassas veriler çalınabilir.
Oracle Veritabanı Trafiğinin Şifrelenmesi
Oracle veritabanı bağlantılarının çoğu, bilgisayar ağları üzerinden yapılan (uzaktan) bağlantılardır. Dolayısıyla veritabanı trafiği bilgisayar ağları üzerinden geçmektedir. Veritabanı trafiği TNS protokolünü kullanarak TCP/IP paketleri halinde bilgisayar ağları üzerinden iletilir. Trafiği daha iyi analiz edebilmek adına oluşan veritabanı trafiği üç genel başlık altında sınıflandırılmıştır.
1. Session bilgisini içeren, veritabanına bağlantıyı oluşturan trafik (logon kayıtları)
2. Bağlantı oluşturulduktan sonra çalıştırılan SQL queryler
(Client’dan Server ‘a giden gelen SQL queryler)
3. Çalıştırılan SQL querylere karşı geri dönen cevaplar.
Oracle veritabanı kurulumu da belirtmediğiniz sürece ön tanımlı olarak yapılan yapılandırma ile, veritabanı üzerine gelen ve giden tüm trafik açık metin şeklindedir.
Dolayısıyla araya girebilecek üçüncü şahıslar tarafından trafik dinlenebilir ve hassas bilgiler çalınabilir.
Düz metin trafiğin içeriğine bakabilmek için Wireshark uygulamasını kullanıldığında uygulama ile alınmış olan oturum bilgisi trafiği şekilde gösterildiği gibidir.
Çalıştırılan Query aşağıdaki gibidir.
Query çalıştırıldığında dönen sonuç aşağıdaki gibidir.
Bir başka örnek ise aşağıdadır.
Bu örnekte kullanıcı CREDIT_CARD tablosundan Select sorgusu çeker.
Wireshark ile araya girildiğinde aşağıdaki görüntüler elde edilir.
Yukarıdaki örnekde görüldüğü gibi saldırganın erişimi kalmadan bile hassas verileri ele geçirilebilir. Böyle bir durumda saldırganın bir DB kullanıcısına dahi ihtiyacı olmayacaktır.
Yakalanan trafiklerden anlaşılıyorki hem çalıştırılan SQL querysi hem de bu query karşılık olarak dönen cevap, ağ trafiğinin içinden düz metin olarak geçmekte ve üçüncü şahıslar tarafından görüntülenebilmektedir.
Oracle veritabanı bu tür suistimaller için Advanced Security Option (Oracle ASO) uygulaması yardımıyla veri güvenliğini sağlamaktadır. ASO yardımıyla veritabanı trafiği şifreli hale getirilebilir, veritabanında bulunan hassas verilerin şifreli halde saklanması sağlanabilir.
Oracle ASO İle Veritabanı Trafiğinin Şifrelenmesi
Veritabanı dosyaları harddisk üzerinden kopyalanması, network üzerinden geçtiğinde üçüncü şahıslar tarafından dinlenmesi veya veritabanı backuplarının bulunduğu teyp`ler ele geçirilmesi durumunda hassas veriler yetkisi olmayan kişilerin erişimine açık hale gelmektedir. Bunu önlemenin en güvenli yolu bu verilerin şifrelenerek tutulması veya taşınmasıdır.
Oracle veritabanı tarafından sunulan ASO uygulaması ile verilerin hem ağ katmanında hem de disk katmanında şifrelenerek taşınması ve saklanması sağlamaktadır. Oracle ASO bazı Oracle dağıtımlarında beraber gelmektedir, bazılarında ise sonradan ilave edilebilmektedir.
Oracle ASO için “Oracle Net Manager” kullanılarak yapılandırma, arayüz yardımı ile yapılabilir.
Arayüzü açmak için aşağıdaki komut kullanılır.
$ORACLE_HOME/bin/netmgr
Trafiğin şifrelenmesi için bazı ayarların yapılması gerekir.
Encryption Type” için dört seçenek bulunmaktadır;
REQUIRED: Şifrelemenin gerekli olduğunu belirtir.
Oracle şifrelenmemiş bağlantılara izin vermeyecektir.
REQUESTED: İsteğe bağlı olarak trafik şifrelenecektir. Hem sunucu hem client tarafında bu şekilde seçilmiş ise trafik şifrelenir, aksi durumda şifrelenmez.
ACCEPTED: Oracle`ın “accepted”, client tarafının “required” ve “requested” ayarlaması ile trafik şifreli olacaktır. Burada karar client ‘a bırakılmıştır.
REJECTED: Şifreli trafiğe izin verilmeyeceği anlamına gelir.
Değişiklikler kaydedildiğinde $ORACLE_HOME/network/admin/sqlnet.ora dosyası içine aşağıdaki bilgilerin de kaydedilmesi gerekmektedir.
SQLNET.ENCRYPTION_CLIENT = requested
SQLNET.ENCRYPTION_SERVER = requested
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
SQLNET.CRYPTO_SEED = ‘encryption test’
SQLNET.ENCRYPTION_TYPES_CLIENT = (3DES168)
SQLNET.ENCRYPTION_TYPES_SERVER = (AES192, 3DES168, 3DES112)
Şimdi aşağıdaki sorguyu denemek için çalıştırdığımız da ;
Şifrelenmiş verinin wireshark elde edilen görüntüsü aşağıdaki gibi olacaktır.
Oracle ASO kullanımıyla bilgisayar ağları üzerinden geçen veritabanı trafiği şifrelenmiş olup trafiği dinleyen üçüncü şahıslar tarafığından elde edilen bilgilerin düz metin olmaması sağlanmıştır.