spacer.png, 0 kB
Bilgi için: bilgi at bilgiguvenligi gov tr   

 

spacer.png, 0 kB
spacer.png, 0 kB
Yazarın bu bölümdeki diğer yazıları...
'mysql_history' Açıklığı ve Önlemi Yazdır E-posta
Osman BAĞCI, TÜBİTAK BİLGEM SGE   
11.04.2014

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.

 Kaynaklar

1. http://dev.mysql.com/doc/relnotes/mysql/5.1/en/

2. http://bugs.mysql.com/bug.php?id=16803

3. http://planet.mysql.com/entry/?id=19614


Favori olarak ekle (0) | Görüntüleme sayısı: 2739

Bu yazıya ilk yorumu yazın

Sadece kayıtlı kullanıcılar yorum yazabilir.
Lütfen sisteme giriş yapın veya kayıt olun.

 
spacer.png, 0 kB
spacer.png, 0 kB
Copyright 2017 TÜBİTAK-BİLGEM. Sitenin teknik altyapısında Joomla kullanılmıştır. Yazar ve site referans gösterilmeden alıntı yapılamaz. Görüşleriniz
spacer.png, 0 kB