MySQL, veritabanlarına gizlice girmeye çalışan saldırganlar için büyük bir ikramiye olan 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.

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:

instagram viewer
'user_name'@'host_name' DAN *.* ÜZERİNDEN TÜMÜNÜ İPTAL EDİN; #Küresel ayrıcalıklar
REVOKE CREATE, DROP ON database_name.* 'user_name'@'host_name' DAN; #Veritabanı ayrıcalıkları
'user_name'@'host_name' DAN database_name.table_name ÜZERİNDE EKLE, GÜNCELLEME, SİLME; #Masa ayrıcalıkları
floş ayrıcalıkları;

2. Uzaktan Oturum Açmaları Kısıtla

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 ekleyerek ve hizmeti yeniden başlatarak tüm MySQl kullanıcı hesapları için uzaktan erişimi devre dışı bırakabilirsiniz.

[mysqld]
ağ atlama
sudo hizmeti mysql yeniden başlatma

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

mysql> mysql.user'dan sil burada user='root' ve ana bilgisayar ('localhost', '127.0.0.1', '::1'); mysql> yıkama ayrıcalıkları; 

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

MySQL'i yerel dosya enjeksiyonuna karşı güvenceye almak için başka bir önlem, 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 tüm içeriği dosyadan yükleyecektir. /etc/passwd dosya şu şekilde:

load_file('/etc/passwd') seçin
  • 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:

'/tmp/file.txt' dış dosyasına 'Yerel Dosya SQL Enjeksiyonu'nu seçin;
kedi /tmp/dosya.txt

Çıktı:

Yerel Dosya SQL Enjeksiyonu
  • çöp dosyası

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

kedi /tmp/dosya.txt
'Merhaba dünya!' seçeneğini seçin '/tmp/world' döküm dosyasına;

Çıktı:

Sorgu Tamam, 1 satır etkilendi (0,001 sn)

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

*.* üzerindeki DOSYA'yı 'user_name'@'localhost'tan iptal edin;

İlişkili: Kali Linux'ta Metasploit İçin Başlangıç ​​Kılavuzu (Pratik Örneklerle)

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

MySQL hizmetlerinin 3306 numaralı bağlantı noktasında çalıştığını ve 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üzenleyerek varsayılan MySQL bağlantı noktasını değiştirmek için aşağıdakileri girmeniz gerekir:

vim /etc/mysql/my.cnf
bağlantı noktası=XXXX
sudo hizmeti mysql yeniden başlatma

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, host kısmını '192.18.132.mysql.com' 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 & ağ maskesi = host_name

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

KULLANICI OLUŞTUR 'jhon'@'192.168.132.0/255.255.255.0'; 

Yukarıdaki ana bilgisayar değeri, kullanıcının John 192.168.132.0-192.168.132.255 aralığındaki herhangi bir IP'den veritabanına erişmek için. 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.

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

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 5.7'den önceki MySQL sürümleri, anonim bir kullanıcı grubu oluşturur ve sürüm yükseltmesinden sonra kurulum bu kullanıcıları eklemeye devam eder.

kullanıcının '' gibi olduğu mysql.user'den kullanıcı, ana bilgisayar, şifre seçin;

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:

" "@"localhost" kullanıcısını bırak
floş ayrıcalıkları;

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 erişmeye çalıştığında bir hata döndürür. -kullanıcı=kök hata.

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 değiştirin okuma/yazma izinleri MySQL sunucusunun mysql'ye aşağıdaki gibi

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
kullanıcı=mysql
sudo hizmeti mysql yeniden başlatma

8. Kök Hesap için Parola Belirle

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 bir kullanıcısı, aşağıdakileri kullanarak mysql root kullanıcı hesabına erişebilir: -kullanıcı=kök seçenek. Parolayı aşağıdaki gibi ayarlayarak bundan kaçınabilirsiniz:

sudo mysqladmin şifresi
vim /etc/mysql/my.cnf
şifre=
sudo hizmeti mysql yeniden başlatma

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.

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

MySQL Gelişmiş Güvenlik: 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.

mySQL Veritabanı Şemaları Yazma Başlangıç ​​Kılavuzu

Yalnızca bir metin düzenleyici ve bu temel yapı taslağı veya "şema" ile kendi mySQL veritabanınızı oluşturun.

Sonrakini Oku

PaylaşCıvıldamakE-posta
İlgili konular
  • Programlama
  • Güvenlik
  • Programlama
  • Güvenlik İpuçları
  • Güvenlik
Yazar hakkında
Rumaisa Niazi (15 Makale Yayınlandı)

Rumaisa, MUO'da serbest yazar. Bir Matematikçiden Bilgi Güvenliği meraklısına kadar pek çok şapka taktı ve şu anda bir SOC Analisti olarak çalışıyor. İlgi alanları arasında yeni teknolojiler, Linux dağıtımları ve Bilgi Güvenliği ile ilgili her şey hakkında okuma ve yazma yer almaktadır.

Rumaisa Niazi'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın