|
Welcome,
Guest
|
|
Kişi/kurumlar için en değerli varlık olan veri’nin işlenip bilgi’ye dönüşmesi günümüzde fark yaratacak en önemli unsurdur. Bu açıdan bakıldığında, veri/bilgi kişi/kurumlar için hayati derecede değer taşımakta, güvenliğinin sağlanması da en çok dikkat edilmesi gereken konu haline gelmektedir.
Veri/Bilgi’nin güvenliğinin sağlanması için gizlilik (confidentiality), erişilebilirlik (availability) ve bütünlük (integrity) kırılımları göz önünde bulundurulmalıdır. Doğru veri/bilgiye gerektiğinde sadece yetkilendirilmiş kişilerin güvenli yöntemlerle erişiyor olması sağlanmalıdır. Bu yazıda, veri-bilginin saklandığı veritabanı ortamlarından biri olan Microsoft SQL üzerindeki güvenlik kontrollerinden aşağıda sırası ile bahsedilecektir. MS SQL Server Versiyon Kontrolü Üretici tarafından yayınlanan service pack ve patch'ler kontrollü olarak uygulanmalıdır. Sisteme şimdiye kadar hangi patch'lerin uygulanıp uygulanmadığını kontrol etmek için aşağıdaki sorgu kullanılmalıdır. Sorgu SQL server sürüm numarasindan patch seviyesine kadar versiyon bilgisi verir. SELECT @@version Script çıktısı ; resim-1.png Yukarıda çıktıda görüldüğü gibi güncel patch makine üzerine geçilmemiş. SQL Server üzerindeki tüm veritabanlarının listesinin alınması Sunucu üzerinde çalışan tüm veritabanı instance'larını kontrol etmek gerekmektedir. select * from sys.databases Script çıktısı ; resim-2.png SQL server üzerindeki tüm kullanıcıların Listesi Database’de yer alan tüm kullanıcılar incelenir. İşten ayrılmış kullanıcılar ile uygulama hesapları kontrol edilir. (Çalışan kullanıcı bilgileri listesinin güncel haline IK biriminden ulaşılır.) SELECT * FROM sysusers where islogin = 1 Script çıktısı ; resim-3.png DBA Hakkına Sahip Kullanıcıların Listesi Kullanıcıların neden bu yetkiye sahip olması gerektiği açıklanır. Önceden kalmış olan veya yanlışlıkla verilmiş olan yetkiler var ise bunlar geri alınmalıdır. Sorgu SQL Server üzerinde tanımlı tüm DBA ‘lerin listesini verir. sp_helprolemember db_owner Script çıktısı ; resim-4.png Select dışında yetkisi olan kullanıcı listesi ve yetkileri Burada beklenilen database’de update, delete vs gibi (DML) kritik yetkilerin sadece yetkili kullanıcılarda olması gerektiğidir. Denetimlerde, bu yetkilerin “Görevler Ayrılığı” ve “En Az Haklar” prensiplerine uygun olduğu gösterilmesi beklenmektedir. SELECT a.*, b.* ,* FROM sys.database_principals a INNER JOIN sys.database_permissions b ON b.grantee_principal_id = a.principal_id WHERE b.permission_name not like '%SELECT%' Script çıktısı ; resim-5.png Şifresi boş olan kullanıcıları bulma SQL Server 2005/2008 de password'u boş olan SQL kullanıcıları aşağıdaki sorgu ile bulunabilir. select name from sys.sql_logins where pwdcompare('', password_hash) = 1 Özellikle sa kullanıcısı kontrol edilmelidir. Password Policynin Çekilmesi SQL server üzerinde kullanıcı password‘ü yaratılırken password policy’nin uygulanıp uygulanmadığı (Enforce Password Policy) kontrolünü ve expiration policy’nin uygulanıp uygulanmadığı aşağıdaki sorgu ile görüntülenebilir. Enforce Policy: Şifre politikası (lock, örn. 5 dk içinde 7 kez yanlış girilirse 20 dk. lock kalsın) Expiration Policy: Şifre politikası (expire, örn. 42 günde bir şifre değiştirilsin) select name, is_expiration_checked, is_policy_checked, * from sys.sql_logins where is_expiration_checked = 0 or is_policy_checked= 0 Script çıktısı ; resim-6.png Sorgunun çıktısında da görüldüğü üzere is_expiration_checked kolonu “0” gelenler expiration policy uygulanmayan kullanıcıları , is_policy_checked kolonu ”0” gelenler enforce password policy uygulanmamış kullanıcıları ve her iki kolon değeri de “0” gelen kullanıcılar ise her iki politikanın da uygulanmamış olduğu kullanıcıları listeler. Windows authentication ile SQL Server’a Bağlanan Kullanıcı Listesi SQL server üzerinde tanımlı olan kullanıcılardan windows login olarak yaratılmış olan kullanıcılar server‘ın kurulu olduğu makineye bağlandıkları anda tool (Management Studio vs) aracılığı ile sql server‘a şifre sormaksızın login olabiliyorlar demektedir. Bu durum güvenlik açığına neden olduğundan bu kullanıcıların sql server login olarak güncellenmesi daha doğru olacaktır. (Kurum risk yaklaşımına göre, kabul edilebilir. Edilmiyorsa, işletim sistemi kullanıcıları ile SQL’e bağlantıya izin verilmemeli, local SQL authentication kullanıcılar yaratılmalıdır.) Select * from sys.server_principals where type_desc = 'WINDOWS_LOGIN' Script çıktısı ; resim-7.png SQL authentication ile SQL Server’a Bağlanan Kullanıcı Listesi SQL login’de kullanıcılar SQL veritabanında yaratılır, işletim sistemi seviyesinde yaratılmaz. Yukarıdaki maddede WINDOWS_LOGIN olarak tanımlı kullanıcılar listelenmişti, aşağıdaki sorgu ile de 'SQL_LOGIN' olarak tanımlı kullanıcılar listelenebilir. Select * from sys.server_principals where type_desc = 'SQL_LOGIN' Script çıktısı ; resim-8.png Backup Operator Hakkına Sahip Kullanıcı Listesi Kullanıcıların neden bu yetkiye sahip olması gerektiği açıklanır. Önceden kalmış olan veya yanlışlıkla verilmiş olan yetkiler var ise bunlar geri alınmalıdır. Sorgu SQL Server üzerinde tanımlı tüm db_backupoperator yetkisine sahip kullanıcıların listesini verir. sp_helprolemember db_backupoperator Script çıktısı ; resim-9.png Ayrıca, bu rolün hangi yetkilere sahip olduğu kontrol edilmelidir. (drop table varsa gerekli mi vb.) SQL server üzerindeki tüm SYNONYM lerin listesi Adından anlaşılacağı gibi tablo üzerinde public synonym oluşturulursa tüm veritabanı kullanıcıları bu synonym’ler üzerinden tabloları okuyabilir, güncelleyebilir vs. duruma gelebilmektedir. Dolayısıyla bu açıdan bakıldığında synonym’ ler veri güvenliği açısından kullanılması pek istenilmeyen nesnelerdir. Database’de kullanılan synonym’ leri listelemek için aşağıdaki sorgu kullanılabilir; select * from sysobjects where xtype = 'SN' Manuel yaratılmış Roller tanımlanmış memberları ve default tanımlı roller Manuel olarak Sql Server üzerinde yaratılan roller aşağıdaki sorgu ile listelenmektedir. select name , * from sys.database_principals where type='R' and principal_id>0 and is_fixed_role=0 Script çıktısı ; resim-10.png Bu madde ile database’de yer alan tüm kullanıcılara ve rollere verilmiş olan yetkiler gösterilmektedir. Kullanıcılara atanmış roller Güvenlik rolüne atanmış kullanıcıları listelemek için; select dp.name from sys.database_role_members drm inner join sys.database_principals dp on drm.member_principal_id =dp.principal_id where drm.role_principal_id =( select principal_id from sys.database_principals where name ='guvenlik') Role ve kullanıcılara atanmış yetkiler incelenmelidir. SQL Server üzerinde tanımlı manuel ve default olarak tanımlı tüm rolleri listelemek için ; SELECT * FROM sysusers where issqlrole = 1 Script çıktısı ; resim-11.png Yukarıdaki çıktıyı incelediğimizde altuid kolonu “1” den farklı olarak gelenler manuel tanımlanmış olan roller,“ 1” olarak gelenler ise kurulumla beraber olarak gelen rollerdir. SQL Server Linked Server Kontrolü Farklı iki veritabanı üzerinden tek bir query penceresinde tabloları birbirine bağlayarak çektiğimiz sorgular için kullandığımız linklerin listesini alabilmek için aşağıdaki sorgu kullanılabilir. Bu linklerin ne amaçla kullanıldığı kayıt altına alınmalı, test ortamlarıyla üretim ortamları arasında bu tür bağlantılara izin verilmemelidir. exec sp_linkedservers Script çıktısı ; resim-12.png SQL Sunucuda tanımlı Windows İşletim Sistemi Kullanıcı Grupları exec xp_enumgroups SQL sunucunun işletim sisteminde tanımlı kullanıcı gruplarının kontrol edilmesi gereklidir. (Örn. Local Administrators grubuna üye kullanıcıların SQL servisi üzerinde yönetici hakkı vardır.) |
|
|
Please Log in or Create an account to join the conversation. |
