'mysql_history' Açıklığı ve Önlemi

Oğuz~#>

Kıdemli Üye
5 Tem 2009
4,772
17
Bursa
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.
Türkhackteam.net
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.