Microsoft SQL Sunucu Üzerinde Güvenlik Kontrolleri

2nokta

Yaşayan Forum Efsanesi
28 Şub 2013
16,689
16
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.



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

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


resim-6.png


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'

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



Sevim SESLİ, Şekerbank
08.01.2013

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

resim-12.png


SQL Sunucuda tanımlı Windows İşletim Sistemi Kullanıcı Grupları
exec xp_enumgroups

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



Alıntı:bilgiguvenligi.gov.tr/
Sevim SESLİ
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.