Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC:

Oracle Veritabanı’nda Kimlik Doğrulama 9 years 10 months ago #190

  • quantum50
  • quantum50's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
  • Posts: 480
  • Karma: 4
  • Thank you received: 6
Kullanıcı, cihaz, varlık üçlüsünden 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şlem yapmaya 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ı üzere 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:

Client logon adını Db’ye gönderir. (Şekil-1 ve Şekil-2 )

sekil-1.png
Şekil –1

Tool üzerinde (Şekil-2) kullanıcı adı ve şifre bilgisini girdiği anda DB tarafına logon bilgisini iletmiş olur.

sekil-2.png
Şekil - 2

DB logon bilgisine karşılık, bir challenge gönderir. Challenge random number(salt) ile şifrenin hash'lenmesinden oluşur. (Şekil -3)

sekil-3.png
Şekil - 3

Challenge = Hash(random number + şifre)

Client şifreden hash'i hesaplar ve random number’ı decyrpt eder.Böylece random number’ın açık halini elde etmiş olur.

Client random number’ı (salt) şifreyi encyrpt etmek için anahtar(key) olarak kullanır ve bu bilgiyi db’ye gönderir. (Şekil – 4)

sekil-4.png
Şekil - 4

Üçü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 hash'leme algoritmasına tabi tutulur. Bu algoritma tek yönlü bir hash'leme 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;

Random bir (salt) yaratılır.

Şifre, salt ile birleştirilir (password +salt). Burada şifre büyük harf küçük harf duyarlı bir şekilde birleştirilir. (case sensitive)

SHA-1 kullanılarak hashl'i string elde edilir.

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;
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).

Elde edilen string’in uzunluğu 16 bit oluncaya kadar “0”(sıfır)‘lar ile tamamlanır.

String’i 3DES /CBC(chiper block coding) kullanarak fix key kullanarak encyrpt eder.

Encyrpted text‘in son 8 karakterini yeni bir anahtar (key) olarak alınır.

String tekrar 3DES /CBC kullanılarak encrypt edilir. Şifrelerken 4. Adımda elde edilen anahtar kullanılır.

String’in son 8 karakteri alınır ve hex‘e çevrilir. Böylece elimizde 16 bitlik hashl'i 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.

Session bilgisini içeren, veritabanına bağlantıyı oluşturan trafik (logon kayıtları)

Bağlantı oluşturulduktan sonra çalıştırılan SQL query'ler (Client’dan Server ‘a giden gelen SQL query'ler)

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

sekil-5.png
Şekil - 5

Query çalıştırıldığında Wireshark uygulamasını kullanılarak elde edilen sonuç aşağıdaki gibidir.(Şekil - 6)

sekil-6_1.png
sekil-6_2.png
Şekil - 6

Bir başka örnekte kullanıcı CREDIT_CARD tablosundan Select sorgusu çeker . (Şekil – 7 ve 8)

sekil-7.png
Şekil – 7

sekil-8.png
Şekil – 8

Wireshark ile araya girildiğinde aşağıdaki görüntüler elde edilir. (Şekil – 9)

sekil-9.png
Şekil - 9

Yukarıdaki örnekde görüldüğü (Şekil - 9) 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 query'si hem de bu query'e 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(Şekil - 10) denemek için çalıştırdığımız da ;

sekil-10.png
Şekil - 10

Şifrelenmiş verinin wireshark elde edilen görüntüsü aşağıdaki gibi olacaktır. (Şekil -11)

sekil-11.png
Şekil – 11

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.

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
Time to create page: 0.389 seconds

NDK Hoş Geldin