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

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.

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:

https://blog.netspi.com/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.