Bu yazımızda web saldırı yöntemlerinden biri olan “Symlink (Symbol Link)” saldırıları hakkında bilgi ve güvenliği hakkında konuşacağız.
Öncelikle Symlink Nedir?
Linux işletim sistemlerinde tüm veriler hiyerarşik bir düzende klasörlerin (dizinlerin) içerisinde tutulurlar. Bir klasör içerisinde bulunan dosyayı başka bir klasör içerisinde kullanmak istiyor isek ve bu dosyayı bulunduğu klasör dışında bir yere kopyalamak istemiyor isek imdadımıza “Symlink” yetişiyor. Symlink adından da anlaşılacağı üzere bir sembolik bağ oluşturur. Bu yöntem ile üzerinde çalıştığımız dosya bir yerde olacak ve biz ona istediğimiz dizinden erişebileceğiz. Temel saldırı mantığı da burada oluşmaktadır işte… Linux’ta bulunan (ln) komutu bu sembolik bağı oluşturmak için kullanılır. Bir sunucuya erişildiğinde eğer gerekli güvenlik önlemleri alınmış ise kritik dosyaların içeriği okunamamaktadır. Örneğin, configuration.php dosyası okunamıyor. Symlink yapılarak uzaktan bu dosya rahatlıkla okunabilir. İşte bu gibi durumlarda web sunucumuzun güvenliğini sağlamış olalım. Sunucumuzda Shell-Exploitlerin çalıştığı fonksiyonların devre dışı olduğunu varsayalım. Böyle bir web sunucusunda exploitler çalışmayacaktır.
“ln –s /root/eng/klasor/dosya.txt /var/www/yazi.txt”
Bu komut ile /root/eng/klasor/ dizininde bulunan dosya.txt dosyası /var/www/ dizininde yazi.txt dosyasına symlink’lendi. Böylece erişemediğimiz dosya.txt dosyasına Symlink üzerinden erişerek /var/www/yazi.txt dizininden okuyabiliriz. Bu yöntem ile güvenlik önlemlerinin bir çoğu bypass edilmiş olacaktır.
PHP’de de bu aşağıdaki gibi olacaktır.
<?php
$dosya = ‘../../home/eng/configuration.php’;
$yeniYol = ‘../../home/ank/sym/1.txt’;
symlink($dosya, $yeniYol);
echo readlink($yeniYol);
?>
Bu PHP kodu ile /home/eng/ dizininde bulunan configuration.php dosyasını okuyarak /home/ank/sym/ dizininde 1.txt olarak symlink’ledik. Normal şartlarda erişemediğimiz configuration.php dosyasına Symlink üzerinden erişerek, dosya içerisinde bulunan yolları okuduk.
Symlink Saldırısını Engelleme
Symlink saldırılarını engellemek için PHP-Symlink fonksiyonunu deaktif etmemiz gerekir. Bunun için php.ini dosyamızda bulunan disable_functions satırını
disable_functions= “show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open, symlink” şeklinde değiştirip apache sunumuzu restart etmemiz gerekir.