CyberFlow Logo CyberFlow BLOG
Mysql Pentest

MySQL Dosya Yetkisi Suistimali: Siber Güvenlikte Alınacak Önlemler

✍️ Ahmet BİRKAN 📂 Mysql Pentest

MySQL dosya yetkisi suistimali ile ilgili temel kavramlar ve güvenlik önlemleri hakkında bilgilendirme.

MySQL Dosya Yetkisi Suistimali: Siber Güvenlikte Alınacak Önlemler

MySQL dosya yetkisi suistimali siber saldırganlar için bir tehdit oluşturur. Bu makalede bu duruma karşı alınacak önlemleri ve teknik bilgileri bulabilirsiniz.

Giriş ve Konumlandırma

Siber güvenlik alanında, veritabanı güvenliği kritik bir yer tutar. Özellikle MySQL gibi popüler veritabanı yönetim sistemleri, çeşitli saldırı vektörlerine açık olabilir. Bu bağlamda, MySQL'in FILE yetkisi, siber saldırganlar için önemli bir hedef haline gelmiştir. Bu blog yazısında, MySQL dosya yetkisi suistimalinin ne olduğunu, neden önemli olduğunu ve siber güvenlik, pentest (penetrasyon testi) ve savunma açısından nasıl bir bağlamda ele alınması gerektiğini inceleyeceğiz.

MySQL Dosya Yetkisi Nedir?

MySQL'in FILE yetkisi, sunucunun dosya sistemi üzerinde okuma ve yazma işlemleri yapmasına olanak tanıyan bir yetkidir. Bu özellik, SQL komutlarının dosya sistemi işlemlerine dönüştürülmesini sağlar ve saldırganlar için bir köprü oluşturur. Örneğin, doğru izinler ile bir saldırgan, sunucudaki konfigürasyon dosyalarını okuyarak diğer servislerin kritik bilgilerine ulaşabilir.

SELECT LOAD_FILE('/etc/passwd');

Yukarıdaki komut, belirtilen dosyanın içeriğini okuyarak saldırgana sistem bilgilerini sızdırır. Böylece, FILE yetkisi suistimalleri, veri sızıntısı ve diğer siber saldırı türleri için bir zemin hazırlamış olur.

Neden Önemlidir?

MySQL dosya yetkisi suistimali, saldırganların sunucu üzerinde yerel dosyaları okumasına ve yazmasına olanak tanıyan kritik bir zafiyettir. Bu durum, yetkisiz veri erişimi, veri sızıntısı ve hatta sistemin ele geçirilmesi gibi sonuçlar doğurabilir. Bu bağlamda, bireysel kullanıcıların veya organizasyonların dosya güvenliğini sağlamak için çeşitli önlemler alması gerekmektedir.

Özellikle veri koruma yönetmeliklerinin uygulanması gereken alanlarda, bu tür güvenlik açıkları hem hukuki hem de finansal riskler doğurabilir. Bu nedenle, MySQL dosya yetkisi suistimali konusunu ciddiye almak ve gerekli önlemleri almak siber güvenlik açısından elzemdir.

Siber Güvenlik ve Pentest Açısından Bağlamlandırma

Pentest süreçlerinde, MySQL dosya yetkisi suistimali önemli bir test alanıdır. Saldırganlar, sistemin güvenliğini test etmek amacıyla bu yetkiyi hedef alarak, hem dosya erişimlerini hem de veri sızıntılarını gerçekleştirmeyi amaçlayabilir.

Bu bağlamda, LFI (Local File Inclusion) ile dosya okumayı hedeflemek, bu tür sızmaların nasıl gerçekleştirileceğine dair bir örnektir. LFI saldırıları, bir web uygulamasının, kullanıcının girdiği dosya adını bir dosya yolu olarak kullanması durumunda gerçekleşebilir. Dolayısıyla, bu konuda bilgi sahibi olmak ve saldırılar karşısında dikkatli olmak, sistem yöneticileri için kritik bir önceliktir.

Okuyucuyu Teknik İçeriğe Hazırlama

Bu yazının sonraki bölümlerinde, dosya yetkisini suistimal etmek için nasıl bir yol izlemeniz gerektiğini, tehditlerin nasıl belirleneceğini ve önlem alma stratejilerini detaylı bir şekilde ele alacağız. Özellikle güvenlik değişkenleri, dosya okuma/yazma izinleri ve sertleştirme stratejileri üzerinde durulacaktır. Tüm bu teknik bilgi akışı, okuyucuların siber güvenlik konusunda daha derin bir anlayışa sahip olmasını hedeflemektedir.

Sonuç olarak, MySQL dosya yetkisi suistimali, siber güvenlik alanında dikkat edilmesi gereken önemli bir konudur. Bu konuda atılacak adımlar, yalnızca mevcut verilere erişimin kontrol edilmesine olanak tanımakla kalmaz, aynı zamanda siber saldırıların önlenmesi ve siber güvenlik kültürünün güçlenmesi için de kritik bir rol oynar.

Teknik Analiz ve Uygulama

MySQL Port Tespiti

Siber güvenlik testlerine başlamadan önce, MySQL sunucusunun dinlediği portun tespiti kritik bir adımdır. Çoğu Linux sunucusunda MySQL, varsayılan olarak 3306 portunu kullanır. Portun açık olup olmadığını kontrol etmek için nmap komutunu kullanabiliriz. Aşağıdaki komut, hedef sunucunun port durumunu kontrol etmemizi sağlar:

nmap -p 3306 <hedef_ip_adresi>

Bu komut, belirtilen hedef IP adresinde 3306 portunun açık olup olmadığını test eder. Eğer port açıksa, saldırganın potansiyel olarak MySQL veritabanına erişim sağlama imkanına sahip olabileceğini gösterir.

FILE Yetkisinin Gücü

MySQL'de FILE yetkisi, sunucu tarafında dosya sistemi işlemleri gerçekleştirmek için kullanılan güçlü bir yetkidir. Bir kullanıcının FILE yetkisine sahip olması, o kullanıcının veritabanı sunucusunun dosya sistemine erişim sağlamasına ve belirli dosyaları okuyabilmesine veya yazabilmesine olanak tanır. Bu yetki, sadece doğru kullanıldığında faydalıdır; aksi takdirde, sistemin güvenliğini tehdit edecek bir açığa dönüşebilir.

Tanım: FILE Privilege

FILE yetkisi, veritabanı işlemcilerine sistem dosyaları ile etkileşimde bulunma kabiliyeti tanır. Kullanıcılar, bu yetki aracılığıyla dosya okuma ve yazma işlemleri gerçekleştirebilirler. Örneğin, aşağıdaki SQL komutu, belirtilen dosyanın içeriğini okumanızı sağlar:

SELECT LOAD_FILE('/etc/passwd');

Bu komut, /etc/passwd dosyasının içeriğini MySQL sunucusuna döndürür. Bu tür bir erişim, yetkisiz veri sızıntısına yol açabilir.

Hassas Dosya Okuma

Dosya okuma yetkisi verilmiş bir MySQL kullanıcısı, sunucudaki kritik dosyalara erişebilir. Örneğin, MySQL sunucusunun barındırıldığı sunucunun konfigürasyon dosyaları veya kullanıcı verileri gibi hassas dosyalar okunabilir. Bu durum, veri sızıntısına ve potansiyel olarak daha büyük bir saldırıya zemin hazırlayabilir.

secure_file_priv Kısıtlaması

Modern MySQL sürümlerinde, dosya işlemleri güvenlik değişkenleri ile kısıtlanabilir. secure_file_priv değişkeni, dosya okuma ve yazma işlemlerinin belirli bir dizin ile sınırlandırılmasını sağlar. Bu değişkenin değeri boş olduğunda, kullanıcılar her dizine erişim sağlayabilir. Ancak, belirli bir dizine ayarlandığında sadece o dizin içerisindeki dosyalara erişim mümkündür.

Bu ayarı kontrol etmek için aşağıdaki SQL komutunu kullanabilirsiniz:

SHOW VARIABLES LIKE 'secure_file_priv';

Teknik Terim: LFI

Local File Inclusion (LFI), saldırganların web uygulamalarında dosya okuma zafiyetlerinden faydalanarak sunucu üzerindeki yerel dosyalara erişim sağlamasıdır. Eğer bir uygulama, kullanıcı girdisi ile dosya yollarını kabul ediyorsa ve gerekli güvenlik önlemleri alınmamışsa, bu zafiyetler kullanılabilir.

Web Shell Yazma Operasyonu

Eğer bir MySQL kullanıcısının FILE yetkisi varsa, INTO OUTFILE komutu kullanılarak bir web shell dosyası sunucuya yazılabilir. Örneğin, aşağıdaki komutla basit bir web shell oluşturabilirsiniz:

SELECT '<php><?php system($_GET["cmd"]); ?></php>' INTO OUTFILE '/var/www/html/shell.php';

Bu işlem, belirtilen dizine bir PHP dosyası yazar ve sistemde komut çalıştırılmasına olanak tanır.

Sömürü Şartları (Checklist)

Başarılı bir dosya yazma saldırısı için belirli üç şartın sağlanması gerekir:

  1. Kullanıcıda FILE yetkisi olmalıdır.
  2. secure_file_priv değişkeni ya boş olmalı ya da işlem için uygun bir dizine işaret etmelidir.
  3. Hedef dizinde MySQL kullanıcısının yazma izni olmalıdır.

Kritik Kavram: Data Exfiltration

Veri sızdırma (Data Exfiltration), yetkisiz bir şekilde sistem dışına veri aktarma işlemini ifade eder. MySQL’in dosya yetkisi suistimali ile hassas verilerin sızdırılması kolaylaştırılabilir. Bu tür bir eylem, siber saldırganlar için büyük bir tehdit oluşturur.

Güvenlik Değişkeni Sorgusu

MySQL sunucusunda dosya güvenliği ayarlarının durumu araştırmak için SHOW VARIABLES komutları kullanılabilir. Bu, sunucunun mevcut konfigürasyonunu anlamak için kritik bir adımdır:

SHOW VARIABLES LIKE 'secure_file_priv';
SHOW GRANTS FOR '<kullanici>';

Bu komutlar, dosya güvenliği yapılandırmalarını ve hangi kullanıcıların hangi yetkilere sahip olduğunu gösterecektir.

Savunma ve Hardening (Sertleştirme)

Kurumsal altyapılarda FILE yetkisi suistimalini en aza indirmek için çeşitli önlemler alınmalıdır. Bunun için:

  • secure_file_priv değerinin doğru bir dizinle ayarlandığından emin olunmalı ve boş bırakılmamalıdır.
  • Kullanıcı yetkileri, sadece gerektiği kadar kısıtlanmalıdır (REVOKE FILE).
  • AppArmor veya SELinux gibi OS düzeyinde kısıtlamalar uygulanmalıdır.

Nihai Hedef: RCE

Sonuç olarak, dosya yetkisi suistimali, uzaktan kod yürütme (RCE) gibi daha karmaşık saldırılar için bir başlangıç noktası oluşturabilir. Bu nedenle, MySQL konfigürasyonlarının güncel ve güvenli tutulması büyük önem taşımaktadır. Saldırıların önlenmesi amacıyla sürekli güvenlik testleri ve denetimleri yapılmalıdır.

Risk, Yorumlama ve Savunma

Gereksinimlerin Anlaşılması

MySQL veritabanı sunucularında dosya yetkisi suistimalleri, siber güvenlik açısından önemli bir risk teşkil etmektedir. Dosya yetkisi, MySQL sunucusunun işletim sistemindeki dosya sistemi üzerinde okuma ve yazma yetkisi vermesiyle bağlantılıdır. Bu durum, saldırganların çeşitli dosyalara erişim sağlamasına ve bu dosyaları manipüle ederek kritik bilgileri ele geçirmesine olanak tanır. Dolayısıyla, bu yetkilerin çok iyi yönetilmesi ve dikkatlice yapılandırılması gerekmektedir.

Yanlış Yapılandırmanın Etkileri

MySQL dosya yetkisi suistimalleri genellikle yanlış yapılandırılmış sistemler üzerinden gerçekleşir. Örneğin, secure_file_priv değişkeninin NULL olarak ayarlanması, sunucunun tüm dosya sistemine erişim açmasına neden olabilir. Bu durum, siber saldırganların sunucu üzerindeki kritik dosyalara erişim sağlamasının önünü açar. Aşağıdaki SQL komutuyla bu değişkenin değerini kontrol edilebilir:

SHOW VARIABLES LIKE 'secure_file_priv';

Eğer bu değişken NULL veya herhangi bir boş dize ('') olarak ayarlandığında, dosya okuma/yazma izinleri kontrol edilemez hale gelir ve bu, siber riskleri artırır.

Sızan Verilerin Analizi

MySQL dosya yetkisi suistimalinde olası veri sızıntıları arasında kullanıcı bilgileri, yapılandırma dosyaları ve ödeme bilgileri gibi hassas veriler bulunur. Dosya sistemi üzerindeki kritik dosyaların okunması, saldırganın sistemin iç işleyişi hakkında bilgi edinmesini sağlar. Örneğin, LOAD_FILE() fonksiyonu kullanılarak, bir dosyanın içeriği kolaylıkla dışarı aktarılabilir:

SELECT LOAD_FILE('/etc/passwd');

Bu tür bir sorgu, sistemdeki kullanıcı bilgilerini ve hassas verileri ifşa edebilir. Ayrıca, SELECT ... INTO OUTFILE komutu ile veri dışarıya çıkarılabilir:

SELECT * INTO OUTFILE '/var/lib/mysql-files/output.txt' FROM users;

Bu tür bir işlem, saldırganın güvenli ve izlenmeyen bir ortamda veri aktarımı yapmasına imkân tanır.

Saldırı Topolojisi ve Servis Tespiti

Saldırganlar sıklıkla MySQL sunucusunun çalıştığı portları taramakla işe başlarlar. Örneğin, nmap aracı ile ilgili port taraması yapmak mümkündür:

nmap -p 3306 <hedef_ip_adresi>

Bu işlem, MySQL servisinin dışarıdan erişime açık olup olmadığını belirler. Ayrıca, bu tür bir tarama sonucunda mevcut servislere dair detaylı bilgiler elde edilebilir. Eğer saldırgan gerekli yetkilere erişim sağlarsa, sunucu üzerinde yerel dosyaları okuma yetkisi kazanabilir ve sistemin güvenliği tehdit altına girebilir.

Önlemler ve Hardening Önerileri

  1. Yapılandırma Denetimi: İlk adım olarak, MySQL sunucusunun secure_file_priv değişkeninin düzgün yapılandırıldığından emin olunmalıdır. Bu değişken, yalnızca belirli dizinlerle sınırlı bir dosya erişimi sağlayacak şekilde ayarlanmalıdır.

  2. Gereksiz Yetki İptali: Kullanıcılara yalnızca ihtiyaç duydukları dosya yetkileri verilmelidir. Yönetici olmayan kullanıcılardan FILE yetkisi kaldırmak için şu komut kullanılabilir:

    REVOKE FILE ON *.* FROM 'kullanici'@'localhost';
    
  3. OS Seviyesi Kısıtlamaları: MySQL sunucusunun çalıştığı sistemde, AppArmor veya SELinux gibi güvenlik mekanizmaları kullanarak dosya erişimlerini kontrol etmek gereklidir. Bu tür teknolojiler, MySQL'in yalnızca kendi veri dizinine erişebilmesini sağlar.

  4. Düzenli Güvenlik Testleri: Dosya yetkisi suistimali üzerindeki testler düzenli olarak yapılmalı ve olası zafiyetler tespit edilmelidir. Sertleştirme prosedürleri uygulanmadan önce, sistemin güncel güvenlik ayarları kontrol edilmelidir.

Sonuç

MySQL dosya yetkisi suistimalleri, yanlış yapılandırmalar ve yeterli önlemler alınmadığında ciddi güvenlik sorunlarına yol açabilecek bir alandır. Saldırganların bu açıkları kullanarak kritik verilere erişimi kolaylıkla sağlamak mümkün olduğundan, sistem yöneticilerinin bu konuda dikkatli ve proaktif davranmaları gerekmektedir. Uygulanan sertleştirme stratejileri ve düzenli güvenlik denetimleri, bu tür suistimallerin önüne geçmek için etkili bir yol sunmaktadır.