Oracle

Oracle Veritabanı Sıkılaştırma Teknikleri ve Güvenlik

 

Veri güvenliği verinin bozulmaması ve veriye doğru kişinin eriştiğinden emin olunmakla birlikte gizliliği konusunu da kapsar. Veri’nin güvenliğinin sağlanması için gizlilik, erişilebilirlik ve bütünlük kırılımları göz önünde bulundurulmalıdır. Doğru veriye gerektiğinde sadece yetkilendirilmiş kişilerin güvenli yöntemlerle erişiyor olması sağlanmalıdır.

 

Bu yazımızda, verinin saklandığı veri tabanı sistemlerinden biri olan Oracle üzerinde uygulayabileceğimiz sıkılaştırma tekniklerinden madde madde bahsediyor olacağız;

                                                                               

1 –  Şifresi Zayıf ve Varsayılan (default) Olarak Kalmış Kullanıcıların Kontrol Edilmesi

 

Kurulumla gelen varsayılan (default)  kullanıcılardan şifresi varsayılan(default) kalmış kullanıcı’nın var olup olmadığı kontrol edilmelidir. Versiyon kontrolü yapmak için aşağıdaki sorgu kullanılabilir.

 

SELECT d.username, u.account_status

FROM DBA_USERS_WITH_DEFPWD d, DBA_USERS u

WHERE d.username = u.username

ORDER BY 2,1;

 

Sorgunun çıktısı ise aşağıdaki gibidir;

 

USERNAME  ACCOUNT_STATUS

——— ———————–

SCOTT     EXPIRED & LOCKED

 

2 –Network Trafiğinin Şifrelendiğinin Kontrol Edilmesi

Mümkünse eğer , Oracle ASO (Oracle Advanced Security) client , veritabanı ve uygulama sunucu ‘ları   ile arasındaki network trafiğinin şifreleniyor olması gerekmektedir.

Bu konu hassas verilerin yetkisiz kişiler tarafından ele geçirilmemesi bakımandan büyük önem  teşkil etmektedir.

 

Veri trafiğinin şifrelenmesi ile ilgili aşağıdaki makale yardımcı olacaktır;

 

http://www.bilgiguvenligi.gov.tr/veritabani-guvenligi/oracle-veritabani-nda-kimlik-dogrulama.html

 

3-  Şifre Versiyonlarının Kontrol Edilmesi

 

Oracle 10g de parola yapısı  case insensitive olduğundan, benim parola ‘umun  Sevim123 olduğunu varsayarsak  “Sevim123”  ile “sevim123”  ‘ün özet değerleri birbirinin aynısı idi. Fakat bu durum 11g de değişti. 11g case sensitive olduğundan “Sevim123”  ile “sevim123”  özet değerleri birbirinden farklı olacaktır. 11g’de özet değerler SYS.USER$ tablosunda password  kolonu altında tutuluyor .

 

Özet olarak 10g ‘de ;

 

Büyük küçük harf duyarlı değildir. Test123 parolasını kullanan kişi, test123 şifresini kullanan kişinin hesabına girebilir. Bir kullanıcı belli hakları varsa başkasının şifresini kendi şifresi olarak ayarlayabilir (Impersonate another user )

 

Özet olarak 11g;

Büyük küçük harf duyarlı (Case sensitive)’dır. Tuzlama(Salting) methodu kullanılır. Parolaya rastgele ifade eklenerek saklanır. Böylece farklı kişilerin şifresi aynı olsa bile özetleri farklı olur. Dolayısı ile 11g de parola’larin tutuluş şekli daha güvenlidir.

11g   SYS.USER$  tablosunun çıktısı aşağıdaki gibidir(şekil –1);

 

image001

Şekil –1

11g  dba_users tablosunun çıktısı aşağıdaki gibidir(Şekil-2);

image002

Şekil –2

parola versiyonlarını kontrol etmek için aşağıdaki sorguyu kullanılmalıdır;

select username, parola_versions from dba_users;

 

USERNAME      PASSWORD_VERSIONS

——— ———————–

RON                      10G 11G

JANE                     11G

RONB                   10G

 

4 –   Şifre Politikası Kontrolü

Oracle üzerinde yaratılan her kullanıcı için şifre politası parametrelerinin her birinin ayrı ayrı tanımlanması gerekmektedir. Aşağıdaki şifre politasında kullanılan parametrelerin tanımları ve varsayılan (default )değerleri yer almaktadır.

Şifre Politası parametreleri ve varsayılan (default) değerleri aşağıdaki gibidir.

FAILED_LOGIN_ATTEMPTS: Bir Oracle kullanıcı hesabının kilitlenmesi için gerekli maksimum başarısız oturum açma girişimi sayısını belirler. Bu değeri belirlemezsek, bağlanmak isteyen kullanıcılar sürekli deneme yanılma yöntemi uygulayabilirler. Bu parametre’nin varsayılan (default) değeri  “10” dur.

PASSWORD_LIFE_TIME: Bir parolanın geçerli sayılacağı maksimum zamanı gün olarak belirler. Bu parametre’nin varsayılan (default ) değeri “180” dir.

PASSWORD_GRACE_TIME: PASSWORD_LIFE_TIME parametresi ile belirtilen süre dolduğunda kullanıcıya parolasını değiştirmesi için tanınan ek süreyi tanımlar. Bu parametre’nin varsayılan (default ) değeri  “7”  dir.

PASSWORD_REUSE_MAX: Bir parolanın tekrar kullanılabilmesi için tanımlanması gereken minimum farklı parola sayısını belirler. Bu parametre’nin varsayılan (default)  değeri  “unlimited”  dir.

PASSWORD_REUSE_TIME: Bir parolanın tekrar kullanılabilmesi için geçmesi gereken minimum süreyi belirler. parametre’nin varsayılan (default ) değeri  “unlimited”  dir.

PASSWORD_LOCK_TIME: Maksimum sayıdaki başarısız oturum açma girişimlerinden sonra, hesabın ne kadar süreyle kilitli kalacağını belirtir.  Bu parametre’nin varsayılan (default ) değeri “1” dir.

Oracle üzerinde tanımlı her bir kullanıcı için bu parametrelerin ayrı ayrı tanımlanması yerine profil tanımlaması yapıp, bu profillere kulllanıcıları bağlamak daha mantıklı olacaktır. Örnek olarak kadrolu yazılımcılar için ayrı bir profil, outsource yazılımcılar için ayrı bir profil, uygulama kullanıcıları için ayrı bir profil tanımlanabilir. Kullanıcıya profil içerisinde yapılan tanımlamalarda gerekli olan sınırlamalar tanımlanmalıdır.

Profil yaratmak için aşağıdaki query ‘yi kullanabilirsiniz.

 

create profile sec_prof limit

connect_time 240

idle_time 30

failed_login_attempts 5

password_life_time 60

password_reuse_time 60;

 

Mevcut sistemde tanımlı profilleri listelemek için aşağıdaki sorgu kullanılabilir;

Select distinct profile from sys.dba_profiles;

 

Parametrelere atanmış değerleri listelemek için ise aşağıdaki sorgu kullanılabilir;

select * from  sys.dba_profiles order by profile;

Hiçbir profile atanmamış kullanıcılar için bu parametre değerlerini görüntülemek isterseniz aşağıdaki sorguyu kullanabilirsiniz;

select * from user_password_limits;

Sorgunun çıktısı ise aşağıdaki gibi olacaktır(şekil-3);

image003

Şekil –3

5-  Kullanıcı Kaynak Limitlerinin Kontrol Edilmesi

 

Kullanıcı kaynaklarının kontrol edilmesi güvenlik açısından çok önemlidir.

Limit parametrelerini kontrol etmek için aşağıdaki sorgu kullanılmalıdır.

 

select * from user_resource_limits;

Sorgunun çıktısı aşağıdaki gibidir(şekil-4);

image004

Şekil –4

Parametrelerin tanımları aşağıdaki gibidir;

CPU_PER_SESSION : Bir kullanıcı oturumunun kullanabileceği maksimum cpu zamanını belirler.

CPU_PER_CALL : Bir kullanıcının yarattığı call (parse, execute, ya da fetch) için maksimum cpu değerini belirler.

CONNECT_TİME : Bir oturum için dakika olarak maksimum açık kalma zamanını belirler.

IDLE_TIME : Bir oturumun maksimum pasif kalma süresini dakika olarak belirler.

SESSIONS_PER_USER : Kullanıcının eş zamanlı açabileceği oturum sayısını kısıtlamak için kullanılır.

PRIVATE_SGA : Bu limit sadece “shared server” modunda çalışan veritabanları için geçerlidir. Bir oturumun SGA içerisinde “Shared Pool”da kendine ayırabileceği maksimum memory alanını belirler.

LOGICAL_READS_PER_SESSION : Bir oturumda okunabilecek maksimum data blok sayısını belirler.

LOGICAL_READS_PER_CALL : Bir kullanıcının yarattığı call için okunabilecek maksimum data blok sayısını belirler.

6-  TableSpace Kotaları’nın Kontrol Edilmesi

Üretim (production) veritabanların da data insertleri yalnızca uygulma şemaları altında gerçekleşiyor olması gerekmektedir. Bazı istisnai durumlarda bu yetkiler yazılımcılarada verilebilmektedir. Bu durumun sürekli olrak kontrol ediliyor olması gerekmektedir.  Kullanıcı bazında şema kotlarının kontrolleri aşağıdaki sorgu ile yapılabilir.

 

select * from dba_ts_quotas;

Sorgunun çıktısı aşağıdaki gibidir(şekil-5);

image005

Şekil –5

7 –  Tüm Kullanıcı ve Rollerin Yetkilerinin Kontrol Edilmesi

Oracle veritabanı üzerinde tanımlı kullanıcılar ve rollerin yetkilerinin sorgulanması güvenlik açısından büyük önem arz etmektedir.  Aşağıdaki sorgu ile kullanıcıların ve rollerin yetkilerini admin(yönetici) option ile beraber tek bir sorgu görüntüleyebilirsiniz.

Tüm sistem kullanıcıları ve rolleri için ayrıcalıklı haklar ile beraber admin(yönetici) seçeneğini görüntülemek için;

select

 lpad(‘>’, level, ‘-‘) ||

granted_role “User/Role/Privilege”

from (

  select

   null grantee,

  username granted_role,

  ‘ N/A’ admin_option

 from sys.dba_users

  UNION

 select

  grantee,

  granted_role,

  admin_option

 from sys.dba_role_ privs

 UNION

 select

  grantee,

  privilege_granted_role,

  admin_option

 from sys.dba_sys_ privs)

start with grantee is null

connect by grantee = priorgranted_role

Sorgunun çıktısı aşağıdaki gibidir(şekil- 6);

image006

Şekil –6

8 –  Spesifik Olarak Belirtilen Bir Hakkın Kontrol Edilmesi

Bir önceki maddede tüm kullanıcı ve rollerin yetkilerini sorgulamıştık. Fakat spesifik olarak bir kişinin rollerini yada bir role kimin atandığını sorgulamak istediğimizde aşağıdaki sorgu kullanılabilir. Burada “where” kriterine kritik olarak belirlediğimiz yâda denetçi tarafından talep edilen rol isimleri yazılarak detaylı sorgulama yapılabilir.

Örneğin kimlerin ‘DBA’ hakkına sahip olduğunu listelemek için aşağıdaki sorgu kullanılabilir ;

select * from dba_role_privs where  granted_role =’DBA’;

Sorgunun çıktısı aşağıdaki gibidir(şekil-7);

image007

Şekil –7

Yada tüm atanmış rolleri listelemek için aşağıdaki sorgu kullanılabilir;

select * from dba_role_privs;

9 –Yaratılmış DB Link’lerin Kontrol Edilmesi

Oracle veritabanı’ dan farklı bir oracle veritabanı ‘na bağlanmak istediğimizde  bu veritabanları’nın birbiriyle konuşabilmesi için araya kurulan köprüye DB Link denir. Bu linkler yaratılma şekillerine göre güvenlik açığı yaratabilmektedir. Linkler Private  ve  Public olarak  iki farklı şekilde yaratabilir. Public olarak yaratılan Linkler denetimlerde bulgu konusu olmakta ve güvenlik açığı teşkil etmektedir.

Public linkleri görüntülemek için aşağıdaki sorguyu kullanabiliriz;

select * from  sys.dba_db_links where owner = ‘PUBLIC’;

 

Tanımlı tüm linkleri görüntülemek için ise aşağıdaki sorguyu kullanabiliriz;

select * from  sys.dba_db_links;

10 – Oracle Versiyon Kontrol Edilmesi

Üretici tarafından yayınlanan service pack ve yama’lar kontrollü olarak uygulanması gerekmektedir. Sisteme şimdiye kadar hangi yama’ların uygulanıp  uygulanmadığını kontrol etmek için aşağıdaki sorgu kullanılmalıdır. Sorgu Oracle sürüm numarasindan yama seviyesine kadar versiyon bilgisi verir.

SELECT * FROM v$version;

Sorgunun çıktısı aşağıdaki gibidir(şekil-8);

image008

Şekil -8

Referanslar;

http://www.databasesecurity.com/oracle/twp_security_checklist_db_database.pdf

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu