Dosya yükleme modülleri, web uygulamalarındaki en zayıf halkalardan biridir. Küçük olduğunu düşündüğünüz hatalar da dahil olmak üzere yapılan herhangi bir hata, sunucu kontrolünün doğrudan bir siber saldırganın eline geçmesine neden olabilir. Bu nedenle yazılım geliştiricilerin en sık yapılan hataları ve meydana gelebilecek bazı saldırı yöntemlerini bilmesi gerekmektedir.

Dosya Yükleme Güvenlik Açıkları Nasıl Engellenir?

Peki istemci tarafında kurcalama nedir? Sitelerinizi ve kullanıcılarınızı güvende tutmak için bununla nasıl mücadele edebilirsiniz?

İstemci Tarafında Kurcalama Nedir?

İstemci tarafı kurcalama, bir bütün olarak web uygulaması saldırılarının temel konseptidir. Basitçe söylemek gerekirse, kullanıcıya gönderdiğiniz hiçbir veriye artık güvenemeyeceğiniz anlamına gelir. Ek olarak, istemci tarafında kurcalama, güvenli uygulama geliştirmenin temellerinden biridir. Karşılaştığınız dosya yükleme modülünü incelerseniz ve istemci tarafında kurcalamayı düşünürseniz, güvenemeyeceğiniz veriler şunları içerir:

Yüklenen dosyanın adı.

Yüklenen dosyanın İçerik Türü.

Bu iki öğe, bir yazılım geliştiricisi olarak beyaz listeye alma fırsatına sahip olduğunuz yerlerdir . Karşıya yüklenen dosyanın ad verisi, istemci tarafında kurcalanmış herhangi bir şey içerebilir. Yüklenen dosyanın Content-Type verileri ile saldırgan bir .exe dosyası yüklüyor olsa dahi bu dosya sistemde image/jpeg olarak görünebilir.

Dosya Uzantısı ve Beyaz Listeleme

Sisteme yüklenen dosya uzantılarının kontrol edilmesi

Dosya yükleme modüllerini geliştirirken yapılacak ilk şey , dosya uzantısı için beyaz listeye alma işlemidir . Örneğin, bir kullanıcı “muo.jpeg” adlı bir dosya yüklemek istiyor. Kullanıcının yüklemek istediği bu dosya uzantısının .jpeg olduğundan emin olmalısınız. Bunun için sistem yüklenen dosyayı kontrol etmeli ve izin verilen dosya uzantılarından biri olup olmadığına bakmalıdır. Bunu nasıl yapabileceğinizi anlamak için aşağıdaki basit PHP kodunu inceleyin:

$file_parts = pathinfo($filename);

switch($file_parts[‘extension’])

{

case “jpg”:

break;

case “bat”: // Or exe, dll, so, etc.

break;

case “”:

case NULL: // No file extension

break;

}

Bunu yukarıdakine benzer bir kod bloğu ile yapabileceğiniz gibi kullandığınız çatının sağladığı sınıfları ve fonksiyonları da kullanabilirsiniz.

Dosya adını nokta (.) karakterine göre ayrıştırarak dosya uzantısı verisi oluşturmamaya dikkat edin çünkü saldırgan bu kontrol adımını “muo.jpeg.php” gibi bir dosya adı ile atlayabilir.

İçerik Türü Bilgisi Nedir?

İçerik Türü bilgisi, her dosya yüklemesi için HTTP isteğinde gönderilen bir bilgi parçasıdır. İnternet tarayıcısı bu bilgiyi algılar ve gönderilen talebe ekler. Saldırgan, istemci tarafı kurcalama ile bilgileri değiştirmeye ve sunucu tarafı doğrulamalarını atlamaya çalışabilir. Bu aşamada, geliştiricilerin Content-Type bilgileri üzerinde doğrulamalar yapmak için bir kontrol mekanizmasına ihtiyacı vardır. Bu tek başına yeterli olmayacak; yine de geliştiricilerin dikkat etmesi gereken önemli bir konu.

Diyelim ki dosya uzantısını doğru kontrol edecek bir mekanizma kodluyorsunuz ve sadece .jpeg uzantılı dosyaları kabul ediyorsunuz. Bu önlem mekanizmasına ek olarak, her ihtimale karşı Content-Type bilgisini kontrol edebilir ve yalnızca resim/jpeg bilgisi içeren dosyaları kabul edebilirsiniz, siber saldırılara karşı ekstra bir koruma düzeyi

SWF Flash Dosyaları ve Saldırı Adımları

Dosya uzantısı ve İçerik Türü verileri, Adobe Flash Player gibi eklentileri destekleyen internet tarayıcıları için hiçbir şey ifade etmez. Bu oynatıcı için destek artık mevcut olmasa da, Flash bir güvenlik riski oluşturmaya devam etse de , bu ilgili dosyaları birçok sisteme yüklemek hala mümkündür . İlgili önlemlerin alınmadığı bir sistemde, uzantısı ne olursa olsun <object> etiketi ile bir Flash dosyasını çağırmak mümkündür. Bu, başka bir ciddi güvenlik sorununa neden olacaktır.

Kullanım ömrü sona eren eklenti web sitesi tavsiyesi

Dosya Yükleme Güvenlik Açıkları Nasıl Engellenir?

Harekete geçmek için geliştiricilerin siber suçluların izleyebileceği yolları bilmesi gerekir. Bunun nasıl olabileceği aşağıda açıklanmıştır:

Kötü niyetli saldırgan, hedef web sitesine “image.jpeg” adlı bir SWF (bir Adobe Flash dosya biçimi) yükler. Yükleme işlemi sırasında, saldırgan tarafından yüklenen dosyanın .jpeg uzantılı olduğu beyaz liste doğrulamasında onaylanır. İçerik Türü doğrulaması, istemci tarafı kurcalamayla atlanır. Tehdit aktörü tarafından yüklenen bu dosyanın “www(dot)target-site(dot)com/images/images.jpeg” adresine gittiğini hayal edin.

Diyelim ki saldırganın attacker(dot)com adında bir web sitesi var. Saldırgan, application/x-shockwave-flash tip ataması ile <object> etiketini kullanarak bu web sitesinde hedef siteye yüklenen image.jpeg dosyasını çağırır.

Masum bir kullanıcı attacker(nokta)com’da oturum açar. Bu site, www(dot)target-site(dot)com/images/image.jpeg adresindeki SWF dosyasını çağırır ve SWF’ye verilen komutları yürütür.

Bu sayede siber saldırgan, normal kullanıcılar fark etmeden hedef-site(nokta)com adresi için HTTP istek eylemleri oluşturabilir. Saldırgan bu isteklerle masum kullanıcının oturumunu kullanacak ve CSRF kontrolünü atlayacaktır .

Bu saldırı senaryosunu daha net anlamak için, attacker(dot)com tarafından kullanıcıya gönderilen HTML <object> içeriğinde aşağıdaki kodun yer aldığını göz önünde bulundurun:

style=”height:1px;width:1px;” data=”www.target-site.com/images/image.jpeg” type=”application/x-shockwave-flash” allowscriptaccess=”always” flashvars=”c=read&u=somethings”

En iyi çözümlerden biri file upload ile yüklenen dosyalara farklı bir subdomain üzerinden erişmektir . Bahsedilen senaryoda statik dosyalara aynı domainden değil, farklı bir subdomain’den “http(colon)//file.target-site(nokta)com/images/image.jpeg” şeklinde erişebilirsiniz.

Başka bir çözüm, yüklemek istediğiniz dosyalara erişim talebi aldığınızda HTTP yanıtına Content-Disposition: ek bilgilerini eklemektir.

Dosya Yükleme Güvenlik Açıkları için Önlem Alın

Kullanıcıların bir web sitesine yapabilecekleri herhangi bir dosya yüklemesi tehlikelidir, bu nedenle geliştiricilerin en çok dikkat etmesi gereken konulardan biridir. Saldırganlar böyle bir güvenlik açığı keşfederse site içerisinde bir kabuk açarak sunucudaki bilgileri kolaylıkla istismar edebilirler. Kullanıcılar tarafından yüklenen tüm dosyaları kontrol etmek, beyaz liste yöntemlerini uygulamak ve mümkünse yüklenen dizinin konumunu gizlemek hayati önem taşır.

Ve tabii ki, dosya modüllerini yüklemek için önerilen tüm önlemleri alsanız bile sitenizi korumak için atmanız gereken birçok ek adım vardır. HTTP güvenlik başlıklarını kullanmak, atabileceğiniz böyle bir adımdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir