Pazar, Şubat 16, 2025
Ana SayfaYazılarSiber GüvenlikMySQL Sunucularında Sıkılaştırma/Güvenlik Adımları

MySQL Sunucularında Sıkılaştırma/Güvenlik Adımları

Bu yazımda “MySQL sunucusu olan kurumlar sıkılaştırma/güvenlilik adımları olarak neler uygulayabilir?” sorusunu cevaplayacağım.

MySQL Nedir?

MySQL, Yapılandırılmış Sorgu Diline (SQL) dayanan açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir (RDBMS). Dünyanın en popüler veritabanlarından biridir ve milyonlarca web sitesi ve uygulama tarafından kullanılmaktadır.

MySQL sunucuları, işletmeler ve kuruluşlar için kritik öneme sahip verileri depolayan önemli bir bileşendir. Bu veriler, müşteri bilgileri, finansal bilgiler ve hassas ticari sırları içerebilir. MySQL sunucularının güvenliğini sağlamak, bu verilerin güvenliğini sağlamak için kritik öneme sahiptir.

Güvenlik Kontrol Listesi

MySQL veritabanı güvenliği için izlenmesi gereken güvenlik kontrol listesi:

1. Güçlü Parolalar Kullanmak:

• En az 12 karakter uzunluğunda karmaşık şifreler kullanılmalı.

• Büyük harf, küçük harf, rakam ve özel karakterleri içeren şifreler tercih edilmeli.

2. Root Kullanıcısını Kısıtlamak:

• Root kullanıcısının uzak bağlantıları engellenmeli.

• Root kullanıcısına sadece güvenli bir yerel ağdan erişime izin verilmeli.

3. Düzenli Olarak Yedekleme Almak:

• Otomatik yedekleme süreçleri oluşturulmalı ve düzenli olarak yedekler alınmalı.

• Yedeklemeler güvenli bir yerde saklanmalı ve geri dönüş yapılabilir olmalı.

4. Güvenlik Duvarı (Firewall) Kullanılmak:

• MySQL sunucusuna gelen trafiği filtrelemek için güvenlik duvarı kullanılmalı.

• Yalnızca güvenilir IP adreslerinden gelen trafik kabul edilmeli.

5. Düzenli Olarak Güncellemeleri Takip Etmek:

• MySQL ve işletim sistemi gibi yazılımlar düzenli olarak güncellenmeli.

• Güvenlik yamaları ve güncellemeler takip edilmeli ve en kısa sürede uygulanmalı.

6. Yetkilendirmelerde Dikkatli Olmak:

• Kullanıcılara sadece gerekli yetkiler verilmeli.

• Özel işlemler gerektiren kullanıcılar için sınırlı yetkiler tanımlanmalı.

7. Parolaları Güvenli Bir Şekilde Saklamak:

• Parolaları veritabanında düz metin olarak saklamak yerine, parola karma fonksiyonları (hash functions) kullanılarak saklanmalı.

• Parolaları düzenli olarak değiştirme politikaları oluşturulmalı.

8. Auditing (Denetim) Etkinleştirmek:

• MySQL sunucusunda denetim (audit) günlükleri etkinleştirilmeli.

• Günlükler düzenli olarak kontrol edilmeli ve anormal aktivitelerde teyit alınmalı.

9. Başarısız Giriş Denemelerini İzlemek ve Kısıtlamak:

• Saldırganlar, kullanıcı hesaplarına sürekli olarak farklı kullanıcı adı ve parola kombinasyonları deneyerek sunucuya erişmeye çalışabilirler. Bu yüzden başarısız giriş denemeleri izlemek için bir mekanizma kurulmalı ve saldırılarına karşı otomatik engelleme önlemleri uygulanmalı.

• SIEM çözümleriyle aktiviteler izlenebilir ve kurallar ile brute force aktiviteleri tespit edilebilir.

Örnek Kural:

index=<your_index_name> sourcetype=<your_sourcetype> “authentication failure” | stats count by src_ip | where count > 10 | table src_ip, count

10. Sunucunun Fiziksel ve Ağ Güvenliğini Sağlamak:

• Sunucu güvenli bir fiziksel konumda saklanmalı.

• Ağ güvenliğini artırmak için şifreli bağlantılar ve VPN gibi güvenli iletişim yöntemleri kullanılmalı.

11. Veri Gizliliğini Korumak:

• Depolama ortamlarındaki hassas veriler şifrelenmeli.

• SSL/TLS gibi güvenli iletişim protokolleri kullanılarak veri trafiği şifrelenmeli.

12. Tarayıcıdan Gelen Enjeksiyon Saldırılarını Engellemek:

• Parametreli sorgular kullanılarak güvenli sorgular oluşturulmalı.

• Hazır ifadeler (Prepared Statements) kullanılmalı.

• Güçlü giriş doğrulama mekanizmaları oluşturulmalı.

• SIEM çözümleriyle aktiviteler izlenebilir ve kurallar ile injection aktiviteleri tespit edilebilir.

Örnek Kural:

index=<your_index_name> sourcetype=<your_sourcetype> (http_method=GET OR http_method=POST) | rex field=_raw “(?\?.*)” | search query_string=”*%27*” OR query_string=”*%3D*” OR query_string=”*%22*” | stats count by client_ip, query_string, uri, host | where count > 5 | sort – count

13. Düzenli Güvenlik Denetimleri Yapmak:

• Sistem güvenliğini değerlendirmek için düzenli güvenlik denetimleri yapılmalı.

• Zafiyet tarama araçları kullanarak sistemdeki güvenlik açıkları tespit edilmeli ve düzeltilmeli.

14. Uzak Bağlantıları Kısıtlamak:

• MySQL, varsayılan olarak uzak bağlantıları kabul eder. Bu, bir saldırganın veritabanınıza uzaktan erişmesine izin verebilir. Uzak bağlantıları kısıtlamak için, MySQL yapılandırma dosyasında (my.cnf) bind-address ayarı değiştirilir. Bu ayar, MySQL sunucusunun yalnızca belirli bir IP adresinden veya aralığından bağlantıları kabul etmesini sağlar.

• SIEM çözümleriyle aktiviteler izlenebilir ve kurallar ile Uzak Bağlantı aktiviteleri tespit edilebilir.

Örnek Kural:

index=<your_index_name> sourcetype=<your_mysql_sourcetype> | stats count by src_ip, dest_ip, dest_port | where dest_port=3306 | table src_ip, dest_ip, count

15. Anonim Kullanıcıları Silmek:

• MySQL, varsayılan olarak anonim kullanıcıları etkinleştirir. Anonim kullanıcılar, veritabanına şifre olmadan erişebilir.

• Güvenli bir MySQL sunucu için aşağıdaki sorgunun sonuç dönmemesi gerekmektedir.

mysql> select * from mysql.user where user=””;

• Anonim kullanıcıları silmek için, aşağıdaki komut kullanılabilir:

mysql> DROP USER “”;

16. Her Uygulama İçin Ayrı Kullanıcılar Oluşturmak:

• Her uygulama için ayrı kullanıcılar oluşturmak, veritabanının güvenliğini artırır. Bu, bir uygulamanın ele geçirilmesi durumunda, diğer uygulamaların etkilenmemesini sağlar.

17. DDoS Saldırılarına Karşı Önlem Almak:

• DDoS saldırılarını algılayabilen ve engelleyebilen güvenlik duvarları kullanılmalı.

• Yük dengeleyici (Load Balancer) gibi cihazlar kullanılmalı.

• Dağıtılmış saldırı algılama sistemleri (IDS/IPS) kullanılmalı.

• SIEM çözümleriyle aktiviteler izlenebilir ve kurallar ile DDoS aktiviteleri tespit edilebilir.

Örnek Kural:

index=<your_index_name> sourcetype=<your_sourcetype> | stats count by src_ip, dest_ip, dest_port | where count > 1000 | table src_ip, dest_ip, dest_port, count

18. MySQL’in Yerel Dosya Sistemi ile İletişim Kurabilmesini Engellemek:

• MySQL, yerel dosya sistemi ile iletişim kurma yeteneğine sahiptir. Bu, MySQL’in yerel dosya sisteminde depolanan verilere erişmesine ve bunları yönetmesine olanak tanır.

• Yerel dosya sistemine erişim yetkisi vermek, güvenlik açıklarını potansiyel olarak artırabilir. Saldırganlar, bu yetkilere sahip bir MySQL kullanıcısı ile yerel dosya sistemine erişebilir ve zararlı işlemler gerçekleştirebilir.

• Bu saldırının önüne geçebilmek için MySQL’in yerel dosya sistemi ile iletişim kurabilmesini engellemek gerekmektedir.

• MySQL sunucusunun konfigürasyon dosyası (my.cnf veya my.ini olarak adlandırılır) üzerinde düzenlemeler yapılması gerekmektedir. Konfigürasyon dosyasında local-infile parametresini devre dışı bırakarak yerel dosya sistemine erişimi engellenebilir. Bu parametre aşağıdaki gibi ayarlanarak devre dışı bırakılabilir:

local-infile=0

Referanslar :

https://www.mehmetince.net/mysql-veri-tabani-guvenligi-checklist/

https://medium.com/@kadircolak1999/mysql-veritaban%C4%B1-g%C3%BCvenli%C4%9Fi-98875b766a29

İLGİLİ PAYLAŞIMLAR

En Popüler Yazılar

Son Gönderiler