Citrix

Citrix Netscaler Web Application Firewall

Bu makalemde sizlere Citrix Netscaler ürünün application firewall kısmını detaylı olarak anlatacağım.  Daha önce HTTP Load Balancing kısmı forumda yayınlandığı için Load Balancing kısmından çok bahsetmeyip direk application firewall kısmına geçeceğim. İlk önce W12R2 sunucuya IIS kurup uygulamayı sunucuya kurarak başlıyorum.Sunucu üzerinde uygulama çalıştıktan sonra sunucuyu netscaler cihazı üzerinden hizmet verecek şekilde konfigüre etmeye başlıyoruz.

 

clip_image002

İlk o larak Traffic Management-Load Balancing-Servers menüsünde Add’e tıklayarak IIS kurduğumuz sunucuyu Netsclaer cihazına server olarak ekliyoruz.

clip_image004

Sunucu ismi ve ipsi girdikten sonra Create butonuna tıklayarak sunucuyu oluşturuyoruz. IIS kurduğumuz sunucunun ip’si 10.10.172.33

clip_image006

Oluşturmuş olduğumuz sunucunun hangi portundan hizmet alıyorsak, o portu belirtmek için Traffic Management-Load Balancing-Services menüsünden service oluşturuyoruz.

 

clip_image008

 

 

 

Sunucumuz 80 portundan hizmet verdiği için service portunu 80 seçiyoruz.

clip_image010

Şimdi ise dış dünyaya gerçek sunucu yerine oluşturacağımız sanal sunucu ayarlarını yapıyoruz. Traffic Management-Load Balancing-Virtual Servers menüsünden Add buyonunu tıklayıp virtual server oluşturuyoruz.

clip_image012

 

 

 

Virtual Server’ın sunucu ile aynı vlan’da olması gerekmiyor. Sadece netscaler cihazının iki vlanda da snip’sinin olması gerekmektedir. Bu ipler birbirlerini oldukları vlandaki snipler üzerinden gideceği için trafik netsclaer cihazı üzerinden çıkmamaktadır. Dış dünyaya 10.10.171.102 ipsinden ve 80 portundan hizmet verecek şekilde konfigürasyonumuzu yaptık. Burada detay bir husus sunucu ve ve virtual server aynı porttan hizmet vermek zorunda değildir. Örneğin virtual server 80 portundan istekleri karşılayıp arkada sunucunun 8080 portuna istekleri iletebilir. Veya günlük hayatta daha çok kullandığımız Netscaler cihazının en güzel özelliklerinden biri olan SslOffloading ile Client ile Virtual server arası trafik ssl ile şifrelenip ssl’i Citrix üzerinde sonlandırıp sunucuya 80 portundan iletebilirsiniz. Bu sayede SSL decrypte ve encrypte için sunucu CPU’sunu yormamış oluruz.  

clip_image013

 

 

 

 

 

 

 

 

 

Virtual Server oluşmuş durumda, sıra geldi oluşturmuş olduğumuz virtual server ‘a yine oluşturmuş olduğumuz service’yi bind etmeye. No Load Balancing Virtual Service Binding’e tıklayıp oluşturmuş olduğumuz servisi ekliyoruz.

clip_image015

Oluşturmuş olduğumuz servisi seçip Bind butonuna tıklayıp atama işlemini yapıyoruz.

clip_image017

Gördüğünüz üzere Virtual Server çalışır hale gelmiş durumda.

clip_image019

 

 

 

 

 

 

 

 

Kontrolümüzü yapalım.

clip_image021

Kontrolümüzü yaptıktan sonra Load Balance Method ve Persistance özelliğinden bahsetmek istiyorum .

Method :  Load Balance’ın hangi yöntemle yapılacağını seçebiliriz. Netscaler üzerinde birçok yöntem var fakat ben en çok kullanılan üç tanesinden bahsedeceğim. clip_image023

Roundrobin : Gelen istekleri bir one bir ona şeklinde dağıtır.

Leastresponsetime : Herbir sunucuyu ping atar ve en kısa sürede cevap verene gönderir trafiği.

Leastconnection : Aktif connection sayısı en za olan sunucuya gönderir.

 

 

Persistance: Kullanıcıyı hep hizmet aldığı sunucuya gönderir. Netsclaer cihazı persistance kontrolü için isteği yapan kullanıcıya bir persistance cookie iletir ve ilettiği cookienin sessionı bitene kadar hep aynı sunucudan hizmet almasını sağlar.

clip_image025

Persistance özelliği eklenmeden önce sadece PHPSESSID cookiesi var.

clip_image027

Persistance özelliği eklenince kullanıcıya birde persistance cookisi ekliyor.

clip_image029

Eklemiş olduğu cookie herbir service için farklı bir değerdir.

clip_image031

 

 

 

Kısaca Load Balancing kısmını anlattıktan sonra Application Firewall kısmına geçiyoruz. İlk olarak Security-Application Firewall-Profile menülerinden profile oluşturuyoruz.

clip_image033

Profile ismi girip Web Application tipini seçtikten sonra Ok butonuna basıp profile oluşturuyoruz.

clip_image035,

İkinci olarak Policy oluşturup daha önce oluşturduğumuz profile’ımızı bu policy’e bind ediyoruz.

clip_image037

Burada Policy için bir isim girip oluşturduğumuz profile’ı seçiyoruz. Expression kısmına TRUE değerini yazıyoruz.

clip_image039

Sıra geldi oluşturduğumuz Policy’i Virtual Server ‘a atama işine. Traffic Management-Load Balancer menüsünden oluşturduğumuz olduğumuz Virtual Server’a edit deyip içine girip Policies kısmında + işaretine basıp oluşturduğumuz policy’i bind ediyoruz.

clip_image041

 

Burada oluşturduğumuz policy’nin bir application firewall policy’si olduğunu belirtiyoruz.

clip_image043

Burada oluşturmuş olduğumuz policy’i bind ediyoruz.

clip_image045

Artık application firewall özelliğini aktif ettik.  Şimdi yine Virtual Server üzerinden 1 App Firewall Policy üzerine tıklayıp policy’mizi düzenleyebiliriz. 

clip_image047

 

clip_image049

 

Bu şekilde policymizi düzenliyoruz. Security checklerde Block işaretli ise bu kurallara uymayan istekler bloklanır. 

clip_image051

Burada app firewall’a takılan istekleri hata.php sayfasına yönlendiriyoruz.

clip_image053

Start URL özelliğimiz aktif olduğu için direk hata sayfasına yönleniyor

clip_image055

. Aşağıdaki isteklere izin verdikten sorna sayfamız açılıyor.

clip_image057

clip_image059

Şimdi sizlere tüm menülerin ne işe yaradıklarını anlatacağım. Sırayla başlıyorum.

 

 

START URL :

clip_image061

1-     Enforce URL Closure : Start URL kısmında deploy ettiğimiz yani izin verdiğimiz bir sayfadan diğer bir sayfaya hyperlink var ise o sayfa start URL’de deploy edilmese bile izin verir. Aşağıdaki örnek sadece kisi-liste sayfası start url’de ekli olmasına rağmen Enforce URL Closure işaretlendiği için kisi_ara sayfasınada erişebilinmektedir.

clip_image063

 

2-     Sessionless URL Closure : Bu özellik sayesinde Netscaler cihazı URL’lerin sonuna uniq bir id ekleyerek kullancı aktivitelerini toplamaya yardımcı olur. Özelliğin çalışabilmesi için Enforce URL Closure tikinin işaretli olması gerekmektedir. As_url_id değeri netscaler cihazının eklediği id’dir.

 

clip_image065

3-Enable Validate Header : Bu özellik sayesinde başka bir uygulama üzerinde sitenin çalışmasını engeller.

-Off: Herhangi bir header kontrolü yapmaz

-If Present : Eğer header bilgisi var ise adresin doğruluğunu kontrol eder doğru ise trafik akışına izin verir, eğer header içinde adres bilgisi yok ise yine trafiğe izin ver, eğer header bilgisi start url içinde ekli değil ise izin vermez.

-Always Except Start URLs : Headerde gelen adres bilgisinin start urlde ekli olması gerekir, eğer yanlış bir adresten geliyor ise ve header içerisinde adres bilgisi yok ise bloklar. 

-Always Except First Request : Start URL’de ekli olmayan ve header bilgisinde adres olmayan ilk isteklere cevap verir sonraki istekleri bloklar.

 

DENY URL : Bu özellik bilinen programlama dillerinde bilinen atakları engellemek için bazı url’lere ve son kullanıcının erişmemesi gereken yerleri engellemek içindir. Aşağıdaki kriterlere uyan linkler bloklanır.

clip_image067

-Cookie Consinstency : Bu özellik sayesinde kullanıcının gönderdiği cookieler engellenir, sadece legal olan cookilere izin verilir. Bloklanmasının sebebi server’a büyük boyutlarda cookie gönderip server’i hizmet dışı bırakmak isteyen kötü niyetli kullanıcıları engellemektir.  Transform kısmında izin verilen cookilerin transformu yapılır.

-Encrypt Server Cookies : Sadece citrix netscaler cihazının verdiği cookileri encrypt eder. Örneğin persistance cookie ve netscaler session cookie.

clip_image069

-None: Seçiliyken hiçbir şekilde encrypt ve decrypt işlemi yapılmaz.

-Decrypt Only : Sadece encrypt edilmiş cookie varsa decrypt eder.

-Encrypt Session Only : Sadece netscaler session cookisine decrypt ve encrypt eder.

-Encrypt All : Netsclaer cihazının session ve persistance cookilerini encrypt ve decrypt eder.

 

Proxy Server Cookies : Netscaler cihazının proxy olduğu nda cookie encrypt işlemi yapar. Örneğin 2 adet web sunucu var ve web sunucular netscaler üzerinden load balance ediliyor. Bu durumda web sunucu cookie bilgisini ilk netscaler cihazına iletir, netscaler cihazıda son kullanıcıya iletir. Web sunucunun ilettiği cookie burada encrypt edilir.

clip_image071

-None: Sunucunun verdiği cookie encrypt edillmez.

-Session Only: Sunucudan alınan sadece session cookie son kullanıcıya ulaştırılırken encrypt edilir ve son kullanıcıdan gelen cookie değeri arkadaki web sunucuya decrypt edilip clear text gönderilir. 

 

-Flags To Add  in Cookies : Bu özellik özellik sayesinde cookie değerlerinin sadece yeni nesil web tarayıcılara verilmesi sağlanmıştır. Kötü niyetli kişilerin scriptlerle cookie alması engellenmiştir ve browser desteği var ise network dinleme olasılığna karşı netscaler ve client arasında cookiler ssl üzerinden  gönderilir.

-None : Defaultdur. Herhangibir flag eklenmez

-HttpOnly : Sadece browserlardan gelen kullanıcıya cookiler iletilir.

-Secure : Cookiler SSL üzerinden güvenli bir şekilde gönderilir.

-All : Hem HttpOnly hemde secure flagi eklenir bu sayede cookiler ssl üzerinden gönderilir ve sadece browserdan gelen isteklere cevap verilir. 

Burada dikkat edeceğimiz husus htttp olarak yani ssl sertifikası kullanılmadan oluşturulan virtual serverlar için secure tagı eklenmemelidir. Eklendiği takdirde ssl connection kurulmadığı için cookie son kullanıcıya iletilemez.

 

clip_image073

Görüldüğü üzere persistance cookie Encrypte edilmiş şekilde.

clip_image075

 

-Buffer Overflow : Bu özellik sayesinde boyutu büyük header, cookie ve URL göndererek web sunucuyu devre dışı bırakma ataklarına karşı koruma sağlanmıştır.

-Maximum URL  Length : URL maximum karakter sayısı

-Maximum Cookie Length : Cookie maximum karakter sayısı

-Maximum Header Length : Header maximum karakter sayısı

 

clip_image077

 

-Credit Card : Bu sayede isteklere cevap verirken sunucudan gelen cevap paketindeki kredi kartı bilgilerini siler veya ilk 12 hanesini saklayıp son 4 hanesini döner örneğin; xxxx-xxxx-xxxx-1234 gibi.

X-Out : Bu özellik sayesinde responsede yer alan kredi kartı bilgilerinin ilk 12 hanesi yerine x konularak son 4 hanesi açık şekilde gönderilir.

Maximum credit cards allowed per page : Responseda 1 sayfa içerinde ne kadar maskelenmeyen (xxxx-xxxx-xxxx-1234) izin verilen kredi kartı sayısını belirler. Örneğin 3 değeri girilirse responseda 1 sayfada en fazla maskelenmeyen 3 kredi kartı değerine izin verilir diğerleri bloklanır.

Protected Credit Card : Hangi kart bilgilerinin silinip veya maskeleneceğini seçmeye yarar. Kart tipini hepsinin farklı algoritmasından çıkarıyıor.

clip_image078

-Content Type :  Bu özellik sayesinde sadece belirlediğimiz türlerin üzerinden geçmesine izin verir . Hem son kullanıcıdan gelen isteği hem de web serverdan gelen isteği bloklar. Fakat typelar arayüzden girilmez aşağıdaki örnekteki gibi ssh üzerinden komutla girilir. Gerçek hayatta çok kullanılmayan bir özelliktir.

 

clip_image080

 

 

Content-type  ekleme :

set appfw profile profile1 -requestContentType “text/html”

save ns config

 

Content-type  silme :
 
unset appfw profile profile1 -requestContentType "text/html" 
save ns config

 

Form Field Consistency : Bu özellik sayesinde kullanıcı tarafından gönderilen web formlarların yani input alanlarının özelliklerinin değiştirilip değiştirilmediği kontrol edilir. Eğer değiştirilmişse bloklanır. Örneğin adres idsinde bir input değeri user’a gönderilmediyse adres idsinde olan bir input değerini göndermek isteyen user’ın isteğini web server’a uğramadan bloklar. Başka bir örnek bir input alanı read only veya hidden ise değerin değiştirilip değiştirilmediğini kontrol eder. Başka bir örnek input alanı radio button veya list box ise yani sadece bir değer seçilip gönderebiliyor ise gönderilen datanın 1 tane olup olmadığını kontrol eder. Fakat bu işi sadece HTML fieldlar için yapabilir xml requestlerde geçerli değildir. Web servisler için kullanılamaz. Web serverdan gelen kullanıcıya gönderilen tüm fieldları session bazında tutarak gelen trafikte ek bir field eklenip eklenmediğini kontrol eder.

-Sessionless Field Consistency :  Session bazlı fieldlere kontrol etmek veya kontrol etmeden çıkarmak için ayrılmıştır.

OFF: Session bazlı fieldleri kontrol etmez.

ON : Bütün hepsini kontrol eder.

PostOnly : Sadece HTTP Post metoduyla post edilen input değerlerini kontrol eder.

 

clip_image082

 

-Field Formats Check : Field içerik türlerine göre maximum ve minumum değerler belirlenir. Listede yok ise ssh üzerinden değişik formatlar eklenebilir.

clip_image084 

-CSRF Form Tagging :  User a her field için unique ve önceden bilinmeyen bir formid değeri gönderilir. Bu değer ile userden gelen id kontrol edilip doğru ise trafiğin geçmesi sağlanır. Bu zararlı kişilerin kendi formlarını oluştururak sizin değerleriniz dışında yüksek miktarda veri post etmesini engeller. Ek olarak başka sayfalardan login işleme vb işlemler gerçekleştirilmesini engeller. 

-Kullanmak için Netscaler integrated cache özelliğinin kapalı olması gerekir.

-Start url referrer header aktif olması gerekir.

HTML Cross Site Scripting : Bu özellik sayesinde cross site scripting ataklarından korur. Kısaca cross site scripting atağı <script> </script>tagları arasında sitedeki inputlardan ve url’e eklenerek zararlı kodu içeriye gönderir veya almak istediği bilgiye ulaşır.

clip_image086

-Transform sross-site scripts:  Bunu işaretlediğimizde < işaretini &lt; ve > işaretini &gt; şeklinde değiştirip web server a kodun çalışmayacak şekilde gitmesini sağlıyor. Bunu işaretlersek güvenle block kısmını kaldırabiliriz bu şekilde istek web server a gider ama değişmiş olarak gider ve zarar vermez.

-Check complete URLs for cross.site scripting :   Bunu işaretlersek URL üzerinde de cross-site scripting kontrolü yapıyor. Örneğin (?id=<script>zararlı_script</script>) bu tür zararlı işlemlerde engellenmiş oluyor.

-HTML SQL Injection :  Bu özellik sayesinde sql injection açıklığı korunmuş olur. SQL Injection sql kodlarını input alanında vs çalıştırarak kullanıcı bilgileri vs gibi verileri izinsiz alabilirler. SQL injection netscaler tarafında 3 alanda kontrol edilir cookie, post body ve header.

clip_image088

-Transform SQL Special Characters :  Özel SQL karakterlerini değiştirir. Örneğin ‘ bu işareti “ bu şekilde iletir. \ işaretini web server’a \\ bu şekilde iletir. ; işaretini droplar. Diğer sembollere dokunmaz fakat bu 3 işaret olmadan sql sorgusu hiçbir işe yaramaz. Check for SQL Wildcard Characters ile select querylerdeki like dislike gibi komutlar çalışmaz.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu