Directory Traversal

Directory Traversal (Path Traversal) Nedir? Kapsamlı Güvenlik Rehberi ve Korunma Yöntemleri

Directory Traversal (Dizin Gezinme) veya Path Traversal (Yol Gezinme) zafiyeti, siber güvenlik dünyasında web uygulamalarını tehdit eden en kritik ve en tehlikeli saldırı türlerinden biridir. Web uygulamalarındaki zafiyetler her geçen gün daha karmaşık hale gelse de, Directory Traversal gibi klasik saldırılar kritik sistemler için ciddi risk oluşturmaya devam etmektedir.

Bu makalede, Directory Traversal zafiyetinin ne olduğunu, bilgisayar korsanları tarafından nasıl istismar edildiğini, yaratabileceği yıkıcı etkileri ve web uygulamalarınızı bu tehlikeye karşı nasıl koruyabileceğinizi tüm detaylarıyla inceleyeceğiz.

Directory Traversal (Dizin Geçişi) Zafiyeti Nedir?

Directory Traversal, bir web uygulamasının sunucuda dosya okuma veya yazma işlemlerini gerçekleştirirken, kullanıcı tarafından sağlanan girdileri (input) yeterince doğrulamaması sonucu ortaya çıkan bir web güvenliği açığıdır. Bu zafiyet, saldırganların web kök dizininin (web root directory) dışına çıkarak, sunucu üzerindeki hassas işletim sistemi dosyalarına, yapılandırma dosyalarına, kaynak kodlara veya diğer kullanıcıların verilerine erişmesine olanak tanır.

Bu saldırı türü sıklıkla “dot-dot-slash” (../) saldırısı olarak da bilinir. Çünkü saldırganlar, bir üst dizine geçmek için işletim sistemlerinin standart dosya yolu işaretçisi olan ../ (veya Windows sistemlerde ..\) karakter dizisini kullanırlar.

Konu hakkında uluslararası standartları belirleyen MITRE Corporation’ın CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) veritabanı, bu zafiyeti en yaygın ve kritik yazılım hatalarından biri olarak sınıflandırmaktadır.

Directory Traversal Saldırıları Nasıl Çalışır?

Birçok web uygulaması, kullanıcıların dosya indirmesi veya görüntülemesi için parametreler kullanır. Örneğin, bir e-ticaret sitesinde ürün resimlerinin yüklendiği şu URL yapısını düşünelim:

https://www.ornek-site.com/loadImage?filename=urun1.png

Eğer loadImage fonksiyonu, filename parametresinden gelen veriyi herhangi bir güvenlik süzgecinden geçirmeden doğrudan sunucunun dosya sisteminde arıyorsa, sistem Directory Traversal saldırısına açık demektir.

Saldırgan, normal bir dosya adı yerine aşağıdaki gibi manipüle edilmiş bir girdi gönderebilir:

https://www.ornek-site.com/loadImage?filename=../../../etc/passwd

Bu senaryoda uygulama, bulunduğu dizinden üç kademe geriye giderek Linux tabanlı sunucunun kök dizinine ulaşır ve sistemdeki tüm kullanıcı hesaplarının listelendiği etc/passwd dosyasını okuyarak saldırgana sunar.

İşletim Sistemlerine Göre Farklılıklar

  • Linux/Unix Sistemler: Genellikle ../ kullanılarak /etc/shadow, /etc/passwd veya ~/.ssh/id_rsa gibi kritik dosyalara erişim hedeflenir.

  • Windows Sistemler: ..\ veya ../ kullanılarak C:\Windows\win.ini veya C:\boot.ini gibi dosyalara ulaşılmaya çalışılır.

Saldırganların Kullandığı Kaçınma (Bypass) Teknikleri

Geliştiriciler bazen sadece ../ karakterlerini filtreleyerek güvenlik sağladıklarını düşünürler. Ancak saldırganlar, basit filtreleri aşmak için çeşitli kodlama (encoding) teknikleri kullanırlar:

  • URL Kodlaması (URL Encoding): ../ yerine %2e%2e%2f kullanmak.

  • Çift URL Kodlaması (Double URL Encoding): Bazı Güvenlik Duvarlarını (WAF) atlatmak için %252e%252e%252f kullanmak.

  • Unicode/UTF-8 Kodlaması: ..%c0%af veya ..%ef%bc%8f gibi karakter setleriyle filtreleri yanıltmak.

  • Null Byte Injection: Eski sistemlerde dosya uzantısı kontrollerini atlatmak için dosya adının sonuna %00 eklemek (Örn: ../../../etc/passwd%00.jpg).

Directory Traversal Zafiyetinin Etkileri Nelerdir?

Bu zafiyetin istismar edilmesi, bir kurum için felaket niteliğinde sonuçlar doğurabilir:

  1. Hassas Veri İfşası: Veritabanı bağlantı şifreleri, API anahtarları (API keys) ve kullanıcı kimlik bilgileri gibi kritik veriler çalınabilir.

  2. Kaynak Kodlarının Çalınması: Uygulamanın arka plandaki çalışma mantığını içeren kaynak kodlar okunabilir, bu da saldırganların sistemde başka zafiyetler (örneğin SQL Injection veya RCE) bulmasını kolaylaştırır.

  3. Sistem Ele Geçirme (Sunucu Kompromizesi): Sadece okuma değil, yazma yetkisinin de olduğu durumlarda saldırganlar sunucuya zararlı yazılımlar (webshell) yükleyerek tüm sunucunun kontrolünü ele geçirebilirler.

  4. İtibar Kaybı ve Hukuki Yaptırımlar: KVKK veya GDPR gibi veri koruma kanunlarına aykırı durumlar oluşacağı için şirketler büyük cezalarla karşı karşıya kalabilir.

Directory Traversal Zafiyetinden Nasıl Korunulur? (En İyi Uygulamalar)

Web uygulamalarınızı bu tür saldırılardan korumak için katmanlı bir güvenlik yaklaşımı (Defense in Depth) benimsemeniz gerekir. Konuyla ilgili dünyanın en büyük uygulama güvenliği topluluğu olan OWASP’ın Path Traversal Rehberi, aşağıdaki adımların uygulanmasını şiddetle tavsiye etmektedir:

1. Kullanıcı Girdilerini Asla Doğrudan Kullanmayın

Dosya işlemleri yaparken kullanıcıdan alınan dosya isimlerini doğrudan API veya dosya sistemi çağrılarına vermekten kaçının. Mümkünse, veritabanında tutulan ID değerlerini kullanın (Örn: filename=urun1.png yerine id=5 kullanıp, 5 numaralı dosyanın adını sunucu tarafında veritabanından çekin).

2. Sıkı Girdi Doğrulaması (Whitelist Yaklaşımı)

Eğer kullanıcıdan dosya adı almanız zorunluysa, kesinlikle bir Beyaz Liste (Whitelist) uygulayın. Sadece izin verilen karakterlerin (örneğin sadece alfanumerik karakterler) kullanıldığından emin olun. Kara liste (Blacklist) yaklaşımı (sadece ../ karakterlerini engellemek), bypass teknikleri nedeniyle genellikle başarısız olur.

3. Dosya Yolunu Normalize Edin ve Kontrol Edin

Dosyayı okumadan önce, programlama dilinizin sunduğu dosya yolu çözümleme fonksiyonlarını (Örneğin Java’da Paths.get().normalize(), PHP’de realpath(), Python’da os.path.abspath()) kullanarak mutlak yolu (absolute path) bulun. Ardından, elde edilen bu nihai yolun, erişimine izin verdiğiniz temel dizin (base directory) ile başlayıp başlamadığını kontrol edin.

4. En Az Ayrıcalık Prensibi (Principle of Least Privilege)

Web sunucunuzu (Apache, Nginx, IIS) sistemde en yüksek yetkilerle (root veya administrator) çalıştırmayın. Uygulamaya sadece kendi klasörü içinde okuma/yazma izni olan, yetkileri kısıtlanmış özel bir kullanıcı profili atayın. Linux sistemlerde chroot jail gibi izolasyon mekanizmaları kullanmak ekstra güvenlik sağlayacaktır.

Sonuç

Directory Traversal, tespit edilmesi nispeten kolay ancak gözden kaçtığında sistemleri tamamen savunmasız bırakan kritik bir siber güvenlik zafiyetidir. Güvenli kodlama standartlarını benimsemek, dışarıdan gelen her girdiye potansiyel bir tehdit gözüyle bakmak (Zero Trust) ve düzenli olarak sızma testleri (Penetration Tests) yaptırmak, bu tür saldırılara karşı en güçlü kalkanınız olacaktır.

Güvenlik, tek seferlik bir işlem değil, sürekli devam eden bir süreçtir; bu nedenle sistemlerinizi ve kütüphanelerinizi her zaman güncel tutmayı unutmayın.

About The Author

Reply