Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC:

'mysql_history' Açıklığı ve Önlemi 9 years 10 months ago #209

  • quantum50
  • quantum50's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
  • Posts: 480
  • Karma: 4
  • Thank you received: 6
MySQL veritabanlarının kullanımı özellikle bireysel amaçlı web uygulamalarında oldukça yaygındır. Bireysel uygulamalarda veritabanı güvenliği geri planda kalmakta ve basit yapılandırmalar bile göz ardı edilebilmektedir. Bu durum saldırganların işini büyük ölçüde kolaylaştırmaktadır.

Bu makalede Linux işletim sistemi üzerinde kurulu olan MySQL 5.1 ve önceki sürümlerinde bulunan 'mysql_history' açıklığı anlatılmaktadır. Ayrıca bu açıklığın nasıl kapatılacağı makalenin son bölümünde yer almaktadır.

1. 'mysql_history' Açıklığının Kullanımı
MySQL veritabanı yönetim sisteminin 5.1 ve önceki sürümlerinde, kullanıcılar tarafından çalıştırılan komutlar 'mysql_history' dosyasında kayıtlı tutulur. MySQL artık 4.1 ve 5.0 sürümlerini desteklememektedir. Bu makalenin yazıldığı tarihte MySQL 5.1 için en güncel sürüm numarası 5.1.73'tür.[1] MySQL 5.1.73 ve yeni sürümlerinde 'mysql_history' açıklığı bulunmamaktadır. Bu açıklık Linux işletim sistemlerindeki 'bash_history' (komut geçmişinin tutulması) yapısından kaynaklanmaktadır. Windows işletim sistemlerinde farklı bir yapı kullanıldığı için bu açıklık bulunmamaktadır.

'mysql_history' sayesinde veritabanı kullanıcısı yukarı-aşağı yön tuşlarıyla geçmişte kullandığı komutları rahatlıkla tekrar getirebilir. İşletim sistemi kapatılıp tekrar açıldığında bu kayıtlar silinmez ve bu kayıtların tamamı, içinde parola bulunsa dahi açık metin halinde saklanır.

Senaryoda kullanılan veritabanı MySQL 5.1.69 sürümündedir. Bu veritabanı Ubuntu 10.11 işletim sistemine sahip makine üzerine kurulmuştur. Veritabanı ön tanımlı yapılandırma ayarlarıyla kurulup hiçbir değişiklik yapılmamıştır.

Ubuntu işletim sistemi kullanıcısı olan 'test' üzerinden veritabanı hesabıyla MySQL'e giriş yapıldıktan sonra Şekil 1'de gösterilen komutlar çalıştırılmıştır.

1.png
Şekil 1. Veritabanı Kullanıcısı Tarafından Çalıştırılan Komutlar

İşletim sistemindeki 'test' kullanıcısının parolasını ele geçirebilen veya 'root' hakkına erişebilen bir saldırgan, veritabanı hesabını bilmeden bu kullanıcının çalıştırdığı tüm komutları görebilir. Bunun için Şekil 2'de gösterilen 'cat ~/.mysql_history' komutunu çalıştırması yeterlidir. Bu dosya her kullanıcı için '/home/user_name' klasörü içinde bulunur. Dosya isminin başındaki nokta işaretinden de anlaşılabileceği gibi gizli olarak saklanır ve 'ls -a' komutu ile bu gizli dosya gösterilebilir.

2.png
Şekil 2. 'mysql_history' Dosyasının İçeriğinin Görüntülenmesi

Saldırgan veritabanı tabloları, prosedürleri ve diğer nesneleri hakkında bilgi edinebilir. Ayrıca çalıştırılan komutlar içinde veritabanı kullanıcılarına ait parola bilgileri varsa, saldırgan bu bilgileri kullanarak veritabanına erişim sağlayabilir. Bu açıklıktan elde edilen veritabanı hesabıyla erişim Şekil 3'te gösterilmiştir.

3.png
Şekil 3. ”mysql_history” Dosyasından Elde Edilen Kullanıcıyla Veritabanına Erişim

2. 'mysql_history' Açıklığının Önlemi

Bu açıklık 3 farklı şekilde kapatılabilir:

İlk yöntem Ubuntu üzerindeki 'mysql_history' çevresel değişkenini yapılandırmaktır. Bunun için 'export MYSQL_HISTFILE=/dev/null' komutu çalıştırılmalı ve bu değişken kontrol edilmelidir. Bu yapılandırmadan sonra veritabanında çalıştırılan komutlar kaydedilmeyecektir. Daha önce kaydedilen komutların silinmesi için 'mysql_history' dosyası silinmelidir.

İkinci yöntem 'mysql_history' dosyası '/dev/null' yapısına yönlendirecek bir link oluşturarak, komutların görüntülenmesi engellenir.[2][3] '/dev' dizini altındaki 'null' dosyası özel bir yapıya sahiptir. Bu yapıya gönderilen çıktılar silinir. Linux işletim sistemlerinde, istenmeyen çıktılar 'kara delik' olarak adlandırılan '/dev/null' yapısına yönlendirilir. Bu sayede komutların fazla veya olumsuz çıktılardan korunması sağlanır. Ancak eski kayıtlar silinmesi için 'mysql_history' dosyası silinmelidir.


Açıklığın kapatmak için anlatılan ilk 2 yöntem farklı yollar kullanan benzer çözümlerdir. Anlatılan ilk 2 yöntem için gerekli komutlar Şekil 4'te gösterilmiştir.

4.png
Şekil 4. Açıklığın Önlemi

Gerekli yapılandırmalar uygulandıktan sonra 'cat ~/.mysql_history' komutunun çalışmadığı Şekil 5'te görülmüştür.

5.png
Şekil 5. 'mysql_history' Dosyasının Açılamaması


Bu açıklığın kapatılması için son yöntem, kullanılan veritabanının en güncel yamaları uygulanarak, sürümünün yükseltilmesidir.

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
Time to create page: 0.457 seconds

NDK Hoş Geldin