Dosya yüklemeyi kolaylaştıran web uygulamaları, müşterilerin, ortakların ve çalışanların çeşitli belge ve dosyaları paylaşmaları için portal görevi görerek çok sayıda kuruluş için vazgeçilmez hale gelmiştir. Örneğin, bir İK firması kullanıcıların özgeçmişlerini yüklemelerini sağlayabilir veya bir şirket ortaklarının özel bir web platformu aracılığıyla dosya paylaşmasını kolaylaştırabilir.
Geliştirilmiş güvenlik önlemleri ve daha sıkı doğrulama süreçlerine rağmen saldırganlar sofistike yöntemler kullanarak güvenlik açıklarından faydalanmaya devam etmektedir. Resimler gibi zararsız görünen dosyalar, bir web sunucusunun güvenliğini tehlikeye atmak için manipüle edilebilir.
Çok dilli dosyalar aynı anda birden fazla tür olarak geçerli olabilen dosyalardır ve saldırganların dosya türü tabanlı güvenlik önlemlerini atlamasına olanak tanır. Örnekler arasında hem GIF hem de RAR dosyası olarak işlev gören GIFAR, hem JavaScript hem de JPEG olarak yorumlanan JavaScript/JPEG çoklu dosyaları ve hem Phar arşivi hem de JPEG görüntüsü olarak tanınan Phar-JPEG dosyaları yer almaktadır. Bu çoklu dosyalar, tespit edilmemiş kötü niyetli kodlar içerirken sistemleri iyi huylu bir dosya türü (resim veya PDF gibi) olduklarını düşünmeleri için "kandıran" aldatıcı veya boş uzantılarla tespit edilmeyebilir.
Dosya Yükleme Doğrulaması
Uygun veya kapsamlı doğrulama olmadan kullanıcılardan dosya yüklemelerine izin verilmesi web uygulamaları için önemli bir tehdit oluşturmaktadır. Bir saldırgan web kabuğu gibi kötü amaçlı bir dosyayı başarılı bir şekilde yüklerse, sunucu üzerinde kontrol sahibi olabilir ve hem sistemi hem de hassas verileri tehlikeye atabilir. Bu riskleri azaltmak için, geliştiricilere etkili doğrulama önlemleri uygulamada rehberlik edecek en iyi uygulamalar oluşturulmuştur. Bu uygulamalar, dosya yüklemelerinin güvenli bir şekilde işlenmesini sağlamaya yardımcı olarak istismar riskini en aza indirir.
Dosya yüklemelerini güvence altına almak için odaklanılması gereken temel alanlar şunlardır:
- Uzantı Doğrulama: Yalnızca izin verilen dosya türlerinin kabul edilmesini sağlamak için bir blok listesi veya dosya uzantıları izin listesi uygulayın.
- Dosya Adı Sanitizasyonu: Yükleme sırasında dosya adları için rastgele dizeler oluşturun.
- İçerik-Türü Doğrulaması: Beklenen biçimle eşleştiğinden emin olmak için yüklenen dosyanın MIME türünü doğrulayın.
- Resim Başlığı Doğrulama: Resim yüklemelerinde, PHP'deki getimagesize() gibi işlevler, dosyanın başlığını kontrol ederek geçerliliğini doğrulamak için kullanılabilir.
Dosya Yükleme Filtresi Bypass
Bu koruyucu önlemlerin uygulanmasına rağmen, saldırganlar doğrulama mekanizmalarını atlatmak için yöntemlerini sürekli olarak geliştirmektedir. Boş karakter ekleme, çift uzantı ve boş uzantı gibi teknikler uzantı doğrulamasını zayıflatabilir: bir dosya tespitten kaçmak için "file.php.jpg," "file.php%00.jpg," "file.PhP," veya "file.php/" gibi bir adla görünebilir. MIME türü doğrulaması, dosyanın ilk sihirli baytlarını değiştirerek, örneğin GIF dosyalarıyla ilişkili başlık olan GIF89a olarak değiştirerek atlatılabilir, bu da sistemi dosyayı meşru bir format olarak tanımlaması için kandırabilir. Ayrıca, sunucu yapılandırmalarını manipüle etmek için kötü amaçlı bir .htaccess dosyası yüklenebilir ve yetkisiz uzantılara sahip dosyaların yürütülmesine izin verilebilir.
Polyglot Dosya Saldırıları
Dosya yükleme filtresi bypass tekniğini önlemek için birden fazla güvenlik önlemini bir araya getiren titiz doğrulama süreçlerinin uygulanmasına rağmen, çok dilli dosyaları veya çok dilli görüntüleri hedef alan karmaşık saldırılar önemli bir güvenlik tehdidi olmaya devam etmektedir. Bu yöntem, saldırganların görüntü dosyaları için beklenen ikili yapıya uyan, ancak farklı bir bağlamda yorumlandığında aynı anda kötü amaçlı kod çalıştırabilen görüntüler gibi dosyalar oluşturmasına olanak tanır. Bu dosyaların ikili yapısı, geleneksel doğrulama mekanizmalarını atlamalarına ve belirli senaryolardaki güvenlik açıklarından yararlanmalarına olanak tanır.
ExifTool ile Basit Poliglot Dosya
Çok dilli bir görüntü oluşturmak için basit bir teknik ExifTool kullanmaktır. Bu güçlü uygulama EXIF, XMP, JFIF ve Photoshop IRB gibi çeşitli meta veri formatlarını okumak, yazmak ve değiştirmek için tasarlanmıştır. Ancak, kötü niyetli kişiler ExifTool'dan yararlanarak kötü niyetli bir çoklu görüntü oluşturma gibi zararlı eylemler gerçekleştirebilir. Saldırganlar, bir görüntünün EXIF meta verilerine (özellikle UserComment ve ImageDescription gibi alanlara) kötü amaçlı kod yerleştirmek için ExifTool'u kullanarak bir çoklu görüntü oluşturabilir ve başarılı istismar şanslarını artırabilirler.
Aşağıda, görüntüyle ilgili kapsamlı bilgi sağlayan EXIF meta verileri sunulmaktadır.
Bir tehdit aktörü ExifTool'u kullanarak bir görüntünün EXIF meta verilerine kötü amaçlı kod yerleştirebilir ve böylece doğrulama mekanizmalarını atlatabilecek çok dilli bir dosya oluşturabilir.
MIME türü doğrulaması temel web kabuğu dosyalarının yüklenmesini kısıtlayabilse de, bu çok dilli görüntü bu kısıtlamaları atlayarak bir saldırganın çok dilli bir web kabuğu yüklemesine olanak tanıyabilir.
Saldırgan daha sonra web sunucusunun kontrolünü ele geçirmek için çok dilli web kabuğundan faydalanabilir.
Javascript/JPEG Polyglot Dosyası
Bir JavaScript/JPEG polyglot dosyası hem JPEG görüntüsü hem de JavaScript betiği olarak geçerli olacak şekilde yapılandırılmıştır. Bunu başarmak için kötü niyetli bir aktörün JPEG dosyasının iç yapısını kapsamlı bir şekilde anlaması gerekir. Bu bilgi, JPEG görüntüsü olarak geçerliliğini etkilemeden bir JavaScript motoru tarafından işlenebilmesini sağlayarak kötü niyetli ikili verilerin görüntü içine doğru bir şekilde gömülmesini sağlar.
Bir JPEG Görüntüsü aşağıdaki yapıya sahiptir:
Bayt | İsim |
0xFF, 0xD8 | Resmin Başlangıcı |
0xFF, 0xE0, 0x00, 0x10, ... | Varsayılan Başlık |
0XFF, 0XFE, ... | Resim Yorumu |
0xFF, 0xDB, ... | Kuantizasyon Tablosu |
0xFF, 0xC0, ... | Çerçeve Başlangıcı |
0xFF, 0xC4, ... | Huffman Tablosu |
0xFF, 0xDA, ... | Tarama Başlangıcı |
0xFF, 0xD9 | Resmin Sonu |
JPEG formatı - kaynak: https://github.com/corkami/formats/blob/master/image/JPEGRGB_dissected.png
Bir JPEG görüntü yapısında, başlığı uzunluk bilgisi takip eder. Önceki örnekte gösterildiği gibi, başlık 0xFF 0xE0 0x00 0x10 dizisiyle başlar; burada 0x00 0x10 özellikle segmentin uzunluğunu temsil eder ve 16 baytı gösterir. 0xFF 0xD9 işaretçisi görüntünün sonunu gösterir.
Bir JavaScript/JPEG çok dilli dosyası oluşturmak için, JavaScript motorunun bunları tanıyıp işleyebilmesini sağlamak amacıyla görüntünün onaltılık değerlerini değiştirmek gerekir.
İlk olarak, JavaScript'te 0xFF 0xD8 0xFF 0xE0 dizisi ASCII olmayan değerler olarak yorumlanabilir, ancak 0x00 0x10 geçersizdir ve değiştirilmelidir. Bu onaltılık değerler için uygun değiştirme 0x2F 0x2A'dır; bu, JavaScript'te bir yorum açmak için kullanılan bir sözdizimi olan /*'in onaltılık gösterimidir. Bu ikame, kalan ikili verilerin yorumun bir parçası olarak göz ardı edilmesini sağlar.
Ancak, 0x00 0x10 orijinal olarak JPEG başlığının uzunluğunu temsil ettiğinden, ondalık olarak 12074'e eşit olan 0x2F 0x2A olarak değiştirilmesi, geçerliliğini korumak için JPEG başlığının yeniden tanımlanmasını gerektirir. Bunu başarmak için boş baytlar eklenmeli ve JavaScript yükü JPEG yapısında bir görüntü yorumunu gösteren 0xFF 0xFE işaretçisinden sonra yerleştirilmelidir.
Örneğin, yük 28 bayt uzunluğunda */=alert(document.domain);/* ise, gerekli null baytlar aşağıdaki gibi hesaplanacaktır: 12074 (yeni uzunluk) - 16 (orijinal başlık uzunluğu) - 2 ( 0xFF 0xFE işaretleyicisi için) - 28 (yük uzunluğu) = 12.028 boş bayt.
Sonuç olarak, JPEG görüntüsü içindeki JavaScript kodu aşağıdakine benzeyecektir:
Son olarak, 0x2A 0x2F 0x2F 0x2F dizisi (*///'ye karşılık gelir) JPEG bitiş işaretçisi 0xFF 0xD9'dan hemen önce yerleştirilmelidir. Bu adım JavaScript yorumunu kapatır ve JPEG dosyasının yapısını bozmadan yükün doğru şekilde yürütülmesini sağlar.
Bu değişiklikten sonra, görüntü hala geçerli bir görüntü olarak yorumlanabilirken aynı zamanda çalıştırılabilir JavaScript kodu da içerebilir.
Bir HTML dosyası bu görüntüyü JavaScript kaynak kodu olarak yüklediğinde, geçerli kalır ve gömülü JavaScript kodunu çalıştırabilir:
Çoklu görüntü dosyaları yalnızca istemci tarafı istismarı için değil, aynı zamanda belirli koşullar altında sunucu tarafı saldırıları için de risk oluşturmaktadır. Bunun bir örneği, hem bir PHP Arşivi (Phar) hem de bir JPEG görüntüsü olarak yorumlanabilen Phar/JPEG poliglot dosyasıdır. Phar dosya yapısı, serileştirilmiş verilerin meta verilere gömülmesine izin verir, bu da özellikle belirli PHP sürümlerinde serileştirme güvenlik açıkları için potansiyel bir risk oluşturur. Sonuç olarak, Phar/JPEG çoklu dosyaları dosya yükleme doğrulamasını atlamak ve savunmasız sunucuları istismar etmek için kullanılabilir.
Phar dosya formatı stub/manifest/contents/signature şeklinde düzenlenir ve Phar arşivinde nelerin yer aldığına dair önemli bilgileri manifestosunda saklar:
- Saplama: Saplama, dosyaya çalıştırılabilir bir bağlamda erişildiğinde çalıştırılan bir PHP kodu yığınıdır. Sonunun __HALT_COMPILER(); ile bitmesi gerekliliği dışında, saplamanın içeriği üzerinde herhangi bir kısıtlama yoktur.
- Manifest: Bu bölüm, arşiv ve içeriği hakkında serialize() formatında saklanan serileştirilmiş Phar meta verilerini içerebilecek meta veriler içerir.
- Dosya içerikleri: Arşive dahil edilen orijinal dosyalar.
- İmza (isteğe bağlı): Bütünlük doğrulaması için imza bilgilerini içerir.
Stub, __HALT_COMPILER() şartının ötesinde herhangi bir içerik kısıtlaması getirmediğinden, bir tehdit aktörü bir görüntünün onaltılık değerlerini stub'a enjekte edebilir. Bu değerleri PHAR dosyasının başına yerleştirerek, geçerli bir görüntü olarak tanımlanabilir. Sonuç olarak, aşağıdaki örnekte gösterildiği gibi, bir JPEG görüntüsünün onaltılık baytları başlangıca eklenerek kolayca bir PHAR/JPEG poliglotu oluşturulabilir:
Bu yöntem sayesinde, oluşturulan çok dilli dosya hem geçerli bir görüntü hem de meşru bir PHAR dosyası olarak işlev görür ve bu nedenle belirli dosya yükleme doğrulama mekanizmalarını atlamak için kullanılabilir.
Bu çoklu dosya dosya yükleme filtrelerini atlayabilse de, şu anda web sunucusunu istismar etme yeteneğine sahip değildir. Bir PHAR dosyası veya PHAR çoklu dosyası kullanarak bir web sunucusunu başarılı bir şekilde istismar etmek ve tehlikeye atmak için, dosyanın manifestosuna kötü amaçlı serileştirilmiş meta veriler eklemek önemlidir.
File(), file_exists(), file_get_contents(), fopen(), rename() veya unlink() gibi dosya işlemleriyle ilişkili belirli PHP işlevlerinde (PHP ≤7.x) PHAR dosyasına PHAR sarmalayıcı (phar://) aracılığıyla erişildiğinde, serileştirilmiş meta veriler için unserialize() işlevi tetiklenir. Sonuç olarak, tehdit aktörleri PHP gadget zincirleri oluşturmak için yaygın olarak kullanılan bir araç olan PHPGGC'yi kullanarak, bir PHAR çoklu dosyası aracılığıyla serileştirme güvenlik açığından yararlanabilir ve böylece web uygulama sunucusunu tehlikeye atabilir.
PHAR/JPEG çok dilli dosyalar ve deserialization güvenlik açıklarının birleşimi, dosya yükleme filtreleri uygulandığında bile saldırganlara bir web uygulama sunucusuna sızma yetkisi verir. Özellikle, bu tehlike bir görüntü dosyasının işlenmesi sırasında bile ortaya çıkabilir.
Saldırganlar, dosya yükleme filtrelerini atlamak için çok dilli dosyalardan yararlanarak ve dosya konumuna PHAR sarmalayıcısını (phar://) ekleyerek, web sunucusunu dosyayı bir PHAR arşivi olarak ele alması için manipüle edebilir. Bu manipülasyon daha sonra bir deserialization açığını tetikleyerek dosya işlem fonksiyonları aracılığıyla uzaktan kod yürütülmesine yol açabilir.
Uygulamanızdaki çok dilli dosyalarla ilişkili riskleri aktarmak için, uygulamanın kötü amaçlı dosyaların veya web kabuklarının yüklenmesini önlemek için katı dosya yükleme filtreleri kullandığı bir ortamı simüle ettik. Bu önlemlere rağmen, çok dilli bir görüntü doğrulama sürecini atlayabilir ve belirli bağlamlarda uzaktan kod yürütülmesine yol açarak sonuçta savunmasız web uygulama sunucusunu tehlikeye atabilir.
Bu örnek, müşteriler, ortaklar ve kuruluşlar arasında dosya paylaşımını sağlayan geleneksel bir web uygulamasını göstermektedir:
MetaDefender Core ve MetaDefender ICAP Server web uygulamalarınızı bu tehditlerden korur ve ağınızın ve altyapınızın güvenliğini artırır.
MetaDefender ICAP Server ve MetaDefender Core web sunucunuzu kötü amaçlı PHAR/JPEG çoklu dosyalarını içeren karmaşık saldırılara karşı aşağıdaki şekillerde korumak için birlikte çalışır:
Bir PHAR/JPEG poliglot dosyası web uygulamasına yüklendiğinde, Deep CDR ™ teknolojimizi kullanarak kapsamlı bir sterilizasyon işlemi için ilk olarak MetaDefender ICAP Server aracılığıyla MetaDefender Core adresine iletilir. Basit dosya türü denetleyicilerinin aksine, Deep CDR yüklenen dosyanın yapısını kapsamlı bir şekilde analiz eder, komut dosyalarını, makroları ve politika dışı içeriği kaldırarak JPEG dosyasını yalnızca gerekli verileri içerecek şekilde yeniden yapılandırır.
Bu işlem JPEG bitiş işaretçisinden(0xFF 0xD9) sonra eklenen zararlı PHAR içeriğini kaldırarak sterilize edilmiş dosyanın kesinlikle bir JPEG olmasını sağlar. Sonuç olarak, web uygulaması PHAR/JPEG çoklu saldırılarına karşı korunur; bir saldırgan PHAR sarmalayıcı enjekte etmek için dosya işleme şemasını değiştirebilse bile, web sunucusunu istismar edemez.
İster WAF'lar (web uygulaması güvenlik duvarları), ister proxy'ler veya giriş denetleyicileri kullansınlar, yerleşik ağ güvenliği altyapısına sahip kuruluşlar artık MetaDefender ICAP Server aracılığıyla savunma mekanizmalarını geliştirebilirler.Bu çözüm, mevcut web sunucuları ile MetaDefender Core arasında bir arayüz oluşturarak gelen tüm dosyalar için şeffaf bir güvenlik kontrol noktası oluşturuyor. ICAP arayüzü üzerinden yönlendirilen tüm içerikler web sunucunuza ulaşmadan önce taranacak ve işlenecek, böylece yalnızca güvenli ve meşru içeriğin ağınıza girmesi ve son kullanıcılara ulaşması sağlanacaktır.
Bu yaklaşım, kuruluşların ek ve güçlü bir koruma katmanı eklerken mevcut güvenlik yatırımlarından yararlanabilecekleri anlamına gelir. NGINX giriş denetleyicisi kullanan kuruluşlar, proxy yapılandırması yoluyla MetaDefender ICAP Server adresini mevcut altyapılarıyla entegre edebilirler.
OPSWAT'in yaklaşımı geleneksel tehdit tespitinin ötesine geçer. Sadece şüpheli dosyaları işaretlemek yerine, MetaDefender Core potansiyel tehditleri aktif olarak etkisiz hale getirerek tehlikeli dosyaları güvenli, kullanılabilir içeriğe dönüştürür. Web sunucunuzla entegre edildiğinde, MetaDefender ICAP Server sıfırıncı gün tehditlerine ve çoklu saldırılara karşı kapsamlı koruma sağlar.
"Hiçbir dosyaya güvenmeyin. Hiçbir cihaza güvenmeyin. ™" felsefesiyle güçlenen OPSWAT , altyapınızın her seviyesinde patentli teknolojilerle dünyanın dört bir yanındaki müşterilerin zorluklarını çözer, ağlarınızı, verilerinizi ve cihazlarınızı güvence altına alır ve bilinen ve bilinmeyen tehditleri, sıfır gün saldırılarını ve kötü amaçlı yazılımları önler.