Son gelişmelerle birlikte hepimizin rahatlıkla farkedebileceği gibi web kullanımı artık hayatımızın vazgeçilmez, kaçınılmaz bir parçası oldu. İlk başta insanların sadece yazılarını, fotoğraflarını paylaştıkları, diğer kullanıclarınsa sadece bu fotoğrafları ve yazıları takip etme(bakma) haklarının olduğu teknoloji bugünkü halini aldı. İnsanlar web siteleriyle etkileşebilir, bilgi gönderip alabilir bir hale geldiler. Örnek vermek gerekirse banka işlemlerimizi, şirketler ya da kişiler arası özel görüşmelerimizi web ortamından yürütmeye başladık.

Biz işlerimizi kolaylaştırdığı için bu ortamı kullanıyoruz. Fakat acaba bu ortamı kullanan insanların ne kadarı gerçekten, her an özel verilerinin kötü amaçlı insanların eline geçmesi tehdidiyle yüzyüze olduğunun farkında?

Dergimizin bu sayısında gerçekten çok önemli bir bilgisayar korsanlığı(hacking) metodundan bahsedeceğiz: Cross Site Scripting(XSS)

Öncelikle belirtmek isterim ki burada bu konudan bahsetmemizin amacı kesinlikle hiç bir kişiye kuruma zarar vermek ya da verdirtmek değildir. Tam tersi insanları ve kuruluşları bu konuda bilinçlendirmek, bir an önce bu konuda önlemlerini almalarını sağlayarak, daha sonradan zor bir durumda kalmalarını engellemektir. Kısacası bu yazı sadece bilinçlendirme ve eğitim amacı taşır. E-bergi ve yazar bu yazıyı referans göstererek işlenebilecek hiç bir suçta sorumluluk kabul etmeyecektir.

Özellikle Cross Site Scripting(XSS) hakkında bir bilgilendirme yazısı yazmamızın amacı bu metodun şu an için kullanılan en yaygın korsanlık(hacking) metodlarından biri olmasıdır. Bir internet güvenliği şirketinin yaptığı araştırmaya göre(http://www.acunetix.com) şu an internet korsanlığının %27'si XSS aracılığı ile yapılıyor. Bu da böyle bir yazı yazmak için neden XSS'i seçtiğimizin güzel bir sebebi :)

TANIM VE TARİHÇE

Netscape'in JavaScript dilini kullanıcı taraflı uygulamalarda(client-side applications) kullanılması için piyasaya sürmesinden itibaren, artık ağ tarayıcılarımız(web browser) sunucular(server) tarafından bize gönderilen betikleri(script) yorumlayabilir ve bu betikleri tamamen bizim bilgisayarımızda çalıştırabilir bir hale geldi. Önceden sadece sunucu tarafında çalışan programcıklardan biz bilgi edinirken, betikler aracılığı ile artık başkaları da biz ve bilgisayarımız hakkında bilgi edinebilir bir hale geldi. Kısacası XSS'in doğuşu kullanıcı taraflı betiklerin ortaya çıkmasıyla birliktedir. Temel olarak <acronym title="HyperText Markup Language">HTML</acronym> etiketlerinin(tag) kötüye kullanımına dayanan bir metoddur. Genellikle <acronym title="HyperText Markup Language">HTML</acronym> içine kötü niyetli kişiler tarafından <script>, <object>, <applet> ve <embed> etiketlerinin yerleştirilmesi ve buraya yazılan betiklerin sizden gizlice bilgi çalması esasına dayanır.

Kısa bir tanım ve tarihçeden sonra artık yazımızın esas önemli ve ilgi çekici kısmına geçebiliriz: XSS metodu nasıl kullanılır, XSS kimler için bir tehdit oluşturur ve XSS saldırılarından korunmak için neler yapabiliriz.

NASIL YAPILIR

Çok basit bir örnekle başlayalım. Bir habergrubuna ya da bir foruma üyesiniz diyelim. Bir kullanıcının buraya şu şekilde bir posta yollamasında hiç bir sakınca yoktur sanırım:

Merhaba herkese
<script> Sizin bilgisayarınızda çalışacak zararlı kod </script>
Kendinize iyi bakın.

Bu mesaj size ulaştığı zaman siz bu yazının sadece :

Merhaba herkese
Kendinize iyi bakın.

Kısmını göreceksiniz. Oldukça masumane değil mi? Ama göründüğü gibi değil. Çünkü siz bu kötü niyetli kişinin mesajını okurken onun size yolladığı kötü niyetli betik arkada sizin hakkınızdaki özel bilgileri topluyor!

Başka bir örnek verelim. Çoğumuzun alışkanlığıdır önümüze gelen ilk linke tıklamak değil mi? Bu site bizi güvendiğimiz herkes tarafından bilinen bir siteye götürüyorsa hele bu linke tıklamanın kötü bir sonucu olabileceği aklımızın ucundan bile geçmez. Ama bu eylem de hiç masum olmayabilir. Örnek vermek gerekirse:

<a href="http://coksevdigimizguzidesitemiz.com/fotograflar.php?yorumum=<script>Kötü niyetli kod</script>Harika_
bir_foto"> Ali sana süper bir foto ve pek harika yorumumu yolladım</a>

Bu <acronym title="HyperText Markup Language">HTML</acronym> etiketi size şu şekilde görünecek:

Ali sana süper bir foto ve pek harika yorumumu yolladım

Siz bu linke tıkladığınızda gerçekten de güzel bir fotoğraf ve "Harika bir foto" yorumuyla karşılaşacaksınız. Fakat gene arkaplanda kendi bilgisayarınızda çalışan kötü niyetli betik sizin hakkınızda bilgi topluyor olacak.

Şimdi biraz da diğer etiketler XSS için nasıl kullanılabilir onu görelim.

Bir <acronym title="HyperText Markup Language">HTML</acronym> formunuz var diyelim. Bu form <acronym title="Hyper Text Transfer Protocol">HTTP</acronym> GET metodu ile sunucuya veri gönderiyor ve sunucuda yaptığı sorgudan sonra size cevap dönüyor. GET metodunu seçtiniz çünkü insanların <acronym title="Uniform Resource Locator">URL</acronym> aracılığıyla da istenen sayfaya girebilmesini, kısacası insanların direk o sorgu sonucuna her seferinde sorgu sayfasına uğramadan kolaylıkla ulaşabilmesini istiyorsunuz site sahibi olarak. Kullanıcının sorgu için girdiği veriyi de hiç değiştirmeden sorgu cevap sayfasında kullanıyorsunuz diyelim. Peki ya kötü niyetli bir kişi bu sorguya <acronym title="HyperText Markup Language">HTML</acronym> etiketleri gömer sizin sorgu sonucunuzu hiç olmaması gerektiği gibi göstermeyi başarırsa. Mesela <img> etiketiyle saçma bir fotoğraf ekleyip sorgu sonuç sayfasına ve altına da "HACKED BY KOTU NIYETLI" yazarsa. Ve de <acronym title="Uniform Resource Locator">URL</acronym> aracılığı ile bu sayfaya sorgu yapmadan direk olarak ulaşılabileceği için insanlara bu kötü sorgu sonucunu link olarak dağıtırsa. Çok iddialı web projemizin itibarı bir anda yerlerde. Sitemiz normal şartlar altında bilgisayar korsanı tarafından ele geçirilmedi. Ama bu kötü niyetli kişi artık sitemizi istediği gibi gösterebiliyor insanlara. Kısacası kimsenin bize güveni kalmadı, sitemizin açığı yakalandı çünkü...

Bir örnek daha verelim. Bir site ve bu sitenin bir giriş(login) sistemi var. Elimize login olunabilecek sayfaya şu şekilde bir link ulaşıyor:

<a href="http://coksevdigimizguzidesitemiz.com/login.php?baslik=<script>Kullanıcı adı ve parolamızın sunucu dışında aynı 
anda başka birine de gitmesini sağlayan betiğimiz</script>GERÇEK BAŞLIK">Hadi tıkla da sisteme gir!</a>

Peki şimdi ne olacak? Eğer bu linki tıklarsak login sayfasını olması gerektiği gibi göreceğiz. Ama bir problemimiz var. Biz kullanıcı adı ve parolamızı girdiğimiz an, bu özel bilgilerimiz başkasının eline geçmiş olacak. Kısacası üyeliğimizi bilgisayar korsanına(hacker) kaptırmış olacağız.

Burada bahsettiğim metodların hepsi çerezler(cookie) aracılığıyla kalıcı bir hale getirilebilir. Kısacası o siteye artık her girdiğinizde tüm özel bilgileriniz başkalarının elinde!

KİMLERE KARŞI BİR TEHDİT OLUŞTURUR?

Yukarıda da bahsettiğim gibi XSS hem kullanıcılara hem site sahiplerine hem de sitenin geliştiricilerine zarar verebilir. Çok önemli verilerimizin döndüğü web ortamında dikkatsizlik sonucu bu bilgilerimizi başkalarına kaptırabiliriz bir kullanıcı olarak. Bu tarz bir açığın olduğu bir sitenin sahibi doğal olarak maddi açıdan sıkıntıya düşecektir. Sitenin geliştiricisi de herşeyin kökeni ona dayandığından itibar kaybına uğrayacaktır.

NASIL ÖNLERİZ?

Sitede bir açığın bulunması tamamen o sitenin sahibi ve geliştiricinin sorumluluğu altında. Dolayısıyla bu saldırıları engellemek için en büyük görev onlara düşüyor. Peki bunun için ne yapabilirler?

Öncelikle dinamik olarak sayfa üreten kodlarını gözden geçirmeli ve bir onay(validation) mekanizması geliştirmeliler. <acronym title="Hypertext Preprocessor">PHP</acronym> dilini ele alacak olursak en basitinden "strip_tags" fonksiyonunu kullanabilirler. Böylece dışarıdan site aracılığıyla kullanıcılara yönlendirilmek istenen <acronym title="HyperText Markup Language">HTML</acronym> etiketlerinin önünü kesebilirler.

Kişisel olarak benim site geliştiricilerine tavsiyemse bu tarz kodlamaları kendileri yapacaklarına hazır yazılmış, bir çok insanın kontrolünden çokça sefer geçmiş "Web Framework" lerini kullanmaları. Neticede bir açığı kapattığınızda başka bir açık ortaya çıkacak onu kapatınca bir başkası…Bunları kontrol edemez bir hale geleceksiniz bir yerden sonra. Ama bir framework kullanırsanız tek bir güncelleme ile onlarca bilmediğiniz açığı bile bir seferde kapatmış olacaksınız. Kısacası ben <acronym title="Hypertext Preprocessor">PHP</acronym>'nin <acronym title="Active Server Pages">ASP</acronym>'nin JSP'nin vs. kralıyım mantığıyla hiç bir zaman yaklaşmayın olaya :) Çok bilmek en iyi bilmek manasına gelmez!

Kullanıcılar ise bu saldırıları engellemek için ağ tarayıcılarının ayarlarından bu betiklerin çalıştırılmasını engelleyebilirler. Ama bu kullandığınız sitelerin çok güzel bazı özelliklerinden mahrum kalmanıza neden olacak. Her ne kadar en etkili çözüm bu olsa da bu saldırılardan korunmak için, pek de mantıklı olduğunu söyleyemeyeceğim. Bir kullanıcı olarak da kullanabileceğimiz en güzel yöntem bilmediğimiz hiç bir linke tıklamamak, güvenilir olmayan sitelere girmemek ya da üye olmamak ve girmek istediğimiz sitenin adresini direk olarak elimizle yazmak, yani onun linklerini kullanmamak.

Bu sayımızda sizleri çok yaygın bir bilgisayar korsanlığı(hacking) tekniği olan Cross Site Scripting(XSS) hakkında bilgilendirmeye çalıştık. Bu kadar hassas bilginin web üzerinden dağıtıldığı ve kullanıldığı günümüzde güvenlik saldırılarına karşı daha dikkatli olmalı bu konuda bilinçlenmeye çalışmalı ve insanlarla da bilgilerimizi paylaşmalıyız. Aşağıdaki kaynaklardan konuyla ilgili benim atladığım bir nokta varsa daha detaylı bilgiler edinebilirsiniz.(Merak etmeyin verdiğim linkler saldırı içermiyor:)) Hepinize güvenli günler dilerim :)

KAYNAKLAR VE FAYDALI LİNKLER