Pazar, Ağustos 20, 2006

Cross Site Scripting (css - xss) Nedir / Nasıl Engellenir?

Efendim son zamanlarda lamer'lar (yalancı hacker) Ege Üniversitesi'nde XSS / CSS avına çıkmışlar, e bari nedir /nasıl engellenir yazalım.Söz edeceğimiz açık, 2000 senesinden beri bilinen ama nedense hala web programcıları tarafından göz ardı edilen bir açıktır.

XSS, Kullanıcının girdi sağlayacağı sayfalarda, kullanıcı tarafından girdiye script'ler gömülerek yapılan saldırılardır. Bu bazen direkt kullanıcının (lamer) kendisi tarafından, ya da onu başka bir isteye yönlendirmek isteyen bir lamer tarafından yapılıyor olabilir.

“Genelde cross site scripting açıkları, saldırganın sistemi deneme-yanılma yaparak bulması ile ortaya çıkar. Açığın bulunması ile saldırgan, başka bir domainden, açığın bulunduğu domain ve sayfanın bilgilerini, session bilgilerini ve diğer obje değerlerini çalmasına olağan sağlar.” [1]. Detaylar için bkz [1].

"Cross-site scripting (XSS) güvenlik açıkları, e-posta listelerinde en çok rastlanan güvenlik açıkları arasında yer almaktadır. Bunun başlıca nedeni ise bu açığa bir çok web uygulamasında rastlanması ve ücretsiz güvenlik açığı tarama yazılımları ile kolayca keşfedilmesidir..." [7].

Çözüm:

Aslında çözüm yazılan kodlamanın düzeltilmesindedir.

Programın kullanıcıdan aldığı girdiler, her zaman kontrolden geçirilmelidir. Bu aynı zamanda "Sql injection", "Buffer Overflow" gibi saldırıları da engelleyecektir.

Eğer belirli bir tür veri (numerik, alfanümerik) bekleniyorsa ve belirli bir boyutta ( 8 karakter, maksimum 20 karakter gibi) olması bekleniyorsa, girilen verinin bu şartlara uyduğunun sağlanması gerekmektedir. Girdilerden metakarakter'ler mutlaka filtrelenmelidir. Bu birçok saldırıyı engelleyecektir. Örneğin

< > " ' % ; ) ( & + -

karakterleri kullanıcı girdisinden temizlenmelidir. Aslında ne tür verinin beklendiği belirtildiği durumlarda, bu tür filtreleme de otomatikman gerçekleşecektir.Bu tür karakterlerin gerektiği ortamlarda, girilen verinin encode edilmesi gerekebilir.ASP'de bunun nasıl yapılabileceği için bkz [4]. Girdideki metkarakterlerde "<" karakterini "<" a dönüştürmek gibi süreçler gerçekleştirilebilir [2].

Bu önlemler birçok XSS saldırısını engelleyecektir. Daha detaylı bilgi için [5] ve [6] incelenmelidir. Web üzerinden yazılım geliştirenlerin Cert'in [6] referansında yazılı olanlara dikkat etmesi ve kodlamalarında dökümanda belirtilen kurallara uyması gerekmektedir.

Ağda kurulacak bir sistemle bu saldırıların engellenmesinin sağlanması ise ancak sunucuları bir "proxy" veya IPS arkasına koyup her türlü data verisinin kontrolü ve düzeltilmesi ile sağlanabilir. Bu süreçte ise idari ve teknik çeşitli problemler yaşanabilecektir.

En etkin yol, dökümanda belirtildiği üzere sunuculardaki kodun tekrar elden geçirilmesidir. Eğer kodu yazan ortalıklarda gözükmüyorsa, ya o kod kaldırılmalı ya da ağ tabanlı bir çözüme gidilmelidir.

Referanslar

[1] Cross site scripting, http://tr.wikipedia.org/wiki/Cross_site_scripting

[2] http://www.cgisecurity.com/articles/xss-faq.shtml

[3] http://www.devshed.com/c/a/Security/A-Quick-Look-at-Cross-Site-Scripting

[4] http://support.microsoft.com/default.aspx?scid=kb;en-us;252985

[5] CERT® Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests

http://www.cert.org/advisories/CA-2000-02.html

[6] Understanding Malicious Content Mitigation for Web Developers

http://www.cert.org/tech_tips/malicious_code_mitigation.html

[7] http://grisapka.org/index.php?itemid=7&catid=5

Hiç yorum yok: