13 Mart 2014 Perşembe

SQL Login'lerinizin şifreleri ne kadar güvenli?

Bir SQL Server üretim ortamımızı daha güvenli hale getirmek ve bir taraftan da teftişlere hazır hale getirmek için bazı güvenlik çalışmaları yapıyordum. Bahsini ettiğim ortamda 900'den fazla SQL Login vardı. Öncelikle aşağıdaki sorgu ile bu SQL Login'lerin ne kadarının Password Policy ile kontrol edildiklerine baktım:

SELECT is_policy_checked, count(*) FROM sys.sql_logins GROUP BY is_policy_checked

Büyük çoğunluğunun herhangi bir şifre güvenliği politikasına zorlamaya tabii tutulmadığını gördükten sonra aklıma bu SQL Login'lerin birçoğunun zayıf şifreler kullanma olasılıkları geldi ve hemen şifreleri test etmeye başladım!

Öncelikle testi nasıl yaptığımdan bahsedeyim. SQL Server'da "PWDCOMPARE" adında bir Function var. Bu Function temel olarak 2 adet parametre alıyor, birincisi deneyeceğiniz şifre, ikincisi de encryption has. Bu Function hakkında daya ayrıntılı bilgiye Books Online'dan da erişebilirsiniz: http://msdn.microsoft.com/en-us/library/dd822792(v=sql.100).aspx

Aşağıdakilere benzer komutlar çalıştırdım:


SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('1234', password_hash) = 1 

SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('12345', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('123456', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('12345678', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('1', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('111111', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('qwerty', password_hash) = 1 
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('abc123', password_hash) = 1 


-- Aşağıdaki sorgu, şifresini boş bırakanları getirir
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('', password_hash) = 1 


-- Aşağıdaki sorgu ise, kullanıcı adı ile şifresi aynı olanları getirir
SELECT name FROM sys.sql_logins WHERE PWDCOMPARE(name, password_hash) = 1 

Karşılaştığım sonuçlara gelirsek, sonuç aslında tam da beklediğim gibiydi. Yukarıda belirttiğim parametrelerle onlarca kullanıcı yakaladım.

Tüm teftişler bu kadar ayrıntılı güvenlik kontrolü yapmıyorlar, aslına bakarsanız çok azı elle tutulur şeyler soruyor ve istiyor. Birçok teftiş (bankalarınkiler dahil) sadece ellerine tutuşturulan birkaç standart soruyu soruyorlar ve verdiğimiz (güvenilirliği tartışılır) kanıtları da yorumlamaktan çoğu zaman acizler. Üzgünüm, ama senelerdir karşılaştığım gerçek böyle. Eğer teftişler gerçekten işlerini düzgün yapsalar, özellikle IT tarafında (diğer taraflardan haberim yok) hem saygınlıkları ve güvenilirlikleri artacak, hem de kurumları daha güvenli çalışmaya teşvik etmiş olacaklar.

Özellikle devraldığınız SQL Server Instance'larında buna benzer güvenlik çalışmalarını yapmanızı kesinlikle tavsiye ederim. Mümkün olan her SQL Instance'ında Login'ler için Password Policy'yi etkinleştirmeye çalışmalısınız ki belli bir güvenlik politikasını tutturabilin.

Verizon Business'in 2012 veri sızması araştırması raporuna göre 2011 senesinde sızdırılan verilerin %96'sı veritabanı sunucularından alınmış. Bunun %55'inde şifresi tahmin edilebilir hesaplar kullanılmış, %40'ında ise çalınan hesap bilgileri kullanılmış. Application Security Inc'in araştırmasına göre veritabanlarına olan ilk 10 tehdidin başında şifresi zayıf veya boş olan kullanıcılar geliyor. Yani bariz bir şekilde iki çalışma da birbirini tamamlıyor. Benim yaptığım test ile, 3 çalışma da birbirini doğruluyor. Siz de kendi ortamınızda SQL Login'lerinizi test edip ve bulgularınızı paylaşırsanız sevinirim!

Ekrem Önsoy

Hiç yorum yok: