HTML CROSS-SITE SCRIPTINGCHECK
NETSCALER APPLICATION FIREWALL
August 26, 2016
Barış KEÇECİ
Senior Networks Security Engineer
2.
HTML Cross-Site ScriptingCheck
HTMLCross-SiteScripting(XSS),kullanıcı isteklerinin header ve POST body’lerinin her ikisini olası cross-site
scriptingatakları için kontrol eder ve eğer bir cross-sitescriptbulursasaldırıyı zararsızhalegetirmek için isteği
değiştirir yada bloklar.
Korunan web sitelerinde’ki güvenliği ihlal eden scriptlerin kötüyekullanımını önlemek için,HTML Cross-Site
Scriptingkontrolü same origin kuralınauymayan scripteri bloklar.Sameorigin kuralı script’lerin bulunduğu sunucu
dışında ki sunuculardasunucu içeriğineerişilmesini vedeğiştirmesini önler.Same origin kuralına uymayan herhangi
bir scriptcross-sitescriptolarak adlandırılır vebaşka bir sunucu üzerinde ki içeriğeerişmek veya değiştirmek için bu
script’in pratik kullanımı cross-stitescriptingolarak adlandırılır.
Same originrule
3.
Cross-sitescripting’in birgüvenlik sorunuolmasının sebebi cross -sitescripting’eizin veren bir web
sunucusu’nun bu web sunucusu üzerindebulunmayan ama farklı bir web sunucusu üzerinde bulunan ve
saldırganın sahip olduğu veonun tarafından kontrol edilen bir scripttarafından saldırıyamaruzkalabilmesidir.
Malesef çoğu şirketler same origin kuralını ihlal eden Java scripttabanlı geliştirilmişweb içeriklerinesahiptirler.
Eğer bu gibi sitelerdeHTML Cross-SiteSciptingaktif edilirsebu kontrolün meşru aktiviteleri blok lamaması için
istisnalar tanımlanmalıdır.
Falsepositive’lerden kaçınmak için relaxation rule’lar (muaf kuralları) oluşturabilirsiniz.
Application Firewall koruması’nın öğrenme motoru (learningengine) relaxation rule’ları ayarlamak için
tavsiyeler sağlayabilir.
Citrix uygulama güvenlik duvarı HTML Cross-SiteScirptingkoruması’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 tetiklenir.
Log: Eğer logözelliği etkinleştirilirse,HTML Cross-SiteScriptingkoruması bu korumanın aldığı eylemi
gösteren logmesajları üretir.Eğer block devre dışı bırakıldıysa XSS ihlalinin saptandığı her bir form alanı
veya header için ayrı bir logmesajı oluşturulur.Bu arada istek blok’landığında sadecetek bir mesaj üretilir.
Benzer bir şekilde transformoperasyonu için XSS tag’ları birden fazla alanda dönüştürüldüysebileistek
başına bir logmesajı ü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.
4.
Stats: Eğer aktifedilirsestatözelliği ihlaller velog’lar hakkında istatistikleri toplar.Statcounter’larında ki
beklenmeyen bir dalgalanma uygulamanın saldırı altında olduğunu işaretedebilir. 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-SiteSciptingkural 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ı learningtavsiyeleri sağlar.Performansı tehlikeyeatmadan en uygun yararın
alınması kısa süreliğinelearn seçeneğini aktif ederek kuralların temsili bir örneğini eldeedinilmesiyle
sağlanabilir.Sonra bu kurallar deploy edilerek relaxation rule’lara tanımlanmalı velearningkapatı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 (<) e dönüştürülür.
Büyüktür işareti (>) HTML karakterlerinden (>) 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 checkingve transformation her ikisi aktif
edilirserequestheaderlar’da bulunan herhangi bir özel karakter yukarıda bahsedildiği gibi dönüştürülerek
zararsızhalegetirilir.Eğer korunaklı web sitenizdebulunan sciptler cross-sitescriptingözelliği içeriyorsafakat
sitenizdoğru çalışması için bu scritp’lerebağımlı değilsegüvenle block lamayı devre dışı bırakabilir ve
transformation’ı aktif edebilirsiniz.Bu konfigürasyon potansiyel cross-sitescriptingsaldı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ü aktifseapplication 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 checkingaktifseapplication firewall HTML crosstiescripting
saldırıları için sadeceURL yerine request header’larını 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-siteScriptingolarak algılar.Ama Netscaler 11 versiyonunda
AppFW sadeceküçüktür işaretini (<) ve bunu izleyen büyüktür işaretini (>) gördüğünde Cross -siteScriptingolarak
algılar.
5.
XSS Relaxation
Application Firewall’dabelirli formalanı,header veya Cookie’nın cross-sitescriptingincelemekontrolüne
girmesini engelleyebiliriz.Relaxation kuralları ayarlayarak bunun gibi bir veya daha fazla alanın denetlenmesini
tamamen bypass edebiliriz.
Application Firewall ilerelaxation kurallar üzerindeinceayarlar yaparak daha sıkı güvelik uygulayabiliriz.Belirli
pattenrn lere izin vermek için application firewall’u belki daha esnek ayarlamanızgerekebilir.Ama güvenlik
incelemesini bypass etmek için relaxation kuralların tanınması uygulamayı saldırılarakarşı savunmasızbırakabilir.
Çünkü hedef alan herhangi cross-sitescriptingsaldırı patterni incelemesinden muaf tutulacaktır.Belirli attribute,
tag ve pattern’lere izin vererek cross-sitescriptingrelaxation 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-sitescriptsaldırılarındakullanabildiğinden dolayı
application firewall onları potansiyel tehditolarak işaretler.Belirli lokasyonlar için bir veya daha falapaternin
güvenli olduğu düşünülerek relexation kurallarınatanımlanabilir.Potansiyel olarak tehl ikeli XSS patern’lerinin
kalanları hedef lokasyonlariçin halakontrol edilir veherhangi bir güvenlik ihlali bulunduğunda koruma tetiklenir.
İzin verilen XSS attribute veya tag’lerinin varsayılan listesini özelleştirebilirsiniz.Varsayılan listeApplication
Firewall>Signatures>DefaultSignatures’debulunmaktadır. Eğer herhangi signaturenesnesini appfwprofile’ınıza
bağlamazsanızCross-SiteScriptingsecurity check işlemi için DefaultSignaturenesnesindebelirtilen 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,charsetv.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 attributebulunuyor.
XSS Engellenen Pattern’ler: FSCommand, javascript:, onAbort, onActivate v.b gibi 129 tane engellenen
pattern bulunuyor.
6.
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ı kontrolleresahipsiniz.Bu versiyonda relaxation kurallartanımlamak için
Value Type ve ValueExpression gibi isteğebağlı parametreler bulunuyor.Value type alanı boşbırakılabilirsiniz
veya Tag, Attribute, Pattern değerlerini seçebilirsiniz.Eğer ValueType alanı boşbırakılırsabu,belirtilen URL’in
config edilen alanı Cross-SiteScriptingincelemesinden muaf tutulur. Eğer bir valuetype seçilirsebir 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ğerleeşleştiğinde yalnızca relaxation kurallarındaayarlanan bu ifademuaf
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.
5. Kuralı gördüktensonra 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 şekildegörüldüğü gibi eklenecektir.
9.
HTML Cross-Site Scriptingkontrolü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-SiteScriptingiçin sadeceBlock,Log, Stat ve Learn aksiyon’larını enableveya disableetmek
istiyorsanıztablodaki check kontrollerini seçebilir veya check’leri temizleyebilirsiniz.Sonrasında OK’e
tıklanmalı ve Save and Close’a tıklanarak SecuritCheck kapatılmaldır.
10.
Eğer HTML Cross-Site-Scriptingiçinek seçenekler ayarlanacaksa aşağıdaki seçenekleri görebilmek için HTML Cross -
Site Scripting’e çifttı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-SiteScriptingkotrolü request Header’larda da yapmak isteniyorsanızAdvanced Settings
panosu’ndan ProfileSettings’e tıklanmalı ve Common Settings’de Check Request Headers alanı seçilmelidir.
11.
HTML Cross-Site Scriptinglog laması
Log aktif edildiğindeHTML Cross-SiteScriptsecurity check ihlalleri auditlog’da APPFW_XSS olarak log lanır.
Application Firewall CEF ve Native logformatı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 GMTns 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&pass wd=&drinking_pref= on
&text_area=&loginButton=ClickToLogin&as_sfid=AAAAAAVFqmYL68IGvkrcn2pzehjfIkm5
E6EZ9FL8YLvIW_41AvAATuKYe9N7uGThSpEAxbb0iBx55jyvqOZNiVK_XwEPstMYvWH xfUWl62WINwRMrKsEDil -
FC4llF Cross-site script special characters seen in fields
<transformed>
4. Logs butonunatıklandığında otomatik olarak Filter By>Module’den APPFW, Filealanı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 log lar karşımıza gelecektir.
14.
5. Eğer falsepositivebloklanmışlegalhttp isteklerini search etmek istiyorsak Search alanınaact=blocked yazıp Go
butonuna tıklamalıyız.Karşıma blocked’lanan http istekleri çıkacaktır.False-positveolan 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-positiveiçeriğin deploy (relaxation’a tanımlama) edilebilmasi için logmesaj’ı CEF log
formatında olmalıdır.Click to deploy fonksiyonu blocked veya not blocked action’larıylaoluşturulan log
mesajları için yapılabilir.Ama transformoperation’ı için oluşturulan birlogmesajı için buarada relaxation
tanımlanamaz.
HTML Cross-Site Scripting violation İstatistikleri
Stat action’ı enabled olduğunda,HTML Cross-SiteScriptingcheck’in counter application firewall’un bu security
check için aldığı her action için birer artar. İstatistikler rateiçin veTraffic, Violation’lar veLog’lar için toplamsayısı
için toplanır.Log counter’unun artışmiktarı config edilen ayarlaragöredeğişir.Örneğin , eğer block action’ı
enable ise3 HTML Cross-SiteScriptingviolation içeren bir sayfayayapılan istek statcounter’unu tek arttırır.
Nedeni iseilk violation tespitedilir edilmezsayfa block lanmıştır.Bu arada eğer block disabled iseaynı request’i
processingetmek istatistik counter’larını velog’u üçe arttırır. Çünkü her bir violation ayrı bir logoluşturur.
HTML Cross-SiteScriptingcheck 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>
15.
HTML Cross-Site Scriptingcheck 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-SiteScriptingviolation’larıylailigli istatistikleri velog’ları görmek için Scroll bar’ı kullanarak
aşağıda doğru inelim. İstatistik tablosu real-time’dır.ve 7 saniyedebir güncellenir
16.
Webgoat ile StoredCross-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.
17.
2. Başlangıç olarakWin 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 linklebaşlıkta yer aldığını göreceksiniz.
Win and iPad linkinetıklayınız.Script’in çalıştırıldığınadair biruyarı mesajı göreceksiniz.Ok’e
tıklayın ve mesajı kapatın.
18.
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.