Sunucu güvenliği: XSS – Cross Site Scripting

Dinamik websitelerindeki güvenlik aciklarindandir. Öğrendiğim kadarıyla GET üzerinden sunucuya gönderilen verinin tamamlayici kodlarla değiştirilerek scriptin çıktılarının manipüle edilmesine dayanıyor. Bu tür açıkları olan siteleri saldırganlar arama motorları üzerinden arayarak bulabiliyor. Bunun için kullandıkları tespit edici arama kelimelerine saldırgan jargonunda dork deniyor.

Örneğin; inurl:sayfa.php?id=1 gibi. Bunun yanına gov vb. domain uzantılarını yazarak belirli türdeki siteleri hedefleyebiliyorlar. Bulunan her sitede açık var diyemeyiz. Buldukları sitelerde XSS açığı olup olmadığını XSS denemesi yaparak anlayabiliyorlar.

Örneğin deneme şekli olarak URL adresine şunun gibi bir şey yazıyorlar;

Ekrana uyarı penceresi gelirse ha evet XSS açığı varmış diyorlar ve farklı XSS scriptleri ile sitenin scriptini farklı şekilde tamamlayarak sitenin sunucu tarafındaki kod ve verilerine erisiyorlar.

XSS Saldırı Türleri

Stored XSS

Bu saldırı turu XSS ile sunucuya gönderilen kodun tüm kullanıcıları etkilemesi söz konusu. Yani kullanıcıların şifreleri dahil bilgileri çalınabilir.  Ornegin kullanıcı giriş sayfasında çalışan bir veritabanı sorgusu mevcutsa, bu sorgunun çıktısı ile kullanıcı giriş formu değiştirilip, kullanıcının giriş yapmak için yazdığı bilgiler farklı sunuculara gönderilerek depolanabilir. Kullanıcılar her sitede benzer ya da aynı şifreleri kullandığı için epostalari ve diğer sosyal medya hesapları da tehlikeye girmiş olur. Sadece veritabanına erişim sağlandığı durumlarda kullanılan saldırı şekli bu olmakta.

Reflected XSS

Bu saldırı veritabaninda duran kodlar yerine URL içerisinden gönderilen GET değişkenleri yapılabiliyor. Saldırı turu ziyaretçilere direkt olarak yansımıyor. Fakat üye olduğu bilinen bir epostaya gönderilen örneğin bir şifre hatırlatma URL adresi ile yine kullanıcının bilgileri tehlikeye atılmış olur. Bu tur saldırıda veritabanı veya kodlara saldırgan erisememis olabilir. Fakat bu acemi internet kullanıcıları için tehlikeyi bertaraf etmiş olmuyor.

DOM XSS

Bu noktada sitenin kodlarına da artık erişim sağlanmış oluyor. Sitenin içerisine javascript kodları ile normalde olmaması gereken, kullanıcıya gösterilmeyen bir takım kodlar eklenerek kullanıcı verileri calinabiliyor.

XSS ataklarından korunmak

GET ile gönderilen page veya id gibi değerlerin HTML, JS vb. kodlardan temizlenmesi gerekiyor. Bunun en ilkel yollarından biri PHP için htmlspecialchars kullanarak kodlarin htmlden dönüştürülmesi. Bu konu iyi bir framework ile aşılabilir. Örneğin kullandığım Symfony framework HTTPComponent ile bu tur şeyleri önlüyor. Ayrıca route tanımlarına değişkenlerin içerebileceği karakterler sinirlanarak sadece sayı veya metin olabilir gibi regex ifadeleri de eklenebiliyor. Fakat Symfony gibi bir framework kullanmak öğrenmesi ciddi zaman alan ve uygulama yapması da o kadar çabuk olmayan bir yapı ve büyük siteler için kullanılır. Bu yüzden apache düzeyindeki tedbirler hem sistemciler hem geliştiriciler için daha basit ve kapsam olarak da geniş diyebilirim.

Apache için XSS tedbirleri

Fakat bu oldukça ilkel şekilde yazılmış bir websitesi için alınabilecek bir tedbir. Eğer sunucunuz linux ise veya .htaccess dosyaları web alaninizda çalışacak şekilde ayarlanmissa apache sunucusu için farklı ve genel bir tedbir daha var. Bunu yapmak için sunucuda apache mod_headers aktif olmalı.

XSS ataklarını engellerken bir ayar daha var. Bu da x-frame ayarı. Bu aşağıdaki satır sitenizde açılabilecek frame ve iframelerin sadece yine sizin sitenizden olmasını gerektiriyor. Bu sayede farklı saldırgan adresleri kullanicilarinizin verilerine talip olamıyor. SAMEORIGIN degerini DENY yaparsanız kendi sitenizden bile frame açılmıyor.

Özellikle izin vermek istediniz frame URL adresleri olması durumunda ALLOW FROM uri kullanabilirsiniz.

Bir başka nokta ise XSS atağının upload edilmiş bir dosyanın içeriğinin değiştirilerek yapılabilir olması. Yani bir resim dosyası upload etmesini beklediğiniz kullanıcı resim dosyasının sadece header bilgilerini kullanıp devamında sunucunuzda çalıştırmak istediği kodları eklemiş olabiliir. Bunu için X-Content-Type koruması kullanılıyor. Buradaki mantık siteye JPG uzantılı bir dosya gönderilmesine rağmen aslında html ve js içerikli bir dosyanın gönderilmiş olması. Mime-Type kontrolü yapmayan bir upload işleminden bu geçebilir. Kullanıcı browser ise dosya açıldığında uzantısı JPG olmasına rağmen mime-type html/text olduğu için bu resim dosyasını siteymis gibi calistirabilir. Bu veritabanı yerine dosya olarak depolanmış bir XSS açığı demek oluyor. Bunu için .htaccess dosyanizda ya da virtualhost taniminizda aşağıdaki satırı kullanmanız gerekiyor. Bu sayede dosya tipine browser karar vermiyor, sunucunuzdaki dosya uzantısı geçerli oluyor.

Diğer bir XSS açığı konusu httpOnly ile cookie koruması sağlayarak PHP ile oluşturulmuş bir cookieye JS ile erisilip kullanıcının bilgilerinin başka yerlere gönderilmesinin önüne geçmektir. PHP SessionId gibi bir cookie değeri browser içine saldırgan tarafından koyularak açılmış oturum anahtarı kullanılıp oturuma ortak olunabilir. Bunu için bu satırı .htaccess veya apache virtualhost için kullanıyoruz.

Bir başka XSS tedbiri  TraceEnable değerini kapatıp off yapmaktir.

Bunun dışında CSP ile daha detaylı CSS ve JS çağrıları yaparak farklı sitelerden yapılacak css ve js dosyalarının sitenize çalışmasını önleyebilirsiniz. Bu adreste CSP hakkında cidden detaylı bir kaynak var. Kısaca ilgili satır şöyle oluyor;

Genel olarak toparlarsak .htaccess dosyamız ya da virtualhost ek satırlarımız şöyle oluyor;

Burada sadece XSS ile ilgili bir takım tedbirlerden söz ettim. Bunlar hem diğer ataklar için yeterli değil hem de XSS için yeterli olmayabilir. Daha farklı bilgilerle güvenliğinizi arttırabilirsiniz. Yeni XSS tedbirleri bulursam bu blog icinde tekrar paylaşacağım.

Yeni satirlar (12 Ekim 2017)

X-Frame-Options ayarimizi SAMEORIGIN ya da DENY olmasi, bir baska siteden frame acarak sitemizin gorunmesini engelliyor. Fakat baska bir sitede acilmis frame icindeki form bizim sitemize hala POST yapabilir. Islem sonunda bir veri ekrana cikacaksa da cikmiyor.

PHP calisma modu ve XSS (19 Ekim 2017)

PHP calışma modundan dolayı cPanel/centos sıstemlerde apache security modul için bazen .htaccess dosyasında headers satırlarını tetiklemiyor. Bunun nedeni anladığım kadarı ile php dosyalara apache üstünden değil direkt olarak php’nin cevap verecek şekilde ayarlanması. Bu durumda header tanımlarını PHP header olarak yazmanız gerekiyor. Tum dosyalarda include edilen veritabanı bağlantisi içeren bir dosya içinde bunu yaparsanız XSS vb header bilgilerini görebiliyorsunuz.

Zararli katki maddeleri

Gunumuzde artik pizzadan hamsiye kadar her sey paketlenmis satiliyor. Gun gectikce de bu urunleri tuketmeye muhtac kaliyoruz. Markalar karsisinda gunluk uretim yapan kucuk ureticilerin direnmesi mumkun gorunmuyor. Hatta sut ve simit icin bile durum boyle. Urunler karlilik icin uzun raf omurlu olsun diye veya daha cok tuketilsin diye iclerine bir takim maddeler ekleniyor. Bunlarin da e999 gibi bir takim kodlari var ne olduklarindan cogumuzun haberi yok.

Bu anlamda kisisel olarak gercekten tedirginim. Tedirginim cunku bu urunler uretilirken iclerine koyulan maddelerin, urunler belirtilen sartlarda tasindiginda ve depolandiginda zararli maddelere donusmeyecegi varsayiliyor. Bu saklama sekillerinden de haberdan olabilmemiz marka guvenilirliginin de otesinde bir sorun. Sizinle de duyduklarimi, okuduklarimi paylasmak istiyorum.

Meyveli soda icmiyorum
Yillarca bayila bayila ictigim urunlerdir. Eve altisarli alip buzdolabinda saklayip, yazlari bayila bayila iciyordum. Fakat bir gun kimya okuyan bir arkadasim tehlikeden haberdar etti. Bu sodalar isiya maruz kaldiklarinda ciddi derecede kanserojen benzen denilen madde uretiyorlar. Sodyum benzoat ile C vitaminin birlesmesi ile ortaya cikiyor. Market, bakkal veya restoranlarin depolama seklinini dusununce artik tuketmedigim urunlerin basinda.

Cips yemiyorum
Cipslerin paketlerini dikkatle okursaniz iclerinde MSG ( monosodyum glutamat ) mevcut. En unlu 3 markada gordum bunu. %100 basiniza is acar denmiyor. Zaten bu yuzden kullaniliyorlar. Fakat ote yandan hazir corba paketlerinde artik MSG icermez etiketini de gormeye basladik. Demek ki o kadar da guvenilir degil. Amaclari istah acmak ve beyni uyarip daha da cok urunu tukettirmek. Cips yerken duramamanizin nedenlerinden biri bunlar yani. Fakat glutamatlar beyni ozellikle cocukluk doneminde cok iyi etkilemiyor denilmekte. Yani zekanizin dusme nedenlerinden biri de maalesef yediginiz cipsler.

Titanyum dioksit ( e171 )
Vitamin haplarindan birinin icerigini arastirirken rastladim. Bu madde aslinda bildigini boya uretiminde kullaniliyor. Hatta boya ureticileri %25’e kadar maliyet olarak buna para yatirmaktaymis. Gida boyasi olarak kullanildiginda ise sorun su, bu maddeyi vucudunuz tanimiyor ve vucutta bir seylere baglayarak vucuttan atamiyor. Cunku titanyum dioksit organik materyaller icerisinde serbest olarak gezebiliyor. Bunun anlami da DNA sarmalini bile rahatlikla etkileyip bozabilecegi. Ozellikle vitamin hapi veya boyali-renkli gidalar tuketirken kontrol etmeyi unutmayin.

Trans yag iceren urunler tehlikeli
Bu yaglar genellikle vucut islevlerini ve vucut icindeki yararli olabilecek maddeleri bozdugundan zararli oluyorlar. Kotu kolesterolu arttirdigi gibi iyi kolestorolu de dusuruyorlar. Dahasi seker hastaligini tetikliyor, hucrenin secici gecirgenligini azaltiyor, damarlarin sertlesmesine yol aciyorlar. Yine bazi urunlerde ozellikle basilmis trans yag icermez etiketi ile karsilasiyoruz.

Bu konularda birseyler yazmaya, ogrendiklerimi paylasmaya devam edecegim. Hatta biraz daha ileriye gidip raflardaki urun iceriklerinden zararli madde eslesmesini yapan bir uygulama bile yapilabilecegini dusunuyorum. Keza saglik bakanligi da zaman zaman zararli marka ve urunleri duyurmakta. Bilginiz olsun.

Kucuk sehirler ve kahrolasi rehavetler – 2

Hiç düşündünüz mu, neden çok sever bir köylü, köyde olup biteni en iyi bilenin kendisi olduğunu kanıtlamayı?

Değişimin dirençle karşılaştığı toplumlarda en ciddi direnci küçük yerin insani gösteriyor. Yeni adet şehre ihtiyaç doğrultusunda hızla gelebilirken, köye o kadar da hızlı gelemiyor. Özellikle ülke çapındaki gücün otoriter, tek kişilik ve/veya tek bir anlayışa ait grupta toplandığı ülkelerde küçük yerin insani da hızla kendi çöplüğünde horoz olmanın peşine düşüyor. Biliyor ki bu hiyerarşide yer alırsa kendi küçük egemenliğinde yaptığı her hareketi meşrulaştırmak çok daha kolay olacak.

İnsanların kasabasında olan biten her şeyden haberdar olup, bununla caka satma azmi, aslında kendi iktidarının test etme isteğinden geliyor. Düzenini en sağlam kuran, altını dolduramadığı rolleri küçük yerin kabullerine kendini en iyi uyduran oluyor. Bunu da doğru olan yapıyor hatta kutsalı olarak sayıyor. Her eleştiri için mantığa uysada uymasa da buralar böyle tadında savunmaya hazır. Oysa gerçekte bu yapılan değişimi büyük iktidarın küçük temsilcilerinin istediği kadar gerçekleştirmek, hatta değişimden vazgeçmek.

Bu değişime direnç her aşamada, her yenilik için kendini gösteriyor. Mesela yaşlı teyzeler şehre gelen doktorun ilacını aynen yazıp yazmayacagini net olarak bilmek istiyor. Yazmazsa da onun ne doktorluğu kalıyor ne insanlığı. Küçük yerin köylüsü abartılmış mazeretlerini, koyun yeni turistine kabul ettirmek için elinden geleni yapıyor. Köyünün kurallarını anlatarak “eskiden böyle değildi ama” diye serzeniyor. Ise yaramazsa aracılar üstünden irili ufaklı tehditlerle kuralları öğretme yoluna gidiyor.

Koylulerce yapılan bu tur yerel ayarlamalar her başarıya ulaştığında, herhangi bir sistemin kurallarını istedikleri gibi esnetebileceklerine dair inançları da artıyor. Yani küçük iktidar kendini bilemiş olur. Yeni bir sistemden korkmuyor, çünkü onu da işine geldiği gibi ayarlayabilecegini, rolünü istedigince canlandirabilecegini biliyor.

Olur ya işler yolunda gitmezse, köylüler önce şaşırıp sonra daha isyankar çözümler arıyor. Daha tanıdık bir üst makamda bunun nasıl da bir haksızlık olduğunu kanıtlama kaygısıyla serzeniyor, rüşvet veriyor, tehdit ediyor. Küçük yerin göstermelik iktidarı olmayı en çokta işinden kaytarabildiginde seven atanmış yöneticiler, koltuğunu riske eden bu tur rahatsızlıklardan tabi ki nefret ediyor. Sistemi bozmadan “bana iş çıkarmadan yap ne yapacaksan” diye koyun turistlerini uyarıyor.

İşte bu noktada anlamsızlaşıyor turistlerdeki tüm meziyet, meleke ve maharetler. Kabul edilmiş göstermelik yönetim için bu gizil kurallar onanmis hale geliyor. Her sindirilen turist, bir yandan genelin iktidarının gücünü, bir yandan da bu iktidarın hiyerarşisine ait küçük iktidarın değişmeme zaferi ile perçinlemiş oluyor.

Bu yüzden bu gibi ülkelerde orta sınıfa ait her değer hızla yok oluyor. Hükmün sahipleri biliyor ki, oyun en iyi küçük derebeyleriyle oynanır çünkü bunlar yeri gelip piyon misali feda edildiğinde sindirilmeyecek bir sorunlar çıkartmaz. Yerine kolayca yenisi de bulunabilir tabi. Hiç olmadı küçük yer iktidar düşmanı olarak ilan edilip haritadan tamamen de silinebilir. Tüm bunlar bir de yazılı kültüre uzak, dili yalana, eli talana yatkın, kurnazlığını zeka, kaytarmayi başarı bellemiş topluluklarda çok daha rahat yerleşiyor, kronikleşiyor.

Nadir de olsa bazen küçük şehrin köylüsü, çaresini bulup işlerini yürütemiyor. Ne ahaliden ne göstermelik yönetimden yüz bulamayabiliyor. O zaman da istiyor ki kendi derdi küçük yerin yeni derdine dönüşsün. Bunun içinde genel iktidara her türlü yalakalığı yapıp, her türlü hizmeti vermeye hazırım diyor. Bu küçük yerdeki iktidar kavgaları genel iktidarın adamı olma talebinin artması demek oluyor. Ortaya çıkan yarışma hali küçük yeri daha küçültüp yaşanma hale getirirken, genel iktidarı daha da güçlendiriyor.

Büyük-küçük iktidar ilişkisindeki liken yapı yeni hiçbir sosyal argümana şans tanımıyor ve bunu da varlığının garantisi olarak görüyor.

Turist için bu durumun kronikligini keşfetmek, bayağı da olsa bir çeşit farkındalık demek oluyor. Turist bir gün bu bayağı farkındalığı “kel başa şimşir tarak” diyerek icraata dokuyor ve küçük yerin yeni köylüsü oluyor. Kuralları kabul ediyor, benimsiyor ve içselleştiriyor. Küçük yer sadece yeniliği değil, yeniciyi de böylece sindirip ayakta kalıyor. Bu sebeble kalabalıklaşması onu buyutemiyor ve kentler yerine şehir adında büyük büyük köyler ortaya çıkıyor.

Bir noktadan sonra ise şartları kabul eden yeni köylü övünerek yeni turistlere anlatmaya başlıyor; bu küçük yer hakkında ne de çok şey bildiğini…