Ö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.

Bu 7 Adımla MySQL Sunucunuzu Daha Güvenli Hale Getirin

1. Uzak Bağlantı Yerine SSH Tünelini 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 dosya içerisinde [mysqld] adında bir alan açıp aşağıdaki komutu yazmanız gerekmektedir:

[mysqld]

bind-address=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 restart mysqld

# or

sudo systemctl restart mariadb.service

Bununla, MySQL hizmeti yalnızca yerel adresi dinleyecektir.

MariaDB kullanıyorsanız /etc/mysql/mariadb.conf.d/50-server.cnf dosyasını da inceleyebilir ve bind-address için bir tanım olup olmadığını kontrol edebilirsiniz .

MySQL yapılandırma mariaDB dağıtımı

Bağlama adresini 127.0.0.1 olarak ayarladığınıza göre, bu localhost , bir Nmap taraması çalıştırabilir ve çıktıyı kontrol edebilirsiniz:

yerel ana bilgisayar ip adresi

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]

bind-address=127.5.5.1

istemci-sunucu bağlama adresini değiştir

Ardından /etc/mysql/my.cnf dosyasını kaydedin ve MySQL hizmetini yeniden başlatın. Bu aşamada tekrar Nmap taraması yaparsanız localhost üzerinde bu bind adresini görmemeniz gerekir.

localhost kapalı bağlantı noktası

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. Bir Yerel Dosya Erişim Bariyeri Kurun

Bu 7 Adımla MySQL Sunucunuzu Daha Güvenli Hale Getirin

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.

mySQL istemci-sunucusu için yapılandırma

local-infile 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:

SELECT LOAD_FILE(“/etc/secretfile.txt”);

şifreli gizli dosya

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]

local-infile=0

gizli dosya gizli şifre

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. UPDATE veya INSERT işlemi yapmayan uygulamaların kullanıcılarını mümkünse ayrı ayrı tanımlayınız.

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:

SELECT * FROM mysql.user WHERE USER=””;

# Example Output

Empty set (0.001 sec)

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:

DROP USER ‘anonuser’@’localhost’;

5. MySQL Yerel Dosya İzinlerini Kontrol Edin

Bu 7 Adımla MySQL Sunucunuzu Daha Güvenli Hale Getirin

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

veri linux mysql’e kimin erişimi var

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 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ı gerçekleştirebilirler , yani bu sunucuya bağlanan uygulamaların ve kullanıcıların oturum bilgilerini çalabilirler. Bundan kaçınmanın en iyi yollarından biri , MySQL sunucusunda SSL’yi etkinleştirmektir .

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]

log =/var/log/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:

cat ~/.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 echo “cleaned” > ~/.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ştiricilerinin ve yöneticilerinin, bilgisayar korsanlarını yenmek için en azından sızma testlerinde karşılaşacakları temel bilgileri bilmeleri gerekir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir