Cross-site scripting (XSS) nedir?

tball

Cross-site Scripting (XSS), genellikle kullanıcı girişi kabul eden web sitelerinde ve/veya web uygulamalarında karşılaşılan bir güvenlik açığıdır. Bunlara örnek olarak arama motorları, oturum açma formları, mesaj panoları ve yorum kutuları verilebilir.

Siber suçlular, bu güvenlik açığından yararlanmak için bu işlevlere çalıştırılabilir kötü amaçlı kod dizileri girerler. Bu işlem, zararlı kodun hedef web sitesinin içeriğine enjekte edilmesini sağlar; böylece kod, sitenin bir parçası haline gelir ve siteyi ziyaret eden veya görüntüleyen kullanıcıları doğrudan etkileyebilir. Kod, kendisini aslında web sitesinin bir parçası olmayan ancak yalnızca ziyaretçiye ait görünen geçici içerik olarak da gösterebilir. Bu durum, web sitesinin gerçekten siber suçlular tarafından ele geçirilmiş gibi görünmesine neden olur.

Siber suçlular, bu güvenlik açığını kullanarak bir web sitesini ele geçirebilir veya doğrudan tehlikeye atabilir; ayrıca, sitenin sunucusunda ya da yazılımında bulunan diğer açıkları da istismar edebilirler.

XSS Nasıl Çalışır

  • Siber saldırganlar, öncelikle hedef web sitesini belirler ve kullanıcı girdisi kabul eden zafiyetli işlevleri tespit eder. Bunlara arama alanları, giriş (login) formları ve yorum bölümleri örnek verilebilir.

  • Saldırganlar daha sonra seçtikleri bu alanlara kötü amaçlı kod enjekte eder. Bu zararlı kodlar genellikle HTML veya JavaScript gibi istemci taraflı programlama dilleri kullanılarak yazılır.

  • Enjekte edilen kod; örneğin arama sonuçları sayfasında ya da bir yorumun görüntülendiği sayfada olduğu gibi, uygulamanın ürettiği web sayfası içerisinde çalıştırılır. Bu noktada zararlı kod, sayfanın bir parçası hâline gelerek sayfanın tehlikeye girmesine neden olur.

  • Kodun nasıl enjekte edildiğine bağlı olarak, zararlı içerik her zaman web sitesinin kendisinde kalıcı olarak bulunmayabilir. Bunun yerine yalnızca belirli bir istismar anında ortaya çıkan geçici bir bileşen olarak görünebilir. Bu durum, gerçekte site altyapısı ele geçirilmemiş olsa bile, web sitesinin saldırıya uğramış olduğu izlenimini yaratabilir. 

  • Kullanıcılar; saldırganlar tarafından özellikle yönlendirilerek ya da istismar edilen işlevle tesadüfen karşılaşarak bu tür ele geçirilmiş sayfaların mağduru olabilir.

  • Enjekte edilen kodun kurbanın sisteminde gerçekleştirebileceği eylemler, nispeten zararsızdan son derece kötü niyetliye kadar geniş bir yelpazede değişebilir. Bazı durumlarda etki, site üzerinde yayınlanan meşru içerikler arasında beklenmedik bir görselin gösterilmesi kadar basit olabilir. Daha ciddi senaryolarda ise kullanıcı kötü amaçlı bir web sitesine yönlendirilebilir ve/veya sistemine otomatik olarak zararlı dosyalar indirilebilir. XSS, kullanıcı adı ve parola gibi kritik kişisel bilgilerin mağdurlardan çalınması amacıyla da kullanılabilir.

XSS Neden Tehlikelidir? 

XSS sayesinde siber saldırganlar, güvenilir web sitelerini kötü amaçlı platformlara dönüştürebilir. Bu durum yalnızca kullanıcılar açısından değil, aynı zamanda söz konusu web sitesinin sahibi için de ciddi zarar ve itibar kaybına yol açar.

XSS yoluyla ele geçirilmiş web siteleri, kullanıcıların sistemlerini hedef alan çok sayıda tehdidin dağıtılmasında kullanılabilir. Bu tehditler; uygunsuz veya yanıltıcı içeriklerin görüntülenmesinden, kullanıcının haberi olmadan sistemine zararlı yazılım indirilmesine kadar uzanabilir.

Kullanıcılar Ne Yapabilir? 

XSS ne kadar tehlikeli olsa da, bu zafiyetin giderilmesi ve etkilerinin azaltılması mümkündür. Web sitesi sahipleri, kullanıcı girdisi kabul eden tüm web uygulamalarında, girilen verilerin sayfada işlenmeden önce uygun şekilde temizlenmesini (sanitize) ve doğrulanmasını (validate) sağlamalıdır. Bu yaklaşım, kötü amaçlı kod enjeksiyonlarının önüne geçilmesine yardımcı olur. Kullanıcılar ise mümkün olan durumlarda tarayıcılarında betik çalıştırmayı devre dışı bırakmalı ve şüpheli ya da güvenilir olmayan kaynaklardan gelen bağlantılara tıklamaktan kaçınmalıdır.

Web sitesi geliştiricileri/sahipleri:

  • Kullanıcı girdisi kabul eden tüm sayfalarda HTML ve JavaScript gibi çalıştırılabilir kodların filtrelendiğinden emin olmalıdır.

  • Web uygulamalarındaki güvenlik açıklarını düzenli olarak taramalı ve gerekli yamaları uygulamalıdır.

  • XSS veya benzeri zafiyetlerin istismar edilmesini önlemek için web sitesi ve sunucu yazılımlarını güncel tutmalıdır.

Kullanıcılar:

  • Gerekli olmayan sayfalarda betik çalıştırmayı devre dışı bırakmalı veya mümkünse tamamen kapatmalıdır.

  • Şüpheli e-postalarda veya forum / mesaj panolarındaki bağlantılara tıklamaktan kaçınmalı; bu bağlantıların ele geçirilmiş sayfalara yönlendirebileceğini unutmamalıdır

  • Web sitelerine üçüncü taraf bağlantılar üzerinden değil, doğrudan adresi tarayıcıya yazarak erişmelidir.

  • İkincil güvenlik açıklarının istismar edilmesini önlemek için sistem yazılımlarının ve uygulamaların düzenli olarak güncellenmesi kritik öneme sahiptir. 

XSS saldırı türleri 

Open Web Application Security Project’e (OWASP) göre XSS saldırıları üç ana kategoriye ayrılır: reflected XSS, stored XSS ve Document Object Model (DOM) tabanlı XSS. Bu saldırı türleri aşağıda ayrıntılı olarak açıklanmaktadır.

Reflected cross-site scripting (kalıcı olmayan)

Reflected XSS saldırısı, saldırganın kötü amaçlı bir betiği zafiyetli bir web uygulamasına göndermesi ve sunucunun bu betiği HTTP yanıtının bir parçası olarak anında geri döndürmesiyle gerçekleşir. Mağdurun tarayıcısı, yanıtın bir parçası olarak bu zararlı betiği çalıştırır; bu da kullanıcının ele geçirilmesine ve hassas bilgilerin saldırgana iletilmesine yol açabilir.

Reflected XSS saldırıları çoğunlukla hata mesajlarını veya arama sonuç sayfalarını hedef alır. Bunun nedeni, kullanıcıların tıklama ihtimalinin yüksek olduğu zararlı bağlantıların e-posta veya mesajlaşma kanalları üzerinden kolayca dağıtılabilmesidir. Kullanıcı bağlantıya tıkladığında, sunucu zararlı betiği içeren isteği alır ve betik sunucuda saklanmadığı için yanıtla birlikte kullanıcıya geri yansıtır. Kullanıcı girdilerinin yeterince doğrulanmadığı veya temizlenmediği ya da güvenilmeyen istek verilerinin doğrudan sunucu yanıtlarına eklendiği durumlarda reflected XSS zafiyetleri ortaya çıkar.

XSS saldırılarına karşı ilk savunma hattı, güçlü girdi doğrulama ve içerik filtreleme mekanizmalarıdır. Riskli veri kalıplarını engellemek için betik kaynaklarına yönelik izin listeleri (allowlist) ve engelleme listeleri (blocklist) kullanılabilir.

Buna ek olarak, katı bir İçerik Güvenliği Politikası (Content Security Policy – CSP) uygulanması, satır içi betiklerin hangi kaynaklardan çalıştırılabileceğini belirleyerek reflected XSS saldırı riskini önemli ölçüde azaltır. İyi yapılandırılmış bir CSP, hangi betiklerin nereden yükleneceği ve çalıştırılacağı üzerinde ayrıntılı kontrol sağlar.

Stored cross-site scripting (kalıcı XSS) 

Stored XSS saldırılarında, kötü amaçlı bir betik kullanıcı girdisinin bir parçası olarak hedef sunucuya kaydedilir. Reflected XSS’ten farklı olarak, stored XSS anlık bir yanıtla sınırlı değildir; etkilenen içerik her görüntülendiğinde betik kullanıcının tarayıcısında çalıştırılır. Saldırganlar, genellikle HTML5 tabanlı modern uygulamalardan yararlanarak (HTML veritabanları veya kalıcı depolama mekanizmaları üzerinden) zararlı betikleri kalıcı şekilde saklar.

Bu nedenle saklanan betik, ilgili sayfaya erişen her kullanıcıya tekrar tekrar iletilir ve çalıştırılır; bu da saldırıyı hem kalıcı hem de ölçeklenebilir hâle getirir. Kötü amaçlı içerik merkezi olarak saklandığı için, saldırganlar zaman içinde çok sayıda kullanıcıyı kolayca etkileyebilir. Stored XSS güvenlik açıkları, eğitimli olmayan kullanıcıların verileri yeterli doğrulama veya temizleme (sanitization) işlemleri uygulamadan çekmesi ya da görüntülemesi durumunda da ortaya çıkabilir.

Stored XSS saldırılarının temel amacı, mağdurun tarayıcısında kötü amaçlı betik çalıştırmaktır. Bu nedenle en etkili önlem; kullanıcı girdilerinin dikkatle işlenmesi, saklanan verilerin temizlenmesi ve uygun parametre bağlama (parameter binding) yöntemlerinin kullanılmasıdır.

Veri temizleme işlemleri, otomatik kaçış (auto-escaping) kullanan şablon sistemleri veya HTML kodlama (HTML encoding) teknikleriyle gerçekleştirilebilir. Çıktı kodlaması, kullanıcıdan gelen verilerin çalıştırılabilir içerik yerine metin olarak ele alınmasını sağlar ve tarayıcının bu verileri aktif kod olarak yorumlamasını engeller. Pratikte bu, özel karakterlerin HTML veya JavaScript olarak işlenmesi yerine güvenli şekilde sayfa içeriği olarak görüntülenmesi anlamına gelir. 

Parametre bağlama yöntemleri kullanılan saldırı vektörüne göre değişiklik gösterebilir; ancak değişkenler her zaman çalıştırılabilir mantığın içine eklenmek yerine veri olarak geçirilmelidir. Ek bir güvenlik katmanı olarak, genellikle birkaç satırlık yapılandırma ile uygun HTTP yanıt başlıkları kullanılarak XSS saldırılarının önüne geçilebilir.

XSS saldırılarını gerçek zamanlı olarak engellemenin bir diğer yolu ise, istismar girişimlerini aktif biçimde tespit eden dinamik güvenlik kontrollerinin devreye alınmasıdır. Bilinen zararlı kalıpların engellenmesi sayesinde saldırganların mevcut güvenlik açıklarını kötüye kullanması önlenebilir.

Son olarak, Web Uygulama Güvenlik Duvarları (WAF), XSS saldırılarının gerçek zamanlı olarak tespit edilmesi ve engellenmesi amacıyla kullanılabilir.

Document Object Model (DOM) tabanlı cross-site scripting 

DOM arayüzü, HTML ve XML belgelerinin okunması ve değiştirilmesi yoluyla web sayfalarının işlenmesini ve manipüle edilmesini sağlar. DOM tabanlı XSS saldırıları, mağdurun tarayıcısındaki DOM bağlamına doğrudan kötü amaçlı değişiklikler ekleyerek istemci taraflı kodun beklenmeyen ve güvensiz şekillerde çalıştırılmasına neden olur.

Reflected ve stored XSS saldırılarından farklı olarak, DOM tabanlı XSS’te zararlı betik sunucuda saklanmaz ve sunucu yanıtlarıyla iletilmez. Bu tür saldırılarda temel güvenlik açığı, doğrudan kullanıcının tarayıcısıdır. DOM tabanlı zafiyetler, diğer XSS türlerine kıyasla daha zor anlaşılır ve tespit edilir. Bu nedenle nispeten daha az görülür; ancak aynı zamanda daha sofistike ve giderilmesi daha zordur. Ayrıca, otomatik zafiyet tarayıcıları ve web uygulama güvenlik duvarları, DOM tabanlı XSS açıklarını güvenilir şekilde tespit etmekte çoğu zaman yetersiz kalır.

Reflected ve stored XSS için kullanılan önleme tekniklerinin büyük bölümü burada da geçerli olsa da, istemci taraflı kodun temizlenmesi ve doğrulanması konusunda çok daha fazla özen gösterilmesi gerekir. Etkili iki yaklaşım; kullanıcı kontrollü girdilerin potansiyel olarak tehlikeli JavaScript fonksiyonlarına (sink olarak adlandırılır) ulaşmasını engellemek veya yalnızca güvenilir içeriklerin çalıştırılmasına izin vermek için izin listeleri (allowlist) kullanmaktır. Bu önlemler sayesinde, DOM’u tehlikeye atabilecek karakter dizilerinin hassas sink’lere ulaşması engellenir. Ayrıca, tarayıcıların yerleşik işlevleri kullanılarak veri temizleme yapılabilir; bu da ayrıştırıcı (parser) kaynaklı güvenlik sorunlarının riskini azaltır.

DOM tabanlı XSS’e karşı modern ve etkili bir savunma yöntemi ise Trusted Types kullanımını benimsemektir. Trusted Types, DOM’daki riskli işlemlerin yalnızca önceden tanımlanmış bir güvenlik politikasından geçmiş verilerle yapılmasına izin veren bir tarayıcı güvenlik mekanizmasıdır. Bu yaklaşım, rastgele karakter dizilerinin tehlikeli sink’lere aktarılmasını engeller; tarayıcının kod ile veriyi net biçimde ayırt etmesini sağlar ve böylece DOM tabanlı XSS zafiyetlerinin temel kaynağını ortadan kaldırır. 

Sunucu taraflı XSS ile istemci taraflı XSS karşılaştırması

XSS saldırıları, sunucu taraflı XSS ve istemci taraflı XSS olmak üzere iki ana gruba ayrılır. İstemci taraflı programlar, kullanıcının cihazında veya tarayıcısında çalışır; kullanıcı arayüzünü oluşturur ve istemci üzerinde gerçekleşen işlemleri yönetir. Sunucu taraflı programlar ise sunucular üzerinde çalışır ve bir web sayfasının içeriğini üretir.

Sunucu taraflı XSS, sunucu üzerinde çalışan kodun zafiyetli olması ve tarayıcının bu yanıtı oluştururken içindeki kötü amaçlı içeriği, meşru betiklerle birlikte çalıştırması sonucunda ortaya çıkar. Buna karşılık istemci taraflı XSS, kullanıcının cihazında çalışır ve sayfa yüklendikten sonra web sayfasını değiştirir.

HTML’nin işlendiği her yerde XSS saldırısı mümkün olabilir. Stored, reflected veya DOM tabanlı olsun, tüm XSS saldırılarının nihai etkisi aynıdır: Saldırgan, kullanıcının web oturumu üzerinde tam kontrol elde eder.

XSS saldırı türleri birbiriyle örtüşebilir ve tek bir web sitesi aynı anda birden fazla XSS türüne karşı zafiyetli olabilir. Tek bir web sitesi ya da çevrimdışı bir uygulama söz konusu olduğunda, bu üç saldırı türünün tamamı doğrudan tarayıcı içinde gerçekleşebilir. Bununla birlikte, verinin sunucuda saklanması ya da yalnızca sunucudan geri yansıtılması durumuna bağlı olarak saldırının davranışı ve etkisi farklılık gösterebilir. 

Trend Vision One™ Platformu Çözümü

Saldırganları daha hızlı durdurmak ve siber risklerinizi kontrol altına almak tek bir platformla başlar. Yapay zeka, önde gelen tehdit araştırmaları ve istihbarat ile desteklenen kapsamlı önleme, tespit ve müdahale yetenekleriyle güvenliği bütünsel olarak yönetin.

Trend Vision One, çeşitli hibrit BT ortamlarını destekler, iş akışlarını otomatikleştirir ve düzenler ve uzman siber güvenlik hizmetleri sunar, böylece güvenlik operasyonlarınızı basitleştirebilir ve birleştirebilirsiniz.

fernando

Tehdit İstihbaratı Başkan Yardımcısı

pen

Jon Clay, siber güvenlik alanında 29 yılı aşkın deneyime sahiptir. Jon, Trend Micro'nun harici olarak yayınlanan tüm tehdit araştırması ve istihbaratına ilişkin bilgileri toplamak ve paylaşmak için sektör deneyimini kullanıyor.