Root > Documents > Web Güvenlik Açıkları > MySQL server güvenliği
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > MySQL server güvenliği
Madde
  Yazar : MMx
  Date : 30.05.2005 14:49:11
 
# MySQL server güvenliği
 

Giris

Ocak 2005 in sonlarina dogru yeni worm benzeri bir program olan Forbot internet üstünden zayif ayarlanmis MySQL leri hedef alarak onlarin açiklarindan faydalanarak Windows host makinesine ulasmaya çalismaktadir. Forbot tam olarak bir worm degildir, çünkü yayilmasi için sürekli kontrolörüyle iletisime geçmedir. Forbot un birkez iletisimi kesildiginde yayilma botu iptal olur.

Forbot un saldiri methodunu anlamak önemlidir, çünkü herhangi bir MySQL açigi kullanmaz ve bu yüzdende yamalama gibi bir konu söz konusu degildir. Forbot hiç yönetici sifresi olmayan yada çok basit sifrelere sahip olan zayif ayarlanmis MySQL lere saldirir. Forbot un denedigi bazi sifrelere örnek vericek olursak abcd1234 ve 654321

MySQL AB, varsayilan veritabani yüklemelerinde ve gelistirilmesinde olabildigince güvenlik saglamaya çalismaktadir. Yeni teknolojileri ve son güncellemeleri kullanicilara getirmektedir. Fakat bizlerde kendi basimiza bazi özelliklere dikkate alarak MySQL imizi daha güvenli hale getirebiliriz.

Bu makalenin amaçi yöneticilerin windows ortamindaki MySQL lerini daha güvenli hale getirmelerini amaçlamistir. Bu prosedürler windows kullanicilari için yazilmis olsada benzer adimlar Linux ve Unix tede kullanilabilir. Forbot suanda windows u hedef alsada Linux ve Unix i hedef alan baska tehlikeler olabilir.

Birinci adim: MySQL i en yakin NT tabanli windowslara yükleyin

En yakin NT tabanli windows içine windows 2000, XP ve Server 2003 dahildir. Bu isletim sistemleri daha önceki isletim sistemlerinden, windows 95, 98 ve ME, daha güvenlidir.

Ve ana makinedeki isletim sistemin sürekli güncellenen, en son çikmis servis paketlerine ve yamalarina sahip bir isletim sistemi olmasi çok önemlidir.

Ikinci adim: MySQL i NTFS dosya sistemine yukleyin

NTFS, FAT32 den çok daha fazla güvenli bir dosya sistemidir. Erisim kontrolu, büyük dosya destegi, veri sifreleme gibi özelliklere sahiptir.

Üçüncü adim: MYSQL i tekil makineye kurun

MySQL server bir makineye yaninda 3üncü parti uygulama olmadan gereksiz servislerin olmadigi ve hiçbir ek programin çalismadigi makineye kurulmasi önerilir. Bu durumda server hem daha kararli olur hemde sistem kaynaklarini fazla kullanmamis olur. Ayrica makineye yönetici girisleri haricinde baska bir kullanici girisine izin verilmemelidir.

Dördüncü adim: MySQL in son sürümünü edinin

MySQL in kararli son sürümünü makinenizde olmasina dikkat edin, yeni çikmis deneme asamasinda olan sürümlerin büyük ölçekli serverlarda tüm hatalari çözümlenmedigi için kullanilmamasi önerilir. Son çikan kararli sürümlerinde önceki sürümlerde tespit edilmis hatalarin yamalari olmasi server güvenligi için çok önemlidir.

Besinci adim: MySQL kullanici hesaplarini güvenlik altina alin

Yükleme sirasinda yönetici hesabi için istenilen sifrenin güçlü olmasina özen gösterin. Bu sifrede mutlaka harf, numara ve özel karakterler içermelidir. Ve en az 6 karakter uzunlugunda ve herhangi bir sözlükte bulunmayan büyük ve küçük karakterlerden olusan söz dizimleri seçilmelidir.

Secilecek olan sifreler akilda kalici olan cümlelerin degistirilmis formatlari seklinde olabilir. Bu sayede hem güçlü bir sifreniz olur hemde beyninizi fazla zorlamaz. Örnegin su cümleyi "To be, or not to be: that is the question!" sifre olarak seçtik bunu daha kisa ama zor bir formata sokuyoruz "2b,On2b:Titq!" iste su anda bu sifre daha güvenli hale geldi (tabi ben bu makalede kullanana kadar). Bunun gibi ama daha az göz önünde olan cümleleri secerek bu tarz bir sifreleme methodu izleyebilirsiniz. Cünkü ilerde bu tarz çok bilinen cümlelerden sifre üreten zararli yazilimlar üretilebilir.

Ayrica yukleme islemi sirasinda Root May Only Connect from Localhost seceneginin secip, Create An Anonymous Account secenegini secmeyiniz. Bu MySQL inizin güvenligini baya arttiracaktir.

Daha önceden yuklenmis olan MySQL lerde bulunan Anonymous hesaplari kaldirmakta asagidaki komutla mümkündür:

Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.9-nt
 
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
 
mysql> use mysql;
Database changed
mysql> DELETE FROM user WHERE user = ’’;
Query OK, 2 rows affected (0.03 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)
 
mysql>

Buna ek olarak localhost dan girislerde asagidaki komutla sinirlandirilabilir:

Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.9-nt
 
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
 
mysql> use mysql;
Database changed
mysql> DELETE FROM user WHERE user = ’root’ AND host = ’%’;
Query OK, 2 rows affected (0.03 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)
 
mysql>

Bu sayede tek bir yönetici hesabi localhost a baglanma yetkisinde olucaktir. Ayrica asagidakini hosts dosyaniza girin (genelde C:\WINDOWS\system32\drivers\etc\hosts da bulunur)

127.0.0.1 localhost

Bu sayede MySQL user tablosunda localhost degerini çözümleyemedigi zaman giris hatasi vermesini engeller.

Altinci basamak: TCP/IP ulasimini iptal edin

Varsayilan MySQL ayarlari olarak TCP/IP ile server a baglanmak mumkundur. Bir çok durumda bu baglanti gereksizdir ve iptal edilebilir. Evet MySQL i yerel olarak gelistirme amaçli kullaniyorsaniz TCP/IP yi iptal etmelisiniz.

Bunu yapmak için yükleme esnasinda Detailed Configuration secenegini secmeli ve Enable TCP/IP Networking seceneginin secimini kaldirmalisiniz. Yuklenmis bir MySQL serverin TCP/IP baglantisini kapatmak için Baslat > tüm programlar > MySQL > MySQL Server 4.1 > MySQL Server Instance Config Wizard i secmeniz ve gerekli olan islemleri yapmaniz yeterli olucaktir.

Eski MySQL sürümleri için server ayar dosyasindaki [mysqld] bolumune asagidaki satirlari eklemelisiniz:

skip-networking

enable-named-pipes

Bu TCP/IP baglantisini iptal edicek, named pipe lari aktive edicektir. Bu is için MySQL i NT tabanli bir isletim sistemine kurmaniz ve mysqld-nt.exe yi kullanmaniz gerekmektedir. Ayar dosyanizin yeri yuklemis oldugunuz MySQLe gore degisiklik gösterebilir, su yollara bakabilirsiniz:

* C:\my.cnf
* C:\Windows\my.ini

Named pipe kullanimi

Server birkez named piped destegi ile basladimi, asagidaki su komutla baglanabilirsiniz:

C:\>mysql -h . -u root -p 

Bununla server a named pipe kullanarak baglanmis olucaksniz. 4.1 ve daha sonraki surumlerinde -h . komutu yerine --protocol=pipe komutunu kullanmalisiniz:

C:\>mysql --protocol=pipe -u root -p

Diger baglanti ve destek programlari bu baglantilar için farkli komutlar kullanbilirler, onlar hakkinda bilgi almak için programin kendi yardim ve bilgi bölümlerine bakmaniz önerilir.

Paylasimis hafizayi kullanmak

named pipelar yerine MySQL 4.1 paylasilmis hafizayida desteklemektedir. Bunu aktiv etmek için MySQL ayar dosyasinin [mysqld]  bolumune sunu eklemeniz yeterli olucaktir:

shared-memory

MySQL Configuration Wizard bu ayari yapicak ozellikle olmadigindan ayar dosyasina girilmesi gerekmektedir. MySQL Configuration Wizard in kullanicilari genelde C:\Program Files\MySQL\MySQL Server 4.1\ yolundaki my.ini dosyasinda bulunmaktadir.

Paylasilmis hafiza yardimiyla servera baglanmak için su komutu kullaniniz:

C:\>mysql --protocol=memory -u root -p

Yedinci adim: TCP/IP adresine bind

Bazi durumlarda TCP/IP baglantisini iptal etmek mümkün olmamaktadir. Bu durumda server ayar dosyasinin [mysqld] bolumune su kodun:

bind-address=127.0.0.1

eklemesi ile MySQL serverin sadece localhost a cevap vericegi saglanmaktadir. Ve diger makinelerden yapilacak hiçbir talebe cevap vermeyecektir.

Sekizinci adim: Firewall

Tüm server makineler firewalllarla korunmalidir. Bazen MySQL yerel ag içindeki clientler tarafindan kullanilmakta ve erisime açilmaktadir. Bu gibi durumlarda firewall tarafindan yerel ag ile 3306 nolu portun trafigi ayrilmalidir.

En azindan MySQL servera sadece yerel agdan ve guvenilir IP adreslerinden baglantiya izin veren bir firewall bulunmalidir. Ideal olani ise internet ile MySQL arasina hardware bir firewall konulmasidir.

Bu kullanicilarin MySQL e girisinin engellenecegi anlaminda degildir, SSH port yonlendirmesi kullanilarak firewall üzerinden MySQL e erisim mümkün olmaktadir.

Dokuzuncu adim: MySQL i limitli kullaniciyla çalistirin

MySQL yüklendiginde varsayilan ayarlari yerel sistem kullanicisiyla çalismaktir. Fakat MySQL limitli bir kullanici hesabina bagli olarakta çalisabilir.

Bunun için ilk olarak bir kullanici hesabi yaratin, adina mesela mysql diyelim ve bu kullaniciya daha önceden belirttigimiz standardlarda kuvvetli bir sifre verin. Denetim masasindaki Yönetimsel ayarlar bölümünden Servisler kismini secin ve MySQL servisini durdurun.

Servisler penceresini simge durumuna küçültüp, MySQL dizinine gidin, C:\Program Files\MySQL\MySQL Server 4.1 gibi...

Bu klasörün erisimini sadece yeni yarattigimiz mysql kullanicisina verin. Bunu yapmak için klasöre sag tiklayin ve Özellikler seçenegini seçin. Açilan pencereden Güvenlik sekmesine gidin bu sekme eger yoksa explorer penceresinin Araçlar menusunden Dosya ayarlarini seçip Görüntüle sekmesine gidin. Gelismis menusunden Basit dosya paylasimi seçeneginin isaretini kaldirin.

Güvenlik sekmesini olmayanlar için açtiktan sonra simdi o sekmeye geri gidip, önceden yaratmis oldugumuz mysql adindaki kullaniciyi sag alttaki ekle tusuna basarak ekliyecegiz, karsimiza açilan pencerenin sag altindaki Adlara bak tusuna basip Yeni görüntülünen arama butonuna basiyoruz ve buradan mysql adindaki kullanici hesabini seçiyoruz.

mysql kullanici hesabi eklendiginde asagidaki yetki listesinden her seçenege izin veriyoruz. Uygula - Tamam diyip o pencereyi kapatiyoruz.

Dizin yetkilendirmesi basariyla tamamlandiktan sonra servisler listesine geri dönüyoruz ve MySQL servisinin Log on (giris) sekmesini seçip This account adindaki radyo butonuna basiyoruz ve yaratmis oldugumuz mysql kullanicisinin bilgilerini giriyoruz.

Tüm bunlari yaptiktan sonra Uygula - Tamam diyoruz ve Servis listesinden MySQL servisini tekrar baslatiyoruz. Artik MySQL servisimiz limitli bir kullanici hesabina bagli olarak çalisacaktir.

Onuncu adim: Veri klasörünüzü sifreleyin

MySQL de önemli verilere sahip olan kullanicilarin NTFS dosya formatinda bulunan bu özelligi kullanmalarida mümkünüdür. Sifreleme yapmadan önce MySQL servisini durdurmaniz gerekmektedir.

Fakat bu özelligin kullanilmasi MySQL performansini düsürecegi bilinmelidir. Ayrica sifreleyici anahtarin kaybolmasi durumunda tüm verilerin kaybolacaginida unutmamak gerekir.

Sonuç olarak gerçekten gerekmedikce dosya sifreleme islemlerinin yapilmamasi önerilir, hem performasn için hemde olasi veri kayitlari için. Ve sadece ileri düzey kullanicilar tarafindan yapilmadir.

Sifrelenmis bilgilere herhangi bir yardimci programla ulasilamyacagininda bilinmesi gerekir.

Onbirinci adim: Sadece gerektigi kadar yetki

Yeni bir kullanici aciyoruz diyelim bu kullaniciya veritabani üstünde hertürlü yetkiyi vermek oldukca yanlis bir davranistir. Sistem güvenligi için genel olarak kullanicilara olabildigince az yetki vermeyi hedef almalisiniz.

Bunu MySQL e baglantida yapicaksaniz, belli bir IP adresinden sadece belli kullanicilarin girmesini saglayarak yapabilirsiniz.

Bunun için kullanicagimiz komut:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON fictional.* TO ’bob’@’192.168.1.%’;

Bu kod yardimiyla fictional veritabaninda 192.168.1.X (0 <= X <= 255) iplerinden sadece bob kullanicisina izin verir.

Onikinci adim: Yönetici adini degistirin

Yönetici adlarinin root,admin, administrator gibi olmasi gerekmemektedir. Bu gibi kullanici adlari forbot gibi zararli yazilimlar için ilk denenicek olasiliklardir.

MySQL in yönetici adini degistirmek için asagidaki komutu kullaniniz:

Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.9-nt

Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.

mysql> USE mysql;
Database changed
mysql> UPDATE user SET user=’bob’ WHERE user=’root’;
Query OK, 1 row affected (0.19 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.23 sec)

Bu kod sayesinde root adli kullanici ki bunu yönetici adi olarak düsünüyoruz bob ile degistirilir.

Dilediginiz bir kullanici ismi verebilirsiniz, zararli yazilimlarin tahminini zorlastirmak için degisik adlar bulmanizi öneririz.

Sonuç

Birkaç ufak tefek adimlarla Windows ortaminda MySQL inizi ve içindeki bilgileri zararli kodlardan koruyabilirsiniz. Güvenlik için en önemli noktari terkar edersek; varsayilan kullanici güvenligi, disardan girislere engel olma ve kuvvetli sifreler kullanmaktir. Güvenligi daha üst düzeylere cikarmak için MySQL e erisimi saglayan kullanicilari limitleme, yönetici adini degistirme ve hatta belkide verileri sifreleyerek yapilabilir.

Bu döküman Forbot un saldirilari baz alinarak yazilmis olsada genel bir güvenlik önlemleri hatirlatmasidir ve ilerde isinize yarayacak adimlar aciklanmistir. bu sayede ileride gelebileçek herhangi bir saldiriya karsida korunmus olucaksiniz.

Bu Döküman Cyber-Warrior.Org Haberci Grubu Tarafindan Türkçe’ye Çevrilmistir. Orjinal Döküman: http://dev.mysql.com/tech-resources/articles/securing_mysql_windows.html

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©