|  | 

MySQL

Hardening MySQL

hardening mysql

MySQL için En Önemli 10 Güvenlik Önlemi ( Hardening MySQL)

Güvenlik, tüm veritabanlarında olduğu gibi MySQL içinde vazgeçilmez bir öncelik olmalıdır. Günümüzde her sistem yöneticisi (veya veritabanı yöneticisi) kendi güvenlik şablonlarını uygulasada aşağıdaki 10 adımın bu konuda bilgi almak isteyenlere yol göstereceğine inanıyorum….

10 – Her zaman sürüm notlarını okuyun!

Her yeni yayınlanan MySQL versiyonu için bir sürüm notuda beraberinden yayınlanır. Bu sürüm notlarında; yapılan değişiklikler, güncellemeler, güvenlik yamaları, çıkarılan bölümler, uyumluluk durumu gibi pek çok ÖNEMLİ detaylar yer almaktadır. Sürüm notlarının HACKER/CRACKER gibi vizyona sahip kişiler tarafından satır satır takip edilğini unutmayın. Sürüm notlarını takip ederek bir çok sistem alt edilmiştir….

9 – Yerel INI kullanmaktan KAÇININ!

Yerel INI kullanımı Kalite Testlerinde, Geliştirme Aşamasında ve Test ortamında güvenli olsa da gerçek (canlı) sistemlerde kullanılması bir faciya yol açabilir.
Basitçe açıklayacak olursak, uzak bir MySQL sunucusuna bağlanmak istediğinizde yerel INI dosyasının içeriği veya kendisi sunucu sisteme kopyalanabilir. Buda canınızı sıkacak sorunlara yol açabilir. Bu şekilde istemci taraf veya kötü niyetli kişi bu dosyanın içeriğini okuyarak sisteme sızabilir…

8 – Sistemi izleyebilidiğiniz kadar İZLEYİN!

MySQL bilgi şemalarını ( information schema) ve veritabanlarındaki değişiklikleri izlemek genellikle güvenlik için iyi bir fikir olsada zaman açısından sıkıntılı olabilir.
Zamandan kazanmak için MySQL 5.xx versiyonları ile birlikte gelen özellikler sayesinden pek çok kişisel konfigürasyon yapabilirsiniz. İstediğiniz bri veratbanındaki istediğiniz bir tablodaki herhangi bir kolonu dahi denetleyebilirsiniz ve değişiklikleri izleyebilirsiniz. Buna benzer bir mekanızma ile  USER_PRIVILEGES ( Kullanıcı İzinleri) tablosununu izlemekte güvenlik açısından önemlidir. Pek çok saldırgan ilk olarak kendisine root veya benzer bir yetki atamak isteyecektir…

MySQL Enterprise versiyonunda çok gelişmiş güvenlik modülü bulunmaktadır bu modül sayesinden ciddi güvenlik denetimleri yapabilirsiniz.

7 – MySQL suncuusyu kesinlikle ROOT olarak ÇALIŞTIRMAYIN!

MySQL sunucusunu root olarak çalıştırmak demek mysql kullanıcısına tüm yetkileri vermek demektir. Günümüzde pek çok saldırı bu basit güvenlik zaafiyeti nedeniyle yapılamktadır

Nix* sistemlerde mysql kullanıcısına mümkünse sadece mysqld için çalıştırma ve durdurma yetkilerinden başka bir yetki vermeyin.

6 – init-file İYİ mi? KÖTÜ mü?

INIT-FILE kullanmak başta iyi görünebilir fakat diğer taraftan ciddi bir güvenlik zaafiyeti oluşturmaktadır. INIT-FILE yüklenme aşamasından verileri geçici olarak hafıza kopyalamakta kullanılan MySQL’in kullanışlı bir fonksiyonu olsa da. Sisteme zarar vermek isteyen birsinin INIT-FILE içerisine kendi istediği bir kodu yerleştirerek bu zararlı kodların yükleme esnaından hafızaya da yüklenmesi ve çalıştırılmasını sağlayabilir…

5 – MySQL bağlantı bilgilerini ayrı bir dosyada düz biçimde tutun!

Çok basit bir yöntem ile MySQL bağlantı bilgilerini ayrı bir dosyada tutarak normal kullanıcıların bu bilgileri görmesini engelleyebilirsiniz. Adım adım irdeleyecek olursak.

1. /root altında .mysqldata adında bir dosya oluşturalım.
2. İçerisinde MySQL için gerekli kullanıcı adı ve şifresini aşağıdaki formatta yazalım

KullaniciAdi=Sifre

3. Bu dosyanın sahibinin root olduğundan emin olun.
4. chmod ayarının 700 olduğundan emin olun.
5. .bashrc içerisine aşağıdaki satırları ekleyelim.

Örnek:

export MYUSR=`grep KullaniciAdi /root/.mysqldata | cut -d “=” -f 2`
export MYPWD=`grep Sifre /root/.mysqldata | cut -d “=” -f 2`

Şimdi giriş denemesi yapalım:

[root@seclab.com.tr ~]# mysql -u$MYUSR -p$MYPWD seclabdb
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 34015
Server version: 5.5.1-m2-community-log MySQL Community Server (GPL)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.
(seclabdb@localhost) [(none)]>

Unutmayın bu şekilde sadece root login olabilir. Scripti kendinize uygun biçimde düzenleyerek diğer hesapalra da erişim verebilirsiniz.

4 – ALL PRIVILEGES (Tüm Yetkiler) mi? Bir daha düşünün!

Güvenlik temellerinden birisi olan “Bilmen Gerektiği Kadarını Bil” felsefesinden yola çıkarak hiç bir hesaba ALL PRIVILEGES ataması yapmayın…Kimin neye ihtyacı varsa o kadarını atayın.

Backupuser = Yerel kullanıcı, yedek almak için
Root = Yerel kullanıcı, herşeyi yapar
Replication = Replikasyon (kopayalama, eşleme) için
Herhangiuser = Yerel veya Uzak kullınıcı, SELECT,INSERT,UPDATE,DELETE vb işlemler için…

vb…

Not: Kolon seviyesinde izinlerden uzak durun bu ciddi performans kaybına yol açacaktır.

3 – Erişim Yapılandırmasında FQDN veya Hostname Kullanmayın

erişim yapılandırması ( Grant Access ) işlemlerinde FDQN veya Hostname kullanmayın. Mümkünse alt ağ ( subnet) sınırlarında tutun örneğin : 192.168.0.x. FQDN veya Hostname spoof edilebilir olduğundan saldırgan sppof edilmiş bir adres ile sisteme erişim sağlayabilir.

2 – % Kullanmak , Pazarda tezgah açmak gibidir!

Herhangi bir kullanıcı için herhangi bir host tanımlaması kullanmak (%), sunucuyu pazara açmaktan farksızdır.Mümkünse VLAN kullanın, kullanıcıları kısıtlayınve her hosttan erişim izni vermeyin.

1 – MySQL Güvenli Kurulum

En basit ve önemli bir adım da mysql_secure_installation kullanmaktır. Aşağıda bu kullanıma bir örnek göreceksiniz:

[seclab@seclab.com.tr]# /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

 

Not: Bu yazı olympos.org sitesinde de yayınlamıştır.

hardening-mysql

ABOUT THE AUTHOR

Application Security , Information and Software Security Specialist Ethical Hacker and Pentester

POST YOUR COMMENTS