Ana Sayfa Haberler MySQL Güvenlik İpuçları

MySQL Güvenlik İpuçları

295
0

Bu kolay MySQL Güvenlik ipuçlarını izleyerek MySQL veritabanı sunucunuzu güvenli hale getirin.

MySQL, veritabanlarına gizlice girmeye çalışan saldırganlar için en popüler ilişkisel veritabanı yönetim sistemlerinden biridir. Yeni kurulmuş bir MySQL veritabanı sunucusunda birçok güvenlik açığı ve boşluk olabilir. Veri güvenliği çok önemli olduğu için MySQL güvenliğini her yönüyle anlamak zorunludur.Bu makale MySQL veritabanınızın denetimi ve güvenliğine odaklanır ve güvenliğini artırmak için dokuz ipucu sağlar.

MySQL Güvenlik İpuçları

download 2 1

1. Gereksiz Ayrıcalık Bağışlarından Kaçının

MySQL, yetkisiz bir kullanıcıya gereksiz yere atandığında dosyaları okumaya/yazmaya ve diğer kullanıcı ayrıcalıklarını altüst etmeye yol açabilecek birkaç ayrıcalık ifadesine izin verir. Potansiyel olarak en riskli ayrıcalık ifadelerinden bazıları FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN ve benzerleridir. Bunlar hakkında daha fazla bilgiyi MySQL resmi belgelerinden okuyabilirsiniz. Bu nedenle, yönetici olmayan hesaplara DOSYA, GRANT, SUPER ve PROCESS gibi süper kullanıcı ayrıcalıkları atamayın. Bu gereksiz genel, veritabanı ve tablo düzeyindeki izinleri aşağıdaki gibi iptal edebilirsiniz:

REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Global privileges
REVOKE CREATE,DROP ON database_name.* FROM 'user_name'@'host_name';
 #Database privileges
REVOKE INSERT, UPDATE,DELETE ON database_name.table_name FROM 'user_name
'@'host_name'; #Table privileges flush privileges;

2. Uzaktan Oturum Açmaları Kısıtlayın

Uzaktan erişim, veritabanı yöneticilerinin işini kolaylaştırır. Ancak sunucuyu olası güvenlik açıklarına ve istismarlara karşı riske atar. Ana yapılandırma dosyasına bir ağ atlama değişkeni ekleyin. Ardından hizmeti yeniden başlatarak tüm MySQl kullanıcı hesapları için uzaktan erişimi devre dışı bırakabilirsiniz.

[mysqld]
skip-networking
sudo service mysql restart

Benzer şekilde, kök hesap uzaktan oturum açmalarını kısıtlamak için, kök hesap erişimini devre dışı bırakmalısınız. Bu önlem, MySQL kök hesabının kaba kuvvetlendirilmesini önler.

mysql> delete from mysql.user where user='root' and host not in 
('localhost', '127.0.0.1', '::1'); mysql> flush privileges; 

download 1 2

3. İşlevleri Devre Dışı Bırak (load_file, outfile, dumpfile)

MySQL’i yerel dosya enjeksiyonuna karşı güvenceye almak için başka bir önlemse işlevleri devre dışı bırakmaktır. Yalnızca DOSYA verme ayrıcalığı aracılığıyla erişilebilen işlevleri devre dışı bırakmaktır. DOSYA, genel komut seçeneklerine sahip düşük ayrıcalıklı kullanıcıların sunucudaki dosyaları okumasını veya yazmasını sağlayan bir seçenektir.

  • dosya yükle

load_file işlevi, dosya içeriğini sunucudan bir dize olarak yükler. Örneğin, aşağıdaki komut /etc/passwd dosyasındaki tüm içeriği aşağıdaki gibi yükler:

select load_file('/etc/passwd')
  • dış dosya

Benzer şekilde, outfile işlevi, içeriği yerel sunucu dosyalarına yazar. Saldırganlar, sunucudaki dosyaya bir veri yükü yazmak için bu işlevi aşağıdaki gibi kullanabilir:

select 'Local File SQL Injection' into outfile '/tmp/file.txt';
cat /tmp/file.txt

Çıktı:

Local File SQL Injection
  • çöp dosyası

Bu işlev, çıktıyı ekrana döndürmeden dosyaya yazmak için seçme nedenini kullanır.

cat /tmp/file.txt
select 'Hello world!' into dumpfile '/tmp/world'; 

Çıktı:

Query OK, 1 row affected (0.001 sec)

DOSYA ayrıcalığını aşağıdaki şekilde iptal ederek bu işlevleri devre dışı bırakabilirsiniz:

revoke FILE on *.* from 'user_name'@'localhost';

4. Varsayılan Bağlantı Noktasını Devre Dışı Bırak

MySQL hizmetlerinin 3306 numaralı bağlantı noktasında çalıştığını biliyoruz. Ayrıca saldırganların ağda çalışan hizmetleri kontrol etmek için bağlantı noktalarını taradığını biliyoruz. Belirsizliğe göre güvenlik eklemek ve ana yapılandırma dosyasındaki bağlantı noktası sistemi değişkenini düzenleyin. Ardından varsayılan MySQL bağlantı noktasını değiştirmek için aşağıdakileri girmeniz gerekir:

vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql restart

5. Hesap Adlarında Joker Karakterlerden Kaçının

MySQL’deki hesap adları, bir kullanıcı ve “user_name”@”host_name” ana bilgisayar adı olmak üzere iki bölümden oluşur. Yöneticinin, farklı ana bilgisayarlardan bağlanan aynı ada sahip kullanıcılar için hesap oluşturmasını sağlar. Ancak, bir hesap adının ana bilgisayar kısmı, herhangi bir yerden veritabanına erişim noktası olabilecek joker karakter kurallarına izin verir.

Ana bilgisayar adının veya IP adresi değerinin isteğe bağlı kullanımı, %’nin LIKE işlemiyle eşleşen MySQL kalıbıyla eşleştiği ve % herhangi bir ana bilgisayar adı anlamına geldiği ‘user_name’@’%’ ile eşdeğerdir. Bu arada, ‘192.168.132.%’ den erişim, C sınıfı ağdan herhangi bir girişim anlamına gelir. Ayrıca, ana bilgisayar bölümünü ‘ 192 olarak adlandırarak herkes veritabanına erişebilir.

Bu tür girişimleri önlemek için MySQL, bir IP adresinin ağ bitlerini tanımlamak için ana bilgisayar değerine sahip bir ağ maskesi tanımlamaya izin verir:

client-ip_add & netmask = host_name

Bir ana bilgisayar adı oluşturmak için kullanılan sözdizimi host_ip/netmask’tır:

CREATE USER 'teknodestek'@'192.168.132.0/255.255.255.0'; 

Yukarıdaki ana bilgisayar değeri, Teknodestek kullanıcısının 192.168.132.0-192.168.132.255 aralığındaki herhangi bir IP’den veritabanına erişmesini sağlar. Benzer şekilde, 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 ana bilgisayar değerleri, A ve B sınıfı ağlardan ana bilgisayarlara izin verecektir. 192.168.132.5 ise yalnızca belirli IP’den erişime izin verecektir.

download 4

6. Açık Erişimi Devre Dışı Bırakın

MySQL’deki kullanıcı adı, veritabanlarının gelen bağlantıları kabul ettiği bir ad veya anonim bir kullanıcı oluşturan boş bir “@”host_name” kullanıcı adıdır.Ancak, anonim bir kullanıcının varlığı, veritabanı sunucusuna erişmek için saldırganlardan yararlanabilir.Ayrıca, MySQL MySQL 5.7’den önceki sürümler, anonim bir kullanıcı grubu oluşturun ve sürüm yükseltmesinden sonra kurulum bu kullanıcıları eklemeye devam eder.

select user, host, password from mysql.user where user like '';

Kullanıcı ve şifre sütunlarının boş olduğunu ve erişimin localhost ile sınırlı olduğunu not edebilirsiniz. Ancak, kimsenin veritabanına erişmesini istemezsiniz. Anonim kullanıcıları silmek için aşağıdaki komutu kullanın:

drop user " "@"localhost"
flush privileges;

7. Kök Olmayan Hesabı Sahip veya Grup Olarak Ayarlayın

Kök olmayan bir kullanıcı hesabı ayarlamak, MySQL kök kullanıcısıyla ilgili değildir. Tar ve tar.gz paketlerinden Linux/Unix sistemlerinde MySQL kurulumu, sunucunun herhangi bir ayrıcalıklı kullanıcı tarafından çalıştırılmasına izin verir. Bu bir güvenlik dezavantajıdır, çünkü DOSYA verme seçeneğine sahip herhangi bir kullanıcı sunucuda dosyaları düzenleyebilir veya oluşturabilir. Ancak, bir kullanıcı ona -user=root hatası olmadan erişmeye çalıştığında bir hata döndürür.

Veritabanı sunucusuna ayrı bir Linux kullanıcısı olarak erişmenin temel kuralını uygulayarak bundan kaçınabilirsiniz. Mysqld’i normal bir Linux kullanıcısı olarak çalıştırmak için sunucuyu durdurun ve MySQl sunucusunun okuma/yazma izinlerini aşağıdaki gibi mysql olarak değiştirin:

chown -R mysql /path/to/mysql/datadir

MySQL ana yapılandırma dosyasını açın, yeni bir mysql kullanıcısı ekleyin ve gereksiz sunucu erişimini önlemek için hizmeti yeniden başlatın:

vim /etc/mysql/my.cnf
user=mysql
sudo service mysql restart

8. Kök Hesap için Şifre Belirleyin

Debian tabanlı Linux dağıtımlarında etkileşimli bir kabuk aracılığıyla MySQL kurulumu, kök kullanıcı hesabını oluşturur ve sizden bir parola belirlemenizi ister. Ancak bu, etkileşimli olmayan kabuk kurulumunda ve Red-Hat tabanlı dağıtımlarda gerçekleşmez. Yukarıda belirtildiği gibi, bir Linux makinesinin root olmayan kullanıcısı -user=root seçeneğini kullanarak mysql root kullanıcı hesabına erişebilir. Parolayı aşağıdaki gibi ayarlayarak bundan kaçınabilirsiniz:

sudo mysqladmin password
vim /etc/mysql/my.cnf
password=<your_password>
sudo service mysql restart

9. Taşımada ve Beklemede Veri Şifrelemeyi Sağlayın

İstemci ve sunucu arasındaki varsayılan şifrelenmemiş iletişim, herhangi bir ortadaki adam tarafından veri müdahalesi riski taşır. Benzer şekilde, veritabanındaki şifrelenmemiş kullanıcı verileri, kullanıcının gizliliğini ve bütünlüğünü riske atar. MySQL, istemci ve sunucu arasında TLS/SSL protokolü üzerinden veri şifrelemeyi desteklerken, şifrelenmemiş iletişim yalnızca iletişim kuran her iki taraf da aynı ağ içinde olduğunda kabul edilebilir.

Artık, sistem ihlal edildiğinde bile sunucuda depolanan verileri korumak için bekleyen şifrelemeyi destekliyor.

MySQL Güvenlik İpuçları ile Kendinizi Koruyun

En yüksek çevrimiçi güvenlik düzeyine sahip olduğunuzdan emin olmak çok önemlidir ve bu makale size doğru yönde bazı yararlı ipuçları verecektir. Yukarıdaki adımlar, veritabanı sunucunuzun güvenliğini sağlamak için yararlıdır, ancak yönetici olmayan kullanıcılara minimum izinlerin nasıl atanacağını öğrenmek de önemlidir.