19
HTML CROSS-SITE SCRIPTING CHECK NETSCALER APPLICATION FIREWALL FEBRUARY 18, 2016 VELİ ANLAMA Senior Security Engineer

Netscaler WAF XSS

Embed Size (px)

Citation preview

HTML CROSS-SITE SCRIPTING CHECK

NETSCALER APPLICATION FIREWALL

FEBRUARY 18, 2016 VELİ ANLAMA

Senior Security Engineer

HTML Cross-Site Scripting Check

HTML Cross-Site Scripting (XSS), kullanıcı isteklerinin header ve POST body’lerinin her ikisini olası cross-site scripting atakları için kontrol eder. Eğer bir cross-site script bulursa saldırıyı zararsız hale getirmek için ya isteği değiştirir yada bloklar.

Korunan web sitelerinde ki güvenliği ihlal eden scriptlerin kötüye kullanımını önlemek için, HTML Cross-Site Scripting kontrolü same origin kuralına uymayan scripteri bloklar. Same origin kuralı script’lerin bulunduğu sunucu dışında ki sunucularda sunucu içeriğine erişilmesini ve değiştirmesini önler. Same origin kuralına uymayan herhangi bir script cross-site script olarak adlandırılır ve başka bir sunucu üzerinde ki içeriğe erişmeki veya değiştirmek için bu script’in pratik kullanımı cross-stite scripting olarak adlandırılır.

Same origin rule

Cross-site scripting’in bir güvenlik sorunu olmasının sebebi cross-site scripting’e izin veren bir web sunucusu’nun bu web sunucusu üzerinde bulunmayan ama farklı bir web sunucusu üzerinde bulunan ve saldırganın sahip olduğu ve onun trafından kontrol edilen bir script tarafından saldırıya maruz kalabilmesidir.

Malesef çoğu şirketler same origin kuralını ihlal eden Javascript tabanlı gerliştirilmiş web içeriklerine sahiptirler. Eğer bu gibi sitelerde HTML Cross-Site Scipting aktif edilirse bu kontrolün meşru aktiviteleri bloklamaması için istisnalar tanımlanmalıdır.

False positive’lerden kaçınmak için relaxation rule’lar (muaf kuralları) oluşturabilirsiniz. Application Firewall koruması’nın öğrenme motoru (learning engine) relaxation rule’ları ayarlamak için tavsiyeler sağlayabilir.

Citrix uygulama güvenlik duvarı HTML Cross-Site Scirpting koruması’nı uygularken aşağıda ki eylem seçeneklerini sunar;

Block: Block etkinleştirilirse, eğer XSS tag’leri istemci isteğinde bulunursa block eylemi tettiklenir.

Log: Eğer log özelliği etkinleştirilirse, HTML Cross-Site Scripting koruması bu korumanın aldığı eylemi gösteren log mesajları üretir. Eğer block devre dışı bırakıldıysa XSS ihlalinin saptandığı herbir form alanı veya header için ayrı bir log mesajı oluşturulur. Bu arada istek blok’landığında sadece tek bir mesaj üretilir. Benzer bir şekilde transform operasyonu için XSS tag’ları birden fazla alanda dönüştürüldüyse bile istek başına bir log mesajı üretilir. Meşru isteklere verilen yanıtların bloklanıp bloklanmadığını belirlermek için log’lar incelenebilir. Log sayılarında ki dramatik yükselişler bir saldırıyı başlatma teşbbüslerini işaret edebilir.

Stats: Eğer aktif edilirse stat özelliği ihlaller ve loglar hakkında istatistikleri toplar. Stat counter’larında ki beklenmeyen bir dalgalanma uygulamanın saldırı altında olduğunu işaret edebilir.Eğer meşru istemciler bloklanıyorsa yeni relaxation rule’ları eklenmeli veya varolan bir tanesi değiştirilmelidir.

Learn:Eğer ideal olarak relaxation rule’larının hangilerinin uygulama için uygun olduğundan emin değilseniz öğrenilen veriye dayalı HTML Cross-Site Scipting kural tavsiyeleri türetmek için Application Firewall’un öğrenme özeliğini kullanabilirsiniz. Application Firewall öğrenme motoru trafiği izler ve gözlemlenen değerlere dayalı learning tavsiyeleri sağlar. Performansı tehlikeye atmadan en uygun yararın alınması kısa süreliğine learn seçeneğini aktif ederek kuralların temsili bir örneğini elde edinilmesiyle sağlanabilir. Sonra bu kurallar deploy edilerek relaxation rule’lara tanımlanmalı ve learning kapatılmalıdır. Transform cross-site scripts:Aktif edilirse application firewall isteklerde HTML Cross-Site Script ile karşılaştığında aşağıda ki değişilikleri yapar:

Küçüktür işareti (<) HTML kakaterlernden (&lt;) e dönüştürülür. Büyüktür işareti (>) HTML karekterlerinden (&gt;) e dönüştürülür.

Bu internet tarayıcılarının <script> gibi tehlikeli html tag’larını yorumlanmamasını garanti eder ve dolayısıyla zararlı kodlarının çalıştırılmasını önlemiş olur. Eğer request-header

checking ve transformation her ikisi aktfi edilirse request headerlar’da bulunan herhangibir özel karakter yukarıda bahsedildiği gibi dönüştürülerek zararsız hale getirilir.

Eğer korunaklı web sitenizde bulunan sciptler cross-site scripting özelliği içeriyorsa fakat siteniz doğru çalışması için bu scritp’lere bağımlı değilse güvenle bloklamayı devre dışı bırakabilir ve transformation’ı aktif edebilirsiniz. Bu konfigürasyon potansiyel cross-site

scripting saldırlarını durdururken meşru web trafiğinin bloklanmamasını garanti eder

Check comlete URLs for cross-site-script: Eğer bütün URL’in kontrolü aktifse application firewall HTML cross-site scripting saldırları için URL’in sadece sorgu kısmını kontrol etmek yerine URL’in bütününü kontrol eder.

Check Request headers:Eğer Request header checking aktifse application firewall HTML crosstie scripting saldırıları için sadece URL yerine request header’larına kontrol eder.

Note:Netscaler 10.5 versiyonununda AppFW tekil olarak (<) küçüktür işareti, (>) büyüktür işaretini veya her iki küçüktür ve büyüktür işareti (<>) gördüğünde Cross-site Scripting olarak algılar. Ama Netscaler 11 versiyonunda AppFW sadece küçüktür işaretini (<) ve bunu izleyen büyüktür işaretini (>) gördüğünde Cross-site Scripting olarak algılar

XSS Relaxation

Application Firewall’da belirli form alanı, header veya Cookie’nın cross-site scripting inceleme kontrolüne girmesini engelleyebiliriz. Relaxation kuralları ayarlayarak bunun gibi bir veya daha fazla alanın denetlenmesini tamamen bypass edebiliriz.

Application Firewall ile relaxation kurallar üzerinde ince ayarlar yaparak daha sıkı güvelik uygulayabiliriz. Belirli pattern’lere izin vermek için application firewall’u belki daha esnek ayarlamanız gerekebilir. Ama güvenlik incelemesini bypass etmek için relaxation kuralların tanınması uygulamayı sadırılara karşı savunmasız bırakabilir. Çünkü hedef alan herhangi cross-site scripting saldırı patterni incelemesinden muaf tutulacaktır. Belirli attribute, tag ve pattern’lere izin vererek cross-site scripting relaxation kurallarını ayrıntılı olarak belirleyebiliriz. Geri kalan attribute, tag ve pattern’ler bloklanır. Örneğin varsayılan olarak application firewall güncel 125’den fazla engelleme patern’ine sahiptir. Bilgisayar korsanları bu patern’leri Cross-site script saldırılarında kullanabildiğinden dolayı application firewall onları potansiyel tehdit olarak işaretler. Belirli lokasyonlar için bir veya daha fala paternin güvenli olduğu duüşünülerek relexation kurallarına tanımlanabilir. Potansiyel olarak tehlikeli XSS patern’lerinin kalanları hedef lokasyonlar için hala kontrol edilir ve herhangi bir güvenlik ihlali bulunduğunda koruma tetiklenir.

İzin verilen XSS attribute veya tag’lerinin varsayılan listesini özelleştirebilirsiniz.Varsayılan liste Application Firewall>Signatures>Default Signatures’de bulunmaktadır.Eğer herhangi signature nesnesini appfw profile’ınıza bağlamazsanız Cross-Site Scripting security check işlemi için Default Signature nesnesinde belirtilen varsayılan XSS izin verilenler ve engellenenler listesi kullanılır.

Application Firewall Builtin XSS listesi;

XSS izin verilen Attribute’ler: Abbr, accesskey, align, alt, axis, bgcolor, border, cellpadding, cellspacing, char, charoff, charset v.b.gibi 53 tane varsayılan olarak izin verilen attribute bulunuyor.

XSS izin verilen Tag’ler: Address, basefont, bgsound, big, blockquote, bg, br, caption, center, cite, dd, del v.b gibi 47 tane varsayılan izin verilen attribute bulunuyor

XSS Engellenen Pattern’ler: FSCommand, javascript:, onAbort, onActivate v.b gibi 129 tane engellenen pattern bulunuyor.

Gözönünde bulundurulması gereken noktalar: Value expression isteğe bağlı bir argüman. Field name herhangi bir value

expression’a sahip olmayabilir. Bir field nae birden fazla value expression’a bağlanabilir. Value expression bir value type’ine atanması gerekir. XSS value type’lar 1) Tag,

2) Attribute veya 3) Pattern olabilir.

Form filed ve action URL büyük küçük harf duyarlılığı yoktur.

HTML Cross-Site Scripting Relaxation Kural Tanımlama

Netscaler 11 versiyonunda şimdi daha sıkı kontrolere sahipsiniz. Bu versiyonda relaxation kurallar tanımlamak için Value Type ve Value Expression gibi iseğe bağlı parametreler bulunuyor. Value type alanı boş bırakılabilirsiniz veya Tag, Attribute, Pattern değerlerini seçebilirsiniz. Eğer Value Type alanı boş bırakılırsa bu, belirtilen URL’in konfigure edilen alanı Cross-Site Scripting incelemesinden muaf tutulur. Eğer bir value type seçilirse bir değer ifadesi belirtilmelidir. Bu değer ifadesi bir regex olacağı gibi bir karakter kalıbıda olabilir. Bu alana girilen değer izin verilen ve yasaklanan listed ki bir değerle eşleştiğinde yalnızca relaxation kurallarında ayarlanan bu ifade muaf tutulur.

GUI

1. Security>Application Firewall > Profiles gidip WAF profile’ımız seçip Edit’e tıklayalım. 2. Advanced Settings panosu’ndan Learned Rules’a tıklayalım.

3. Learned Rules’dan HTML Cross-Site Scripting’e çift tıklayalım.

4. Relaxation rule’lara tanımlamak isteğimiz öğrenilen kuralı seçip Edit&Deploy’a tıklayalım.

5. Kuralı gördükten sonra Ok’e tıklarak relaxation rule’lara tanımlayalım. Netscaler 10.5 versiyonunda HTML Cross-Site Scripting korumasında Value Type ve Value Expression alanine bulunmamaktadır.

6. Bu kural learned rule’dan silinecek ve Advaced Setting >Relaxation Rules tabında’da bulunan relaxation rule’larına aşağıda şekilde görüldüğü gibi eklenecektir.

HTML Cross-Site Scripting kontrolünün ayarlanması.

1. Security>Application Firewall > Profiles gidip WAF profile’ımız seçip Edit’e tıklayalım. 2. Advanced Settings panosu’ndan Security Checks’e tıklayalım. 3. Security Check tablosu bütün security check’ler için güncel olarak ayarlanan aksiyon

ayarlarını gösterir. Konfigürasyon için aşağıda ki iki seçenek bulunmaktadır.

a. Eğer HTML Cross-Site Scripting için sadece Block, Log, Stat ve Learn aksiyon’larını enable veya disable etmek istiyorsanız taboda ki check kontrollerini seçebilir veya check’leri temizleyebilirsiniz. Sonrasında OK’e tıklanmalı ve Save and Close’a tıklanarak Securit Check kapatılmaldır.

b. Eğer HTML Cross-Site-Scripting için ek seçenekler ayarlanacaksa aşağıda ki seçenekleri görebilmek için HTML Cross-Site Scripting’e çift tıklanmalıdır:

4. Yukarda ki ayarlardan herhangi birini değiştirdikten sonra değişiklikleri kaydetmek için Ok’e tıklayınız.

Eğer HTML Cross-Site Scripting kotrolü request Header’larda da yapılmak isteniyorsa Advanced Settings panosu’ndan Profile Settings’e tıklanmalı ve Common Settings’de Check Request Headers alanı seçilmelidir.

HTML Cross-Site Scripting loglaması

Log aktif edildiğinde HTML Cross-Site Script security check ihlalleri audit log’da APPFW_XSS olarak loglanır. Application Firewall CEF ve Native log formatının her ikisini desteklerKomut satırını kullanarak aşağı daki şekilde APPFW_XSS loglarına ulaşabilirsiniz.

> Shell

> tail -f /var/log/ns.log | grep APPFW_XSS

CEF log format

Jul 11 00:45:51 <local0.info> 10.217.31.98

CEF:0|Citrix|NetScaler|NS11.0|APPFW|APPFW_XSS|6|src=10.217.253.62

geolocation=Unknown spt=4840 method=GET

request=http://aaron.stratum8.net/FFC/CreditCardMind.html?abc\=%3Cdef%3E msg=Cross-site

script check failed for field abc\="Bad tag: def" cn1=133 cn2=294 cs1=pr_ffc cs2=PPE1

cs3=eUljypvLa0BbabwfGVE52Sewg9U0001 cs4=ALERT cs5=2015 act=not blocked

Native log format

Jul 11 01:00:28 <local0.info> 10.217.31.98 07/11/2015:01:00:28 GMT ns 0-PPE-0 : default

APPFW APPFW_XSS 132 0 : 10.217.253.62 392-PPE0

eUljypvLa0BbabwfGVE52Sewg9U0001 pr_ffc

http://aaron.stratum8.net/FFC/login.php?login_name=%3CBOB%3E&passwd=&drinking_pref=

on

&text_area=&loginButton=ClickToLogin&as_sfid=AAAAAAVFqmYL68IGvkrcn2pzehjfIkm5

E6EZ9FL8YLvIW_41AvAATuKYe9N7uGThSpEAxbb0iBx55jyvqOZNiVK_XwEPstMYvWH

xfUWl62WINwRMrKsEDil-FC4llF Cross-site script special characters seen in fields

<transformed>

Netscaler GUI’yi kullanarak aşağıda ki şekilde loglara ulaşabilirsiniz.

1. Security>Application Firewall’dan Change Engine Settings seçilmelidir.

2. CEF logging seçilmelidir.

3. Security>Application Firewall>Profiles’dan Application Firewall Profile’ımızı seçip Edit butonuna tıklayalım. Security Checks’den HTML Cross-Site-Scripting’i seçip Logs butonuna tıklayalım.

4. Logs butonuna tıklandığında otomatik olarak Filter By>Module’den APPFW, File alanından en yeni ns.log dosyası ve Event Type alanından APPFW_XSS seçilerek Search alanına’da appfw profile’ın adı yazılarak bu profile ile ilgili loglar karşımıza gelecektir.

5. Eğer false positive bloklanmış legal http isteklerini search etmek istiyorsak Search alanına act=blocked yazıp Go butonuna tıklamalıyız. Karşıma blocked’lanan http istekleri çıkacaktır. False-positve olan legal isteğin log’unun sağında olan kutucuğu seçip Action menüsünden Deploy’a tıklayarak relaxation’a tanımlayabiliriz.

Bloklanan false-positive içeriğin deploy (relaxation’a tanımlama) edilebilmasi için log mesaj’ı CEF log formatında olmalıdır. Click to deploy fonksiyonu blocked veya not blocked action’larıyla oluşturulan log mesajları için yapılabilir.Ama transform operation’ı için oluşturulan bir log mesajı için buarada relaxation tanımlanamaz.

HTML Cross-Site Scripting violation İstatistikleri

Stat action’ı enabled olduğunda, HTML Cross-Site Scripting check’in counteru application firewall’un bu security check için aldığı her action için birer artar.İstatistikler rate için ve Traffic,Violation’lar ve Log’lar için toplam sayısı için toplanır. Log counter’unun artış miktarı konfigure edilen ayarlara göre değişir. Örneğin , eğer block action’ı enable ise 3 HTML Cross-Site Scripting violation içeren bir sayfaya yapılan istek stat counter’unu tek arttırır. Çünkü ilk violation tespit edilir edilmez sayfa bloklanmıştır. Bu arada eğer block disabled ise aynı request’i processing etmek istatistik counter’larını ve log’u üçe arttırır. Çünkü herbir violation ayr bir log oluşturur.

HTML Cross-Site Scripting check istatistiklerini command line kullanarak görmek

Command prompt’da aşağıdaki komutu yazalım:

> sh appfw stats

Belirli bir profile için istatistikleri göstermek için aşağıda ki komutu kullan:

> stat appfw profile <profile name>

HTML Cross-Site Scripting check istatistiklerini Netscaler GUI’den görmek

1. System > Security > Application Firewall’ a gidelim. 2. Sağ panoda, Statistics Link’ine tıklayalım.

3. HTML Cross-Site Scripting violation’larıyla iligli istatistikleri ve log’ları görmek için Scroll

bar’ı kullanarak aşağıda doğru inelim. İstatislik tablosu real-time’dır ve 7 saniyede bir güncellenir

Webgoat ile Stored Cross-Site Scripting Testi

1. Sol tarafta ki menüden Cross-Site Scripting (XSS)’ı aç ve Stored XSS Attacks’a tıkla. Bu vulnerability’i için Webgoat bir For this vulnerability, WebGoat saldırganın yararlanabileceği bir text alan girişi kullanıyor ve malicious scripts’i bu bu site üzerinde bu alana yerşeltiriyor.

2. Başıl olarak Win and iPad yazalım JavaScipt XSS atağını simüle etmek için aşağıda ki satırı Mesaj body’isne girelim ve Summit’s tıklayalım <script type="text/javascript">alert ("Script Executed")</script>

3. Mesajınızın bir likle başlıkta yer aldığını göreceksiniz.

Win and iPad linkine tıklayınız. Script’in çalıştırıldığına dair bir uyarı mesajı göreceksiniz. Ok’e tıklayın ve mesajı kapatın

Neyse ki uyarı vermekten başka bir şey yapmadı. Ancak başka script’ler çok arkadaş canlısı olmayabilir.

4. Security>Application Firewall> Profiles’dan application firewall profile’ımızı açalım. Security Checks’e tıklayıp HTML Cross-Site Scripting’ın block’unu enable edelim ve Ok’e tıklayalım.

5. WebGoat’a tekrar gidip 1, 2, ve 3 adımlarını tekrar yapalım. 6. Application Firewall tarafından bloklanacaksınız ve aşağıda ki custom olarak

oluşturduğumuz bloklama sayfasını göreceksiniz.