SQL Server — xp_cmdshell Nedir? Neden kullanılmamalıdır?

Ahmet Doruk
3 min readAug 21, 2020

--

SQL, Server, CMD, cmdshell, Windows, SMSS

Kripto, fidye (ransom) gibi virüslerin SQL Server kurulu sistemlere eriştikten sonra şifreleme yapabilmesi için çalışan servisleri durdurması gerekir.

acces denied, in use, sql, mdf, ldf

SQL Server çalışırken .mdf ve .ldf dosyalarına dışarıdan erişseniz bile veri tabanı dosyası üzerinde silme yada değiştirme gibi konularda işlem yapamazsınz. Müdahele etmek isterseniz görseldeki gibi “dosya kullanımda” uyarısı alacaksınız. Bu durum ancak SQL Server servislerinin durdurulması ile yada veri tabanı dosyasının “detach — ayırma” işlemi ile mümkün olmaktadır.

Canlı ortamlarda saldırıya uğramış makinalarda gözlemlerimize göre SQL Server oturum bilgisi ele geçirilmiş ise ilk yapılan işlem veriyi çalmak için script çalıştırarak dışarıya aktarmak, şifreleme yaparken ise servislerin durdurulmasının yada veri tabanının detach edilmesinin hemen ardından şifreleme sürecini başlatmaktır. Tehdit aktörü yada onun tarafından tasarlanmış yazılım SQL sunucuya saldırırken xp_cmdshell prosedürü ile çalışma yetkisine sahip bir kullanıcı bulmuş ise servisi durdurup şifrelemeyi başlatacaktır. Siz de hızlı tepki vermek adına hala duruyorsa gölge kopyadan veya yedekten geri dönme işlemi deneyeceksiniz ama gölge kopya silinmiş. Yedeklere yöneleceksiniz ama network ortamında bulunan yedekler de şifrelenmiş. Paranoya değil bunlar yaşanmış olaylar.

mr. robot, robot, crypto, sql, files

Xp_cmdshell Nedir?

İşletim sistemi üzerinde komut çalıştırmaya yarayan güçlü bir prosedürdür. Bu niteliği ile de en tehlikeli prosedür olmaktadır. Varsayılan (default) ayarlarda güvenlik gereği kapalı gelmektedir. Bazı özel durumlarda ise çalıştırmak gerekebilir ancak güvenliğinin iyi sağlanması gerekmektedir. İşte tam bu noktada güvenliği sağlanmadığında veri kaybı yada çalınması kaçınılmaz olur.

Sizin tarafınızdan kurulmuş bir sistemde eğer değişiklik yapmadıysanız kapalı gelmekte ama emin olmak isteyenler için aşağıdaki kod ile görebilirisiniz.

USE master;GOEXEC sp_configure 'show advanced option'
SQL, Code, View, Exec, smss
config_value 0 (paramterenin 0 olması kapalı olduğu anlamına gelmektedir)

Yetkili bir hesap “SA” gibi hesaplar bu ayarı 1 olarak değiştirmesi aşağıdaki komutla çok kolaydır.

USE master;GOEXEC sp_configure ‘show advanced option’, ‘1’;RECONFIGURE WITH OVERRIDE;

İşte bu noktada yetkili hesapları kontrol etmenizde fayda var. Yetkili hesaplar ister SQL Authentication ile bağlansın isterse Windows Authentication ile bağlansın bu ayarları değiştirebilmektedir. Aşağıdaki görselde ise bu prosedürü değiştirme yetkisi olmayan bir hesap ile sorguyu çalıştırdığımda değişiklik yapamayacağımı belirten bir uyarı aldım.

sp_procedure, xp, cmd, sql, querry
Parametreyi değiştirmek için yetkiniz bulunmamaktadır.

Gördüğünüz gibi login bilgisini değiştirerek yetkileri iyi ayarlayarak SQL sunucumuza basit ama çok önemli bir güvenlik sıkılaştırmasını yapabiliriz.

Xp_cmdshell komutları ile neler yapılabilir?

  • SQL Server servisleri durdurulabilir (Database Engine, Server Agent vs.)
  • SQL yüklemesi kaldırılabilir
  • Yedekler silinebilir
  • Keylogger yüklenerek daha detaylı bilgiler ele geçirilebilir.
  • Lokal Admin yetkisinde kullanıcı oluşturulabilir, şifresi değiştirilebilir
  • Domain Admin şifresi ele geçirilerek tüm network ortamına hakim olunabilir.

xp_cmdshell prosedürü açık ise basit bir örnek ile işletim sistemi seviyesinde yapılabilen bir işlem olan bir dizinden diğerine dosya kopyalama işlemine örnek;

xp_cmdshell ‘copy c:\backup d:\yeni klasör’;

En başında da söylediğimiz gibi tek bir komut ile SQL sunucusunun servisleri durdurularak veritabanı dosyalarının şifrelenmesinin önünü açarak maddi kayıplara ve sistem kesintilerine sebep olabilen güçlü ama çok tehlikeli bir özelliktir.

--

--

Ahmet Doruk
Ahmet Doruk

Written by Ahmet Doruk

IT Manager, Consultant, System Admin | Message for freelance works; www.linkedin.com/in/ahmetdoruk/

Responses (1)