Platform bağımsız MSSQL sorguları yapabileceğiniz ufak bir script hazırlamıştım. Temel amacım güvenlik denetimlerinde zayıf şifreye sahip Microsoft SQL veritabanlarında, Linux üzerinden belirli sorgular çalıştırabilmekti.
SQL Query Analyzer vb yazılımların bulunmadığı durumlarda basit bir osql, isql alternatifi olarak da kullanılabilir.

Microsoft SQL query yazılımına buradan ulaşabilirsiniz. Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Örnek kullanım:

$ ./mssqlquery.py -s 192.168.0.14 -u sa
Enter password for sa:
Connected to 192.168.0.14!
mssqlquery> select name from sysdatabases
master
tempdb
model
msdb
HR
CRM
mssqlquery> select @@version
Microsoft SQL Server 2008 (SP2) – 10.0.4000.0 (Intel X86)
Sep 16 2010 20:09:22
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 6.0 (Build 6002: Service Pack 2)
mssqlquery>

Bahaneyle mssqlcmd yazılımını da güncelledim. Microsoft SQL brute-force yazılımı yeni pymssql kütüphanesiyle çalışmıyor. Zaten bu işi gayet iyi yapan birden fazla yazılım olduğu için pek ihtiyaç duyulmayacağını tahmin ediyorum.

Veri hırsızlığı ne kadar gizli bilginin açığa çıkmasına neden oldu? Peki sadece Internet üzerinden sistemlere sızılarak mı bilgiler kaçırılıyor? Tabi ki sadece bu değil.

Kimlik bilgileri, şirket verileri, finansal bilgiler ve diğer kişiye/kuruma özel bilgilerdeki toplu veri kayıpları en çok kaybolan veya çalınan backup teypleri, harddiskler, laptop ve diğer donanım nedeniyle oluşuyor. Rakamlar yüzbinlerle, milyonlarla ifade ediliyor. Ve bunlar sadece bilinen veya duyulan olaylar. Bundan çok daha fazlasının duyurulmadığı, duyulmadığı ve farkedilmediğinden eminim.

Transparent Data Encryption
TDE, yani Transparent Data Encryption olarak geçen veritabanı veri şifreleme yöntemi, kodlamada, sorgularda vb. değişiklik yapmadan verilerin veritabanı tarafından disk üzerinde şifrelenerek saklanmasını temel alıyor. Veritabanı sunucularına bu özellik getirilirken, aynı zamanda performans problemlerinin oluşmasının da önüne geçilmesi sağlanmaya çalışıyor.

Oracle
Oracle ilk olarak, Oracle 10g Release 2 ile tablolarda bulunan kolonlar bazında TDE özelliğini duyurdu (Konu hakkında makale). Ancak bu şifreleme yöntemi, performans konusunda sıkıntıları da beraberinde getiriyordu.

Oracle 11g sürümü* ile gelen yeni özellikle, şifrelenmiş tablespace yaratılarak, sadece kolon değil, tablo bazında şifreleme sağlanmış oluyor.
Şifrelemeden kaynaklanan performansın önüne geçebilmek için, kullanıcı bir sorgu yaptığında sunucu veriyi buffer cache bölümüne atıyor ve veri burada şifrelenmemiş olarak hızlı erişilebilir/sogrulanabilir halde duruyor. (Encrypting Tablespaces makalesi)

Temel amaç verinin ve yedeklerinin şifrelenmiş olarak saklanması.

Microsoft SQL
Aynı şekilde Microsoft SQL 2008’de de TDE özelliği bulunuyor. Bu sayede database dosyaları (mdf) ve yedekler şifrelenmiş olarak bulunduğu için veri hırsızlığında verilerin açığa çıkması engellenmiş oluyor. SQL 2008 TDE detayları bu yazıda bulunabilir.

Sonuç
Kolon tiplerini standart kolonlardan binary tipi kolonlara dönüştürmek; SQL SELECT, INSERT vb. sorguları buna göre güncellemek ve değiştirmek; bu kolonlarda yaşanacak sorgulama problemleri; şifreleme anahtarları yönetimi; uygulama yapılarında değişiklik ve tüm bu değişiklikler sonrası yaşanan performans problemleri TDE ile büyük ölçüde rahatlatılmış oluyor.

Özellikle hassas veri barındıran kurumların ve hatta SaaS firmalarının uygulayabileceği TDE özellikleri, veritabanı yöneticilerinin ve uygulama geliştiricilerinin işlerini kolaylaştıracaktır. Şifreleme anahtarlarının da etkin bir şekilde yönetildiği durumlarda, veri hırsızlığına ve güvenliğine karşı gerekli itina gösterilerek, önlemler alınmış oluyor.

Daha önceden yayınladığım Microsoft SQL kullanarak komut çalıştırma script’inde bazı ufak düzenlemeler yaptım.
İşlevini yerine getirmek için xp_cmdshell stored procedure’ını kullandığını iletmiştim. Peki ya xp_cmdshell devre dışı bırakıldıysa veya hedef sunucu Microsoft SQL Server 2005 sürümüyse?

Bu durumda xp_cmdshell’i yeniden devreye alabilmek için aşağıdaki yöntemleri izleyebiliriz:

  1. Microsoft SQL Server 2005 sürümünde, güvenlik nedeniyle xp_cmdshell devre dışı olarak gelmektedir. Aktif hale getirebilmek için aşağıdaki sorgunun çalıştırılması yeterlidir:

    USE master
    GO
    EXEC sp_configure ‘show advanced options’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘xp_cmdshell’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘show advanced options’, 0
    GO

  2. Bir güvenlik önlemi olarak, xp_cmdshell stored procedure’ı veritabanı yöneticisi tarafından kaldırıldıysa (ki Microsoft’un bunu pek de önerdiği söylenemez), tanımlamak için xpsql70.dll dosyasının sistemde bulunması yeterli. Bunun için aşağıdaki SQL sorgusunun çalıştırılması gerekir:

    EXEC sp_addextendedproc ‘xp_cmdshell’, ‘xpsql70.dll’

mssqlcmd‘nin yeni sürümünü yine aynı yerden indirebilirsiniz.

Not: mssqlcmd.py dosyasında bu komutlar comment olarak gerekli yerlere eklenmiştir. Gerektiğinde satır başlarındaki # karakteri silinerek çalışmaları sağlanabilir.
Uyarı: Yukarıda yazan SQL sorgularının çalıştırılması ile ilgili sorumluluk kabul edilmemektedir. Gerçek sistemler üzerinde çalışmadan önce, test sistemlerinde denemeler yapın.

Hazır konu Microsoft SQL’den açılmışken, yine güvenlik denetimlerinde zayıf veritabanı şifrelerini tespit etmede kullanılabilecek bir script hazırladım.

Basit bir şekilde, username ve password wordlist kullanarak, şifre deneme-yanılma (brute force) saldırısı yapabiliyor.
Daha sonradan kullanabilmek için, bulduğu kullanıcı adı ve şifreleri bir metin dosyasında arşivliyor.
Threading desteği sayesinde aynı anda birden fazla kullanıcı adı/şifre kombinasyonu deneyerek işlemi büyük oranda hızlandırabilir. Varsayılan maksimum thread sayısını 5 olarak ayarladım. Script içerisinden kolayca değiştirilebilir.

Microsoft SQL Brute Force yazılımına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Güvenlik denetimlerinde kullanmak üzere hazırladığım bu basit script, Microsoft SQL sunucusu çalışan bir sunucu üzerinde komut çalıştırmaya yarıyor.
Bu işlevi yerine getirmek için xp_cmdshell stored procedure’ını kullanıyor. Zayıf veritabanı yöneticisi şifresi tespit edildiğinde kullanılabilir. (Örneğin ‘sa’ hesabı ve boş şifre)

mssqlcmd.py dosyasına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Symantec AntiVirus Corporate Edition yazilimin 10.1 surumune, web tabanli bir raporlama ozelligi eklenmis.

Uygulama PHP ile yazilmis, verilerini MSSQL’de tutuyor. Kurulum icin IIS ve MSSQL gerektiriyor. PHP ile ilgili ek bir kurulum veya ayar yapmak gerekmiyor. Kendisini kurarken PHP’yi de /Reporting/ klasorunde calisacak sekilde ayarliyor. Varolan bir MSSQL kullanilmazsa veya urunun kurulacagi makina uzerinde MSSQL yoksa MSDE kuruyor olabilir. Ona dikkat etmemisim.

Urunu kurdugunuz makinanin bolgesel ayarlari (regional settings) Ingilizce olmazsa problem cikartiyor. Bunun disinda yaptigim bir kurulumda, veritabaninin collation ayarinin turkce olmasindan dolayi da problem ciktigini gordum. Yani yaratilan veritabaninin da collation ayarlarinin standart olmasi gerekiyor (Sanirim Latin1_General, code page 1252 olarak geciyordu).

Reporting web arabiriminden belirli raporlar alabildiginiz gibi, belirli olaylar karsisinda alarm uretilecek sekilde ayar yapabiliyorsunuz(alerts bolumunden). Bu alarmlar veritabanina yazilabilir, mail ile gelebilir veya alarm uretildiginde alert agent icerisinde ayarlamis oldugunuz bat dosyasi calistirilabilir.

Neyse, aslinda soyleyecegim bu degildi. Reporting’i kurdugum bir yerde, urunun MSSQL ‘e baglandigi sifreyi degistirmem gerekti. Sifreyi 3 farkli yerde degistirmek gerektigi icin, ihtiyaci olanlar aramasin diye dusunerek aktarmak istedim.

  1. ODBC ayarlari: Makinanin ODBC ayarlarinda “Reporting” DSN ayarini degistirmek gerekiyor (Start > Programs > Administrative Tools > Data Sources (ODBC) icerisinde System DSN bolumunde)
  2. “C:\Program Files\Symantec\Reporting Server\Web\Resources” klasoru icerisindeki “Reporter.php” dosyasini acarak, buradaki “dbpasswd” degiskenini degistirmek gerekiyor
  3. “C:\Program Files\Common Files\Symantec Shared\Reporting Agents\Win32” klasoru icerisindeki “Reporter.conf” dosyasinda bulunan “DBPWD” degiskenini degistirmek gerekiyor

Tum bu islemler yapildiktan sonra “Reporting Agents” servisi yeniden baslatilarak, urunun problemsiz calistigi web arabirimi uzerinden kontrol edilebilir.

Google olsa da, sikca sorulan sorulardan bir tanesi. Elinizde bir Microsoft SQL veritabani sunucusu var ve SQL surum numarasindan patch seviyesini ogrenmek istiyorsunuz. SQL Query Analyzer’i kullanarak “SELECT @@version” ciktisini aliyorsunuz ve Google imdadiniza yetisiyor.

Bir cok sitede surum numarasina gore service pack seviyesini hizlica belirleyebileceginiz tablolar yeraliyor. Ancak burada bulunan SQL Server 2000 Build Chart oldukca detayli.

SQL Server 2000
Version Service Pack
8.00.2039 SQL Server 2000 Service Pack 4 (SP4)
8.00.760 SQL Server 2000 Service Pack 3 (SP3)
8.00.534 SQL Server 2000 Service Pack 2 (SP2)
8.00.384 SQL Server 2000 Service Pack 1 (SP1)
8.00.194 SQL Server 2000 RTM (Release To Manufacturing)
SQL Server 7.0
Version Service Pack
7.00.1063 SQL Server 7.0 Service Pack 4 (SP4)
7.00.961 SQL Server 7.0 Service Pack 3 (SP3)
7.00.842 SQL Server 7.0 Service Pack 2 (SP2)
7.00.699 SQL Server 7.0 Service Pack 1 (SP1)
7.00.623 SQL Server 7.0 RTM (Release To Manufacturing)
SQL Server 6.5
Version Service Pack
6.50.479 SQL Server 6.5 Service Pack 5a (SP5a) Update
6.50.416 SQL Server 6.5 Service Pack 5a (SP5a)
6.50.415 SQL Server 6.5 Service Pack 5 (SP5)
6.50.281 SQL Server 6.5 Service Pack 4 (SP4)
6.50.258 SQL Server 6.5 Service Pack 3 (SP3)
6.50.240 SQL Server 6.5 Service Pack 2 (SP2)
6.50.213 SQL Server 6.5 Service Pack 1 (SP1)
6.50.201 SQL Server 6.5 RTM (Release To Manufacturing)

SQL 2000’de “SELECT SERVERPROPERTY(‘productversion’), SERVERPROPERTY (‘productlevel’), SERVERPROPERTY (‘edition’)” sorgusu kullanilarak da ozet bilgi alinabilir.

Kaynaklar
How to identify your SQL Server version and edition
SQL Server 2000 Build Chart