Özellikle yeni başlayan penetrasyon testçileri, genel olarak veritabanı güvenliğine daha az önem verir. Veritabanı yapılandırması ve güvenlik testleri olmayan bir uygulama güvenli olamaz. Halihazırda bir veritabanı yönetim sistemi olan MySQL yazılımını kullanıyor olabilirsiniz, peki onu nasıl daha güvenli hale getirebilirsiniz? İşte izlemeniz gereken yedi adım.
1. Uzak Bağlantı Yerine SSH Tüneli Kullanın
MySQL hizmeti varsayılan olarak 3306 numaralı bağlantı noktasında çalışır. MySQL'i kurduğunuzda, 3306 numaralı bağlantı noktasının tüm bağlantılar için dinleme modunda olduğunu göreceksiniz. Haliyle, MySQL portu dış dünyaya açıktır. Bu nedenle MySQL hizmetini yalnızca yerel adresi dinleyecek şekilde ayarlamalısınız.
Sunucular genellikle bir Linux dağıtımında çalıştırıldığından, aşağıdaki örnekler bir Debian dağıtımına dayanmaktadır. Uzak bağlantı yerine SSH tünelleme ve varsayılan portu dış dünyaya kapatmak için kullanmanız gereken dosya;
/etc/mysql/my.cnf. Bu dosyada, adlı bir alan açmanız gerekir. [mysqld] ve aşağıdaki komutu yazın:[mysqld]
bağlamak-adres=127.0.0.1
Bu işlemin ardından bu dosyayı kaydetmeyi ve aşağıdaki komut ile servisi yeniden başlatmayı unutmayınız:
sudo systemctl mysqld'yi yeniden başlat
# veya
sudosistemctltekrar başlatmariadb.hizmet
Bununla, MySQL hizmeti yalnızca yerel adresi dinleyecektir.
MariaDB kullanıyorsanız, ayrıca inceleyebilirsiniz. /etc/mysql/mariadb.conf.d/50-server.cnf ve için bir tanım olup olmadığını kontrol edin bağlama adresi.
Artık bağlama adresini şu şekilde ayarladığınıza göre 127.0.0.1, yerel ana bilgisayardır, bir Nmap taraması çalıştırabilir ve çıktıyı kontrol edebilirsiniz:
127.0.0.1, gördüğünüz localhost'u temsil ettiği için MySQL portunu görebilirsiniz. Bunun çalıştığından emin olmak için bağlama adresini yeniden deneyebilir ve değiştirebilirsiniz:
[mysqld]
bağlamak-adres=127.5.5.1
Sonra kaydet /etc/mysql/my.cnf dosya ve MySQL hizmetini yeniden başlatın. Bir Nmap taraması gerçekleştirirseniz yine bu aşamada localhost üzerinde bu bind adresini görmemelisiniz.
Bunun işe yaradığını öğrendikten sonra, ilk adımdaki ayarlara geri dönün ve bağlama adresini tekrar 127.0.0.1 olarak ayarlayın ve tekrar kaydedin.
2. Yerel Dosya Erişim Bariyeri Kurun
MySQL, yerel dosya sistemi ile iletişim kurabilir. Sorgularla yerel dosya sistemindeki bir metnin içeriğini görebilir veya sorgu sonucunu bir diske yazabilirsiniz. Kötü niyetli saldırganların bu özelliği kullanmasını önlemek için MySQL'in yerel dosya sistemiyle iletişim kurmasını engellemelisiniz.
Önlem almak için local-infile adlı bir işlevi kullanabilirsiniz. Örneğin "/etc/secretfile.txt" isimli bir dosyanız olduğunu ve bu dosyada bir şifreniz olduğunu düşünün. /etc/mysql/my.cnf dosyanızdaki local-infile işlevinin değeri 1 ise, erişim açıktır. Böylece secretfile.txt dosyasına erişebilirsiniz.
Yerel dosya işlevinin değeri 1'dir. Değişikliklerin gerçekleşmesi için MySQL veritabanını yeniden başlatın. Şimdi aşağıdaki komutla MySQL'e bağlanın ve secretfile.txt dosyasını görüp göremediğinizi kontrol edin:
SEÇMEDOSYA YÜKLE("/etc/secretfile.txt");
Bilgisayarınızdaki herhangi bir dosyadaki bilgileri yakalamak zor değil.
Bu sorunu çözmek için /etc/mysql/my.cnf dosyanızdaki local-infile değerini aşağıdaki gibi değiştirin:
[mysqld]
yerel-bilgi=0
MySQL hizmetini yeniden başlatın. MySQL'e yeniden bağlanın ve önceki adımı tekrarlayın; artık dosya içeriğini görememelisiniz.
Kullanıcıların yerel dosyalarda okuma ve yazma izinleri yoksa bu dosyayı göremezler. Ancak yine de penetrasyon testlerinde ve veritabanı güvenliğinde kontrol etmeniz gereken bir şeydir.
3. Uygulama Kullanıcılarını ve Parolaları Ayarlayın
Veritabanı yönetim kullanıcısı ve veritabanına erişen MySQL kullanıcısı birbirinden farklı olmalıdır. Başka bir deyişle, uygulamaları kök kullanıcılarla MySQL'e bağlamak son derece tehlikelidir. Mümkünse performans göstermeyen uygulamaların kullanıcılarını tanımlayın. UPDATE veya INSERT işlemleri ayrı ayrı.
Bu noktada dikkat edilmesi gereken bir diğer husus da kullanıcı şifreleridir. Hemen hemen her alanda olduğu gibi, MySQL kullanıcıları için de parolaların karmaşık ve öngörülemez olması gerekir. Bu konuda yardıma ihtiyacınız varsa, kullanabileceğiniz harika şifre oluşturma sistemleri var.
4. Anonim Kullanıcıları Sil
MySQL'i varsayılan olarak kurduğunuzda, bazı anonim kullanıcılar oluşur. Bunları silmeniz ve erişimlerini engellemeniz gerekir. Güvenli bir MySQL sunucusu için aşağıdaki sorgu sonucunda herhangi bir yanıt almamalısınız:
SEÇME * İTİBAREN mysql.user NEREDEKULLANICI="";
# Örnek Çıktı
Boş ayarlamak (0,001 saniye)
Herhangi bir sonuç varsa, bu anonim kullanıcıları silmelisiniz. Örneğin, "localhost" adlı bir ortamda "anonuser" adlı anonim bir hesap varsa, bu hesabı silmek için aşağıdaki gibi bir komut kullanmanız gerekir:
KULLANICIYI BIRAK 'anonim kullanıcı'@'yerel ana bilgisayar';
5. MySQL Yerel Dosya İzinlerini Kontrol Edin
Bir veritabanı yöneticisi olduğunuzu ve bir hafta önceki verilere geri dönmek istediğinizi hayal edin. Bu durumda veritabanı sunucusuna SSH üzerinden bağlanmanız ve istediğiniz MySQL dosyalarını değiştirmeniz gerekebilir. Bunu yaparken Linux'un root kullanıcı ayrıcalıklarını kullanmış olabilirsiniz; yani veri dosyalarının sahipliği ve izinleri değişebilir. Bunu istemiyorsun.
Verilen izinleri kontrol etmek için /var/lib/mysql dizinine bakın. Burada kontrol etmeniz gereken, tüm dosyaların sahibinin MySQL kullanıcısı olup olmadığıdır. Aşağıdaki komut işinizi görecektir:
sudo ls-al /var/lib/mysql
Dosyaların okuma ve yazma izinleri sadece MySQL kullanıcısı için olmalıdır. Başka hiçbir kullanıcının herhangi bir izni olmamalıdır.
6. MySQL SSL'yi kullanın
Somut bir örnek üzerinde düşünmek, MySQL ve SSL kullanımını anlamanın en iyi yoludur. Pek çok farklı sunucunun bulunduğu ABC bölgesindeki sunuculardan birinin kötü niyetli bilgisayar korsanları tarafından ele geçirildiğini düşünün. Bilgisayar korsanları, ABC bölgesinde dahili bir tarama gerçekleştirecek. Bu şekilde sunucular hakkında bilgi toplarlar.
Bu işlem sırasında bir MySQL sunucusu tespit ederlerse, Hedef sunucuya Ortadaki Adam (MitM) saldırısı, yani bu sunucuya bağlanan uygulamaların ve kullanıcıların oturum bilgilerini çalabilirler. Bunu önlemenin en iyi yollarından biri, MySQL sunucusunda SSL'yi etkinleştirin.
7. Günlük ve Geçmiş Dosyaları
Hataları analiz etmek ve bulmak için MySQL günlüklerini kullanırsınız. my.cnf dosyasını aşağıdaki gibi girerek bu günlüklerin tutulduğu yeri düzenleyebilirsiniz:
# /etc/mysql/my.cnf
[mysqld]
kayıt =/var/kayıt/mylogfiles
Mylogfiles adını veya konumunu istediğiniz gibi değiştirebilirsiniz. Kontrol etmeniz gereken bir dosya daha var. Bir Linux terminalinde MySQL sunucusuna bağlanıp çeşitli komutlar yazdığınızda, bu sorgular mysql_history dosyasına kaydedilir. Aşağıdaki komutu çalıştırırsanız, kullandığınız sorguları MySQL terminalinde görebilirsiniz:
kedi ~/.mysql_history
Sunucu içerisinde ne tür sorgulamalar yaptığınız hakkında bilgi vermek istemiyorsanız bu dosyanın içeriğini silmeniz gerekmektedir. Dosyanın içeriğini silmek için aşağıdaki komutu kullanın:
sudo yankı "temizlendi"> ~/.mysql_history
Daha sonra dosya içeriğini tekrar kontrol edebilirsiniz.
Veritabanı Kimdeyse Sistem de Odur
Hangi sektörde çalışırsanız çalışın, veritabanınız her zaman önemli bilgiler içerir. Bu, müşterileriniz, banka hesaplarınız ve şifreleriniz olabilir. Kötü niyetli saldırganlar bunların önemini ve değerini biliyor. Veri tabanı geliştiricileri ve yöneticilerinin, bilgisayar korsanlarını yenmek için en azından sızma testlerinde karşılaşacakları temel bilgileri bilmeleri gerekir.