THT DUYURU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

chat
Seçenekler

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

CmcEagle - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
06/2013
Nereden:
Spain
Yaş:
33
Mesajlar:
136
Konular:
111
Teşekkür (Etti):
1
Teşekkür (Aldı):
12
Ticaret:
(0) %
23-06-2013 18:13
#1
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ıda, verinin saklandığı veritabanı sistemlerinden biri olan Oracle üzerinde uygulanabilecek sıkılaştırma tekniklerinden madde madde bahsedilecektir.
Ş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 kalmış kullanıcının var olup olmadığı kontrol edilmelidir. Versiyon kontrolü yapmak için aşağıdaki sorgu kullanılabilir.
Kod:
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;
Şifre Versiyonlarının Kontol Edilmesi

Oracle 10g'de parola yapısı büyük/küçük harf duyarlı (case-sensitive) olmadığından, örnek parolanın Sevim123 olduğunu varsayarsak “Sevim123” ile “sevim123” için özet değerleri birbirinin aynısı idi. Fakat bu durum 11g de değişti. 11g büyük/küçük harf duyarlı olduğundan “Sevim123” ile “sevim123” özet değerleri birbirinden farklı olacaktır. 11g'de özet değerler SYS.USER$ tablosunda parola 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ıdır. Tuzlama(Salting) metodu 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 parolaların tutuluş şekli daha güvenlidir.
Şekil -1 11g SYS.USER$ tablosunun çıktısı
Şekil -2 11g dba_users tablosunun çıktısı
Parola versiyonlarını kontrol etmek için aşağıdaki sorguyu kullanılmalıdır;
select username,şparola_versions from dba_users;
Network Trafiğinin Şifrelendiğinin Kontrol Edilmesi

Mümkünse eğer, Oracle ASO (Oracle Advanced Security) istemci, veritabanı ve uygulama sunucuları ile arasındaki network trafiğinin şifreleniyor olması gerekmektedir.
Bu konu hassas verilerin yetkisiz kişiler tarafından ele geçirilmemesi bakımından büyük önem arz etmektedir.

Şifre Politikası Kontrolü

Oracle üzerinde yaratılan her kullanıcı için şifre politikası parametrelerinin her birinin ayrı ayrı tanımlanması gerekmektedir. Aşağıdaki şifre politikasında kullanılan parametrelerin tanımları ve varsayılan değerleri yer almaktadır.
Şifre Politikası parametreleri ve varsayılan 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 parametrenin varsayılan değeri "10" dur.
PAROLA_LIFE_TIME: Bir parolanın geçerli sayılacağı maksimum zamanı gün olarak belirler. Bu parametrenin varsayılan değeri "180"dir.
PAROLA_GRACE_TIME: PAROLA_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 parametrenin varsayılan değeri "7"dir.
PAROLA_REUSE_MAX: Bir parolanın tekrar kullanılabilmesi için tanımlanması gereken minimum farklı parola sayısını belirler. Bu parametrenin varsayılan değeri “Unlimited”dır.
PAROLA_REUSE_TIME: Bir parolanın tekrar kullanılabilmesi için geçmesi gereken minimum süreyi belirler. Parametrenin varsayılan değeri “Unlimited”dır.
PAROLA_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 parametrenin varsayılan 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 kullanıcıları bağlamak daha mantıklı olacaktır. Örnek olarak kadrolu yazılımcılar için ayrı bir profil, dış kaynaklı (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 sorgu kullanılabilir.
Kod:
create profile sec_prof limit 	
 	 	 connect_time 240 	
 	 	 idle_time 30 	
 	 	 failed_login_attempts 5 	
 	 	 şparola_life_time 60 	
 	 	 şparola_reuse_time 60;
Mevcut sistemde tanımlı profilleri listelemek için aşağıdaki sorgu kullanılabilir;
Kod:
Select distinct profile from sys.dba_profiles;
Parametrelere atanmış değerleri listelemek için ise aşağıdaki sorgu kullanılabilir;
Kod:
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 için aşağıdaki sorgu kullanılabilir;
Kod:
select * from user_şparola_limits;
Sorgunun çıktısı ise aşağıdaki gibi olacaktır(Şekil-3);
Şekil -3
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.
Kod:
select * from user_resource_limits;
Sorgunun çıktısı aşağıdaki gibidir(Şekil-4);
Ş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 bellek 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.
TableSpace Kotaları’nın Kontrol Edilmesi

Üretim (production) veritabanlarında data insert'leri yalnızca uygulama şemaları altında gerçekleşiyor olması gerekmektedir. Bazı istisnai durumlarda bu yetkiler yazılımcılara da verilebilmektedir. Bu durumun sürekli olarak kontrol ediliyor olması gerekmektedir. Kullanıcı bazında şema kotlarının kontrolleri aşağıdaki sorgu ile yapılabilir.
Kod:
select * from dba_ts_quotas;
Sorgunun çıktısı aşağıdaki gibidir(Şekil-5);
Şekil -5
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 ;
Kod:
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);
Şekil -6
Spesifik Olarak Belirtilen Bir Hakkın Kontrol Edilmesi

Bir önceki maddede tüm kullanıcı ve rollerin yetkileri sorgulanmıştı. 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 yada 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;
Kod:
select * from dba_role_privs where  granted_role ='DBA';
Sorgunun çıktısı aşağıdaki gibidir(Şekil-7);
Şekil -7
Yada tüm atanmış rolleri listelemek için aşağıdaki sorgu kullanılabilir;
Kod:
select * from dba_role_privs;
Yaratılmış DB Link’lerin Kontrol Edilmesi

Oracle veritabanından 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;
Kod:
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;
Kod:
select * from  sys.dba_db_links;
Oracle Versiyon Kontrol Edilmesi

Üretici tarafından yayınlanan service pack ve yamaların kontrollü olarak uygulanması gerekmektedir. Sisteme şimdiye kadar hangi yamaların uygulanıp uygulanmadığını kontrol etmek için aşağıdaki sorgu kullanılmalıdır. Sorgu Oracle sürüm numarasından yama seviyesine kadar versiyon bilgisi verir.
Kod:
SELECT * FROM v$version;
Sorgunun çıktısı aşağıdaki gibidir(Şekil-8);
Şekil -8

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler