Güvenilir Olarak Konfigüre Edilmemiş Olan MS SQL Veritabanında TRUSTWORTHY Özelliğinin Etkinleştirilmesi ve Bu Özelliğin Güvenlik Risklerinin İncelenmesi

0
1339
views
MSSQL veritabanı yönetiminde, bir vertabanı nesnesi, başka bir veritabanının kaynaklarına (ağ paylaşımına, postalarına, prosedürlerine, fonksiyonlarına, nesnelerine,…) erişim sağlayabilir. Bunun için kaynaklara erişecek veritabanının TRUSTWORTHY özelliği etkinleştirilir. Bu yazıda güvenilir olarak yapılandırılmamış olan bir MS SQL veritabanı sunucusundaki bir veritabanının TRUSTWORTHY özelliği etkinleştirilecek ve bu özelliğin güvenlik riski incelenecektir.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

TRUSTWORTHY özelliği ON ise CLR kullanan veritabanı nesneleri, MSSQLSERVER servis kullanıcısının yetkileri dahilinde dış kaynaklara ulaşabilir. Eğer veritabanında TRUSTWORTHY özelliği “OFF” ise, CLR nesneleri, dış bir kaynağa ulaşmaya çalışırsa, hata alınır. Ayrıca, yazılım geliştirirken Assembly dosyalarını MS SQL Server içine gömmek gerekebilir. Bu durum için de veri tabanında “db_owner” haklarına sahip olmak, işletim sisteminde SYSTEM yetkilerine sahip olmak veya veri tabanında “sysadmin” rolüne sahip olmak gereklidir.

 

1) Durum: Güvenilir Olmayacak Şekilde Ayarlanmış Olan Veritabanı Sunucusunda TRUSTWORTHY Özelliğinin Etkinleştirilmesi

Trustworthy özelliği etkinleştirilecek olan MS SQL veritabanının IP adresi 172.22.71.247 olsun. Bu veritabanı güvenilir olmayan şekilde ayarlanmış olsun. Veritabanı sunucusundaki “test” adlı bir kullanıcı, standart bir veritabanı hesabıdır:

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-01

“test” hesabı MUSTERILER veritabanında “db_owner” rolüne sahiptir:

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-02

“sa” hesabı da MUSTERILER veritabanında “db_owner” rolüne sahiptir:

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-03

Not: Benzer olarak “deneme” adlı standart veritabanı kullanıcısı da HESAPLAR adlı veritabanında “db_owner” rolüne sahiptir.

Not: MS SQL veritabanı sunucusunda “test” (ve “deneme”) adlı standart yetkili kullanıcı ile “sa” gibi yetkili bir kullanıcının MUSTERILER (ve HESAPLAR) adlı bir veritabanında “db_owner” gibi ortak/yüksek yetkili olması veritabanı sunucusunun doğru bir şekilde konfigüre edilmemesinden kaynaklanmaktadır.

MUSTERILER veritabanının TRUSTWORTHY özelliği aşağıdaki gibi etkinleştirilmiştir:

ALTER DATABASE MUSTERILER SET TRUSTWORTHY ON

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-04

Benzer olarak HESAPLAR veritabanının TRUSTWORTHY özelliği de etkinleştirilir.

Sonuçta MUSTERILER veritabanının TRUSTWORTHY özelliği True olarak görüntülenmektedir:

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-05

Özetlemek gerekirse, MUSTERILER ve HESAPLAR veritabanları için TRUSTWORTHY etkindir. MUSTERILER veritabanında “sa” ve “test” hesapları, HESAPLAR veritabanında “sa” ve “deneme” hesapları db_owner rolündedir.

SELECT a.name,b.is_trustworthy_on
FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name;
GO

use HESAPLAR
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
GO

use MUSTERILER
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
GO

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-06

 

2) Tehdit: Güvenilir Olmayacak Şekilde Ayarlanmış Olan Veritabanı Sunucusunda TRUSTWORTHY Özelliğinin Tehlikesi

Eğer MSSQL sunucuda bir veritabanı TRUSTWORTHY olarak ayarlanmış iken, bu veritabanının sahibi (“sa”) yüksek yetkili (veritabanı sunucusu üzerinde yetkili) ise ve MS SQL Server üzerindeki standart yetkilere sahip bir kullanıcı hesabı (web uygulamasına ait bir veritabanı kullanıcısı veya test amaçlı oluşturulmuş olan “test” hesabı gibi) da bu veritabanında tam yetkili (“db_owner” rolüne sahip) ise; standart yetkilere sahip olan hesap (“test”), veritabanının sahibinin yetkisi (“sa”) ile komut çalıştırılabilir. Örneğin, MSSQL sunucuda standart haklara sahip bu kullanıcı, kendisine MSSQL sunucusu üzerinde “sysadmin” rolü verebilir. Böylece MSSQL sunucusu üzerinde hak yükseltme işlemi gerçekleştirmiş olur.

 

3) Önlem: TRUSTWORTHY Özelliği Etkinleştirilen ve Güvenilir Olmayacak Şekilde Ayarlanmış Olan Veritabanı Sunucusunda Alınabilecek Önlemler

Belirtilen hak yükseltme zafiyetinden korunmak için, TRUSTWORTHY özelliği etkin olan ve sahibi “sysadmin” rolünde olan veritabanları tespit edilmeli, sonra da -zorunlu değilse- veritabanlarından bu özellik devre dışı bırakılmalıdır. Bu amaçla aşağıdaki komutlar kullanılabilir.

SELECT SUSER_SNAME(owner_sid) AS DBOWNER, d.name AS DATABASENAME FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
INNER JOIN sys.databases d on suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1 AND d.name NOT IN (‘MSDB’) and r.type = ‘R’ and r.name = N’sysadmin’
GO

ALTER DATABASE MUSTERILER SET TRUSTWORTHY OFF
GO

ALTER DATABASE HESAPLAR SET TRUSTWORTHY OFF
GO

enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server-07

Benzer olarak gerekli değilse üzerinde TRUSTWORTHY özelliği etkin olan veritabanlarında bu özellik devre dışı bırakılmalıdır.

 

Kaynak:

Hacking SQL Server Stored Procedures – Part 1: (un)Trustworthy Databases

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.