Download - Netscaler WAF XSS

Transcript
Page 1: Netscaler WAF XSS

HTML CROSS-SITE SCRIPTING CHECK

NETSCALER APPLICATION FIREWALL

August 26, 2016Barış KEÇECİ

Senior Networks Security Engineer

Page 2: Netscaler WAF XSS

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 ve eğer bir cross-site script bulursa saldırıyı zararsız hale getirmek için 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şmek veya değiştirmek için bu script’in pratik kullanımı cross-stite scripting olarak adlandırılır.

Same origin rule

Page 3: Netscaler WAF XSS

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 tarafından kontrol edilen bir script tarafından saldırıya maruz kalabilmesidir.

Malesef çoğu şirketler same origin kuralını ihlal eden Java script tabanlı geliştirilmiş web içeriklerine sahiptirler. Eğer bu gibi sitelerde HTML Cross-Site Scipting aktif edilirse bu kontrolün meşru aktiviteleri blok lamaması 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 kieylem seçeneklerini sunar;

Block: Block etkinleştirilirse, eğer XSS tag’leri istemci isteğinde bulunursa block eylemi tetiklenir. 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ığı her bir 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 block’lanıp block lanmadığını belirlemek için log’lar incelenebilir. Log sayılarında ki dramatik yükselişler bir saldırıyı başlatma teşebbüslerini işaret edebilir.

Page 4: Netscaler WAF XSS

Stats: Eğer aktif edilirse stat özelliği ihlaller ve log’lar 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 block lanıyorsa yeni relaxation rule’ları eklenmeli veya var olan 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şiklikleri yapar:

Küçüktür işareti (<) HTML karakterlerinden (&lt;) e dönüştürülür.

Büyüktür işareti (>) HTML karakterlerinden (&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 aktif edilirse request headerlar’da bulunan herhangi bir ö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 block lamayı devre dışı bırakabilir ve transformation’ı aktif edebilirsiniz. Bu konfigürasyon potansiyel cross-site scripting saldırılarını durdururken meşru web trafiğinin block lanmaması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ırıları 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ını kontroleder.

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.

Page 5: Netscaler WAF XSS

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 pattenrn 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ı saldı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 düşü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.

Page 6: Netscaler WAF XSS

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 name 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ı kontrollere sahipsiniz. Bu versiyonda relaxation kurallar tanımlamak için Value Type ve Value Expression gibi isteğ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 config 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ında olabilir. Bu alana girilen değer izin verilen ve yasaklanan listesindeki 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.

Page 7: Netscaler WAF XSS

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.

Page 8: Netscaler WAF XSS

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 alanına bulunmamaktadır.

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

Page 9: Netscaler WAF XSS

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

1. Security>Application Firewall > Profiles gidip WAF profilinizi 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 tablodaki 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.

Page 10: Netscaler WAF XSS

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 yapmak isteniyorsanız Advanced Settings panosu’ndan Profile Settings’e tıklanmalı ve Common Settings’de Check Request Headers alanı seçilmelidir.

Page 11: Netscaler WAF XSS

HTML Cross-Site Scripting log laması

Log aktif edildiğinde HTML Cross-Site Script security check ihlalleri audit log’da APPFW_XSS olarak log lanır. Application Firewall CEF ve Native log formatının her ikisini destekler. Komut satırını kullanarak aşağı daki şekilde APPFW_XSS log ları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>

Page 12: Netscaler WAF XSS

Netscaler GUI’yi kullanarak aşağıda ki şekilde log lara 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.

Page 13: Netscaler WAF XSS

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çilerekSearch alanına’da appfw profile’ın adı yazılarak bu profile ile ilgili log lar karşımıza gelecektir.

Page 14: Netscaler WAF XSS

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 counter 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ı config 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.Nedeni ise ilk violation tespit edilir edilmez sayfa block lanmış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ü her bir violation ayrı bir log oluşturur.

HTML Cross-Site Scripting check istatistiklerini CLI 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>

Page 15: Netscaler WAF XSS

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. İstatistik tablosu real-time’dır. ve 7 saniyede bir güncellenir

Page 16: Netscaler WAF XSS

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 yerleştiriyor.

Page 17: Netscaler WAF XSS

2. Başlangıç 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 linkle 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.

Page 18: Netscaler WAF XSS

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 block lanacaksınız ve aşağıda ki custom olarak oluşturduğumuz block lama

sayfasını göreceksiniz.

Page 19: Netscaler WAF XSS
Page 20: Netscaler WAF XSS