Saldırı Yüzeyi: Gizli Güven Sınırları Olarak Veritabanı Bağlantıları

Active Directory sızma testlerinde operatörler çoğu zaman yalnızca LDAP, Kerberos ve Domain Controller saldırı yollarına odaklanır. Oysa etki alanına üye sunucularda çalışan veritabanı servisleri, etki alanı ve orman sınırlarını aşan bağımsız kimlik doğrulama köprüleri kurar. Bu köprüler envanterde nadiren görünür; çünkü bir uygulamanın çalışması için kurulmuşlardır ve güvenlik açısından çoğu zaman gözden kaçarlar.

Microsoft SQL Server mimarisinde Linked Server (Bağlantılı Sunucu), yerel bir SQL örneğinin harici bir veritabanı örneğine karşı dağıtık sorgular ve uzak yordam çağrıları (RPC) yürütmesini sağlar. Buradaki kritik nokta şudur: SQL Server, istemcinin orijinal Kerberos kimliğini uzak hedefte kullanılan kimlik bilgisinden bilinçli olarak ayırır. Bir linked server sabit bir login eşlemesiyle yapılandırıldığında süreç şöyle işler:

  1. İstemci, geçerli domain kimlik bilgileriyle yerel SQL örneğinde oturum açar.
  2. İstemci, bağlantılı sunucuyu hedefleyen bir sorgu veya RPC isteği gönderir.
  3. Yerel SQL Server süreci, sys.linked_logins tablosunda tanımlanmış statik kimlik bilgilerini (örneğin yüksek yetkili sa hesabını) kullanarak hedef sunucuya bağımsız bir bağlantı kurar.
  4. Uzak sunucu, komutu eşlenen login’in güvenlik bağlamında çalıştırır. Böylece Active Directory orman güven sınırları, SID filtering ve Kerberos bilet doğrulaması tamamen devre dışı kalır.

Dördüncü adım işin özüdür: Uzak sunucu, gelen bağlantının hangi ormana ait olduğunu ya da istemcinin gerçek kimliğini görmez. Yalnızca yapılandırılmış SQL login’inin güvenlik bağlamını uygular. Bu yüzden bir ormanda ele geçirilen sıradan bir hesap, başka bir ormanda hiçbir kullanıcı barındırmadan oradaki veritabanı üzerinden işletim sistemi komutu çalıştırabilir.

GOAD ortamında bu mimari tam olarak bunu mümkün kılar: north.sevenkingdoms.local etki alanında ele geçirilen bir servis hesabı, Active Directory orman güveni üzerinden kimlik doğrulamadan essos.local etki alanındaki bir sunucuda essos domain principal’ı olarak işletim sistemi komutları çalıştırır.


1. Aşama: Yerel Veritabanı Dayanağı ve Yetki Doğrulama

GOAD değerlendirmesinin ikinci aşamasında, Kerberoast edilebilir bir Service Principal Name’in (CIFS/thewall.north.sevenkingdoms.local) çevrimdışı kırılması jon.snow:iknownothing kimlik bilgisini verdi. Hesap dosya paylaşımı servisi için hazırlanmış olsa da aynı hesap, üye sunucu CASTELBLACK (192.168.56.22) üzerindeki SQL Server örneğinde sysadmin sunucu rolüne sahipti. Bu ayrıntı, hesabı veritabanı tarafında beklenmedik ölçüde güçlü kılar; çünkü sysadmin yalnızca veritabanı okumakla kalmaz, örnek üzerinde neredeyse tam kontrol anlamına gelir.

Tabular Data Stream (TDS, TCP port 1433) protokolü üzerinden NetExec (nxc) ile bağlanmak yüksek yetkili erişimi doğrular:

$ nxc mssql 192.168.56.22 -u jon.snow -p iknownothing -d north.sevenkingdoms.local
MSSQL  192.168.56.22  1433  CASTELBLACK  [+] north.sevenkingdoms.local\jon.snow:iknownothing (Pwn3d!)

Çıktıdaki (Pwn3d!) ifadesi, hesabın sysadmin sabit sunucu rolüne üye olduğunu gösterir. Bu rol, xp_cmdshell gibi genişletilmiş yordamları açma ve sunucu yapılandırmasını değiştirme yetkisini de beraberinde getirir. T-SQL üzerinden doğrulama şu sorgularla yapılır:

SELECT IS_SRVROLEMEMBER('sysadmin');  -- Returns 1 (True)
SELECT SYSTEM_USER, USER_NAME();       -- Returns 'NORTH\jon.snow', 'dbo'

2. Aşama: Bağlantılı Sunucu Topolojisinin Keşfi

İzleyen veritabanı bağlantılarını bulmak için SQL Server’ın meta veri katalog görünümlerini (sys.servers ve sys.linked_logins) sorgularız. Bu iki görünüm birlikte, hangi uzak örneklerin tanımlı olduğunu ve hangi yerel login’in hangi uzak login’e eşlendiğini gösterir:

-- Enumerate configured remote and linked servers
SELECT server_id, name, product, provider, data_source, is_linked, is_remote_login, is_rpc_out_enabled 
FROM sys.servers 
WHERE is_linked = 1;

-- Enumerate credential mappings for linked instances
SELECT s.name AS linked_server, l.remote_name, l.uses_self_credential
FROM sys.servers s
JOIN sys.linked_logins l ON s.server_id = l.server_id;

Aynı numaralandırmayı NetExec’in enum_links modülüyle de çalıştırabilirsin:

$ nxc mssql 192.168.56.22 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M enum_links
ENUM_LINKS  [+] Linked servers found:
ENUM_LINKS  [*]   - BRAAVOS
ENUM_LINKS  [*] Linked server: BRAAVOS
ENUM_LINKS  [*]   - Local login: NORTH\jon.snow
ENUM_LINKS  [*]   - Remote login: sa

Çıktı iki önemli şey söyler: BRAAVOS adlı bir linked server vardır ve NORTH\jon.snow yerel login’i uzak tarafta sa ile eşlenmiştir. Yani bağlantı, çağıranın kimliğini karşı tarafa taşımaz; sabit ve çok yetkili bir login’e geçer.

Protokol Mekaniği: Uzak Yordam Çağrısı (RPC) Yapılandırması

sys.servers görünümündeki iki öznitelik, komutların bağlantılı sunucuya nasıl yönlendirilebileceğini belirler:

  1. is_data_access_enabled: OPENQUERY() fonksiyonu kullanılarak dağıtık SQL sorgularının çalıştırılmasına izin verir.
  2. is_rpc_out_enabled: EXEC (...) AT [ServerName] sözdizimi kullanılarak doğrudan RPC komutlarının çalıştırılmasına izin verir.

Bu iki bayrağın anlamı pratiktir: Yalnızca veri erişimi açıksa uzak taraftan sorgu sonucu okuyabilirsin; RPC out da açıksa uzak örnekte prosedür çağırabilir, hatta xp_cmdshell gibi genişletilmiş yordamları tetikleyebilirsin. Bu ortamda BRAAVOS (192.168.56.23, essos.local ormanında) is_rpc_out_enabled = 1 ile yapılandırılmıştır ve NORTH\jon.snow üzerinden gelen tüm sorguları uzaktaki sa (System Administrator) SQL login’ine eşler. Yani north tarafında sıradan bir domain kullanıcısıyken, essos tarafında veritabanının en yetkili hesabıyla konuşursun.


3. Aşama: xp_cmdshell ile Yerel Kod Çalıştırma

Bağlantı üzerinden atlamadan önce, CASTELBLACK üzerinde işletim sistemi komutu çalıştırma yeteneğini genişletilmiş saklı yordam xp_cmdshell ile doğrularız. Üretim ortamlarında xp_cmdshell varsayılan olarak kapalıdır; ancak sysadmin rolündeki kullanıcılar bunu talep üzerine yeniden açabilir:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

NetExec üzerinden komut yürütme:

$ nxc mssql 192.168.56.22 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -x "whoami /all"
MSSQL  [+] Executed command via mssqlexec
MSSQL  north\sql_svc

Servis Kimliğinin Önemi

Komut north\sql_svc güvenlik bağlamında çalışır. Buradaki ayrıntı, sürecin hangi kimlikle başlatıldığıdır. SQL Server, yerel bir sanal servis kimliği (NT SERVICE\MSSQLSERVER) veya makine hesabı yerine bir domain kullanıcısıyla çalışacak şekilde yapılandırıldığı için bu fark kritik hale gelir:

  • Başlatılan alt süreç, north.sevenkingdoms.local içinde kimlik veren geçerli bir Kerberos biletine sahiptir.
  • xp_cmdshell üzerinden oluşturulan tüm süreçler domain ağ erişimini devralır; bu sayede SMB paylaşımları, iç LDAP dizinleri ve Kerberos KDC’leriyle kimlik doğrulamalı iletişim kurulabilir.

Kısacası xp_cmdshell, yalnızca yerel bir komut kabuğu değil, domain içinde kimlik doğrulayabilen bir süreç açar. Saldırganın elinde artık makinenin ötesine geçen bir kimlik vardır.


4. Aşama: essos.local Ormanına Bağlantılı Yürütme

BRAAVOS sa hesabına eşlendiği için komutlar bağlantı üzerinden uzakta çalıştırılabilir. Ancak önce uzak örnekte xp_cmdshell açık olmalıdır; bunu RPC bağlantısından bir yapılandırma toplu işi göndererek yaparız:

$ nxc mssql 192.168.56.22 -u jon.snow -p iknownothing -d north.sevenkingdoms.local \
    -M link_enable_cmdshell -o ACTION=enable LINKED_SERVER=BRAAVOS
LINK_ENABLE  [*] Enabling xp_cmdshell on BRAAVOS. Current value: False
LINK_ENABLE  [+] xp_cmdshell enabled on BRAAVOS

Perde arkasında şu dağıtık T-SQL ifadesi çalışır:

EXEC ('EXEC sp_configure ''show advanced options'', 1; RECONFIGURE; EXEC sp_configure ''xp_cmdshell'', 1; RECONFIGURE;') AT [BRAAVOS];

Burada sp_configure çağrısının yerel örnekte değil BRAAVOS üzerinde yürütüldüğünü unutma; yani yapılandırma değişikliği doğrudan hedef ormanda gerçekleşir. Etkinleştirmenin ardından BRAAVOS üzerinde keyfi işletim sistemi komutları çalıştırılabilir:

$ nxc mssql 192.168.56.22 -u jon.snow -p iknownothing -d north.sevenkingdoms.local \
    -M link_xpcmd -o LINKED_SERVER=BRAAVOS CMD="whoami"
LINK_XPCMD  [*] Running command on BRAAVOS: whoami
LINK_XPCMD  [+] Executed command via linked server
LINK_XPCMD  essos\sql_svc

Komut essos\sql_svc kimliğini döner. north.sevenkingdoms.local içindeki kimliği doğrulanmış bir kullanıcı, hedef ormanda hiçbir kullanıcı hesabı, hash veya Kerberos bileti olmadan essos.local içindeki Tier-1 bir sunucuda uzaktan kod çalıştırmıştır. Bu, klasik “orman güveni üzerinden geçiş” anlatısından farklıdır: Geçişi yapan şey Kerberos değil, uygulama katmanındaki sabit SQL login eşlemesidir.

SQL SERVER BAĞLANTILI SUNUCU ZİNCİRİ · GÜVEN SINIRLARINI ATLAYAN GEÇİŞ 1 · CASTELBLACK (.22) SRV02 · north domain Oturum: jon.snow (sysadmin) sp_configure xp_cmdshell, 1 Yerel SQL örneği erişimi YEREL KOD ÇALIŞTIRMA cmd.exe / powershell.exe Çalışan: north\sql_svc Durum: Yerel Sunucu Ele Geçti Keşif 2 · BAĞLANTILI SUNUCU Hedef Bağlantı: BRAAVOS EXEC sp_linkedservers data_access = 1 · rpc_out = 1 Saydam SQL tüneli GÜVENLİK HARİTASI Yerel: Tüm çağıranlar Uzak: sa (Sysadmin) Durum: Orman Geçişi Aktif EXEC AT 3 · BRAAVOS (.23) SRV03 · essos.local Uzakta xp_cmdshell tetiklendi Kerberos bileti gerekmez Güven denetimi günlüğü yok UZAK ORMANDA RCE whoami: essos\sql_svc Tier-1 Sunucu Ele Geçti DURUM: PİVOT TAMAMLANDI GÜVEN SINIRI ETKİSİ · sa ile eşleşen SQL linki, Kerberos denetimi olmadan orman güven sınırlarını deler ÇALIŞTIRMA: CASTELBLACK (north\sql_svc) → OPENQUERY(BRAAVOS) → BRAAVOS (essos\sql_svc)
Saldırı zinciri: jon.snow, castelblack üzerinde sysadmin yetkisine sahip olup north\sql_svc olarak kod çalıştırır ve sa eşlemeli linked server üzerinden sıçrayarak braavos üzerinde essos\sql_svc olarak komut yürütür.

Savunma Mühendisliği ve Tespit Telemetrisi

Adli Bilişim İzleri ve Telemetri Matrisi

Bu saldırı zinciri tek bir olayda değil, birkaç farklı telemetri kaynağında iz bırakır. Aşağıdaki tablo, hangi kaynağa ve hangi alana bakman gerektiğini özetler:

KaynakOlay Kimliği (Event ID)AçıklamaTelemetri Bağlamı
SQL Server15457Yapılandırma seçeneği değiştirildiUygulama günlüğünde show advanced options ve xp_cmdshell değerlerinin değiştirilmesini kaydeder.
Sysmon1Süreç Oluşturma (Process Creation)Ana süreç sqlservr.exe tarafından alt kabuk süreçlerinin (cmd.exe, powershell.exe) başlatılması.
Windows Security4624Başarılı Oturum AçmaBRAAVOS üzerinde, CASTELBLACK IP adresinden port 1433 üzerinden gelen Tip 3 (Network) oturumu. Active Directory referans bileti içermez.
SQL Server AuditSCHEMA_OBJECT_ACCESSSaklı Yordam Yürütmexp_cmdshell veya sp_linkedservers yürütülmesini takip eder.
// KQL Query: Detect cmd.exe or powershell.exe Spawned by SQL Server
DeviceProcessEvents
| where InitiatingProcessFileName =~ "sqlservr.exe"
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "whoami.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, AccountName

Güvenlik Sıkılaştırma ve İyileştirme Protokolleri

  1. En Düşük Yetkili Eşleme Kuralı: Uzak bağlantılı sunucu bağlantılarını asla sa ile eşlemeyin. Bunun yerine uzak örnekte, yalnızca ihtiyaç duyulan tablolara erişen ve yalnızca SELECT veya dar kapsamlı saklı yordamlarda EXECUTE yetkisi olan özel bir SQL login’i oluşturun. Böylece bir linked server ele geçirilse bile etki alanı veritabanının tamamına yayılmaz.
  2. Uzak RPC Out Özelliğini Kapatın: Raporlama için yalnızca dağıtık sorgular gerekiyorsa RPC out çağrılarını devre dışı bırakın:
    EXEC sp_serveroption @server = 'BRAAVOS', @optname = 'rpc out', @optvalue = 'FALSE';
  3. Servis Hesaplarını gMSA Mimarisine Geçirin: Veritabanı servis hesaplarını standart domain kullanıcılarından group Managed Service Account (gMSA) yapısına taşıyın. Bu yapılandırma parola kırma (Kerberoasting) saldırılarını engeller ve etkileşimli ya da ağ belirteci üretimini sınırlar.
  4. Uygulama Login’lerini sysadmin Rolünden Çıkarın: Uygulama servis hesaplarının ve geliştirici hesaplarının sysadmin sabit sunucu rolünde bulunmadığını doğrulayın. Bu roller genellikle kolaylık için verilir ve fark edilmeden kalıcı bir yükseltme yolu yaratır.

Kanıt ve sınırlar

MSSQL linked-server numaralandırması, EXECUTE AS LOGIN ile kimlik bürünme, xp_cmdshell etkinleştirmesi ve çift yönlü SRV02 ↔ SRV03 ormanlar arası sıçrama, izole GOAD laboratuvarı (192.168.56.22 ve 192.168.56.23) içinde yürütülmüştür. Tüm veritabanı login’leri ve servis hesapları GOAD’ın önceden hazırlanmış SQL Server örneklerine aittir. Buradaki sonuçlar, sabit bir sa eşlemesi ve açık RPC out gibi kasıtlı laboratuvar yapılandırmalarına dayanır; her linked server kurulumunun aynı şekilde istismar edilebileceği anlamına gelmez.

Kaynaklar

Kaynaklar ve güncellik

Bu teknik not ne kadar güncel?

Kontrol edilen kaynaklar5 Kasım 2026

En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.

İnceleme DurumuKamuya açık kaynaklar incelendi

Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.