Cyber-Warrior.Org \ Doküman \ Security > Web Güvenliğinin Önemi ve Kontrolü
| Madde |
| |
Yazar : EXECUTE |
| |
Date : 26.01.2013 19:12:36 |
| |
# Web Güvenliğinin Önemi ve Kontrolü |
| |

Website Güvenligi , Web’de bir varliga kontrolü olan kisiler için önemli ve ilginç bir konudur . Basarisiz bir web güvenligi ise ; sizi nefret ettirebilecek birçok konuya bulastirabilir : Spamler , Virüsler , Kimlik Hirsizligi ya da birkaç önemli unsur daha .
Web Güvenligi önemli oldugu kadar da karmasiktir . Eminim ki su an bunu okudugunuz sirada birçogunuzun bilgisayari , bir bilgisayar saldirisinin agi ya da bir spam mesaj gönderiminin parçasi konumundadir . Birçogunuzun mail adresi de sizin ilginiz olmasa bile degisik arkadaslik siteleri , emlak tanitimlari veya çesitli spamlar ile doludur ve bunlara nasil bulastiginizi da bilmiyorsunuzdur .
- Web Güvenligi ile Ilgili Ilginç Bir Rapor -
Biraz eskiye dönersek , Web Güvenlik sirketi olan Cenzic’in 2009 yilina ait Web Güvenlik Açiklari ile ilgili yaptigi arastirma sonucu ulastigi grafigi inceleyebiliriz .

Grafikte de görüldügü gibi , en yaygin güvenlik ihlalleri SQL Injection , XSS , kimlik & yetkiden dogan açiklar vs. Zamanin yeni tehditleri sayilacak clickjacking ve kullanici arayüzü ile alaka phishing’in bahsi henüz geçmiyor . PHP , HTML, CSS ve JavaScript ile ugrasan Web gelistiricilerseniz bu tehditleri önemsemeniz gerekiyor . PHP’yi kullanmasaniz bile bu tehditler hâla geçerli . Ama diyelim ki kodlara dokunmayan ve basit bir tasarimdan hoslanan kullanici iseniz , bu alanlarda degeriniz daha fazla artabiliyor .
Bir de son zamanlardaki Web güvenlik açiklari ile ilgili grafige göz atalim .

Burada da görüldügü gibi 2012 Yaz ayina ait bir grafikle XSS’in ne derece önemli bir boyuta geldigini görebiliyoruz .
Ayrica Wordpress’in 2012 yilindaki açik durumuna da bir göz gezdirelim .

Simdi ise önemli kisma geçelim ve URI’in ( Uniform Resource Identifier ) tanimina ve web güvenligindeki önemine bir göz atalim .
- URI : Bir Web Hizmetine Saldirmanin Ana Yolu -
Bir dökümanin adresine ( örnek : Internette herhangi bir dosya ) URI adini veriyoruz . Baska bir deyisle , bir dökümana ulasmak için tarayici adres çubuguna girdiginiz baglanti ya da bir dökümana ulasmak için koda gömdügünüz sey diyebiliriz . Örnegin internet sitemiz http://execute.com olsun , bunu adres çubuguna yazip enterladiginiz zaman server sizi otomatik olarak http://execute.com/index.php dökümanini yönlendirecektir . Ya dahttp://execute.com/exelogo.png olarak belirlediginiz adresi hedeflediginiz asil yer olanhttp://i1287.photobucket.com/albums/a624/eXecute7/exelogo_zpsbbfa7663.png baglantisina yönlendirebilir . Ayrica bir web hizmetinde kullanicilarin ulasamayacagi kisimlarda olabilir . Örnegin ; /etc/password kismi sifre korumalidir ve sadece oturum açilarak girilebilir .
Her URI parametreler içerir . URI’de bulunan scriptleri gönderebileceginiz ve URI’nin sonuna eklenen ? ve & isareti ile kullanin bazi talimatlar bulunur . Örnegin Google’da yavrukopek aramak istediginizi varsayalim bunun için http://www.google.com/search?q=yavrukopek URI’sini kullanirsiniz . Eger ilk 50 aramadan sonraki sonuçlari görmek isterseniz ; http://www.google.com/search?q=yavrukopek&start=50 URI’sini kullanmaniz gerekir .
Normalde bu parametreler kullanici tarafindan girilmiyor , buna tercihen HTML arayüz kullanilabilir . Google anasayfanin kaynak kodlarina bir göz atalim .

Isin aslina bakarsak , bu alandaki içerikler URI search’e gönderilir ve URI’nin sonuna eklenerek ;

bu hâli alir . Farketmissinizdir ki benim kodumda herhangi bir "btnG" parametresi bulunmuyor . Çünkü aramayi yaparken Enter tusunu kullandim .
Arama sonuçlari sayfasina geldiginizde alt kisimda sayfalama baglantisini ( 1 , 2 , 3 ... ve Goooooogle logosu ) görürsünüz . Burada ise bu baglantilar ayni veriyi URI’ye gönderir ve start parametresi olarak eklenir .

HTML içindeki form alanlari veya baglantilari kullanarak URI ile bir scripte parametre gönderebilirsiniz . URI içeren resimler , baglanti elemanlari , çerçeveler veya href ve src özelligi alabileceginiz herhangi bir sey ile bu islemi yapabilmeniz mümkün . Eger bir saldirgan bunlari geçersiz kilar ya da HTML’nizin içine sizden habersiz bir resim eklerse kendi URI’sini veya parametresini buraya gönderebilir .
Hangi parametrelerin kullanildigi ve nereyi hedefledigine dikkatli olmalisiniz . Yoksa bu parametreler baskalarinin serverini hedefliyor olabilir .
- Farkli Saldiri Türleri -
Farkli saldiri türleri derken ne kastettigimizi bu konulara asina olanlar bilir . Bilmeyenler için de basliklar hâlinde kisa açiklamalarla bu saldiri türlerini inceleyelim .
- SQL Injection -
Öncelikle SQL’in tanimindan bahsedelim :
SQL (Structured Query Language) ; Veritabanlarinda veri çekme , silme ve degistirme gibi islemler için kullanilan basit yapili bir dildir . Günümüzde neredeyse tüm web uygulamalarinin altyapisi veritabani desteklidir . Ve bu uygulamalar , veritabani ile SQL araciligiyla anlasmaktadir .
Web uygulamalarinda bir çok islem için kullanicidan alinan veri ile dinamik SQL cümlecikleri olusturulur. Mesela “SELECT * FROM Products” örnek SQL cümlecigi basit sekilde veritabanindan web uygulamasina tüm ürünleri döndürecektir. Bu SQL cümlecikleri olusturulurken araya sikistirilan herhangi bir meta-karakter SQL Injection’a neden olabilir.
- CROSS-SITE SCRIPTING (XSS) -
Cross-site scripting en büyük ve en çok karsilasilan problem olarak tanimlanabilir . Bu açik ile , saldirgan kendi JavaScript kodunu , URI’nin sonuna bir parametre olarak sizin dökümaniniza enjekte eder .
Diyelim ki websitenizin havali olmasini ve ziyaretçilerin belli renklerle sayfayi kisisellestirebilmesine izin verilmesini istiyorsunuz . Bunun için kullanacaginiz PHP kodu ;

Simdiye kadar her sey çok temiz görünüyor , bunu yapmak için satiriçi stilleri bile kullanmaya gerek olmadi . Bunu serverda test.php olarak kaydetmek istersek ; URI’miz ; http://example.com/test.php ve ardindan beyaz üstüne siyah bir text introsu elde edecekseniz .
Eger renklerin pembe üstüne kirmizi olmasini isterseniz kullanmaniz gereken parametreler söyle olacak ;
http://example.com/test.php?color=red&background=pink .
Eger degiskenler için herhangi bir deger girisine izin verirseniz saldirgan alttaki kod dizisini gönderebilir .

Bu dizin etkili olarak stil blogunu kapatir ve dökümanin içine bir script ekler . Durumu ekran görüntüsü üstünde de görelim .

JavaScripti basarili bir sekilde enjekte ettiginiz zaman , cookieleri okuyabilir , formlar açip kullanici sifrelerine ulasabilir , virüs ve zararli yazilimlar çalistirabilirsiniz . Buradaki en önemli etken ; JavaScript’in herhangi bir güvenlik modeliyle bagli olmamasi ve hangi sunucudan gelirse gelsin herhangi bir JavaScript’in ayni haklari sahip olmasidir .
XSS çok yaygin bir açik olarak biliniyor . Öyle ki XSSED.org gibi siteler dünya üzerindeki XSS açigi sayilarini ve sitelerini paylasir durumda .

- CROSS-SITE REQUEST FORGERY (CSRF) -
Cross Site Request Forgery (CSRF) ; Tarayicilarin Javascript çalistirma destegiyle , kisilere istenilenin disinda servera komut yollanmasini saglayan kodlardir . Örnegin ; http://example.com diye bir sitemiz olsun . GET komutuyla çalisarak veritabanimiza bir seyler göndersin .

Formlari göndermenin iki yolu vardir . Birisi GET komutudur ki bu görünen olarak bu isi yapar . Digeri de POST komutudur ve gizlilik altinda çalisir ayrica daha fazla veri gönderimini saglayabilir .
Eger sunucunuzda herhangi bir dogrulama yapilmadan veritabanina bir script gönderilebilirse , herhangi bir web siteye alttaki islemi yaparak bir resim ekleyebilirim .

Simdi benim siteme giren herhangi bir kisi , sizin veritabaniniza da yorum birakmis oluyor . Bunun için resim , CSS baglantisi ya da URI’de tanimlanmasina izin verecek herhangi bir sey ekleyerek yapabilirim .
- Phishing -
Bu web güvenlik tehlikesini bir örnekle açiklamak daha kolay olacaktir . Günümüzde kisisel bilgilerinizi banka , web siteleri gibi yerlerde kullaniyorsunuzdur . Bundan dolayi da uyanik olan siber suçlular , size baglantili oldugunuz siteler veya bankalardan geliyormus gibi göstererek çesitli spamler ve mailler atarlar . Mailler de kimlik dogrulamasi , sifre degisikligi gerekliligi gibi ifadeler görebilirsiniz . Ve mailin içinde de o kurulusun baglantisi gibi gösterilmis bir link olur . Tikladiginiz zaman tipki kullandiginiz kurulusun ( banka ya da e-ticaret sitesi olabilir ) sitesindeymissiniz önceden hazirlanmis bir siteye yönlendirilirsiniz ve bilgilerinizi girersiniz . Ve böylece suçlu , kodlarin arasina yerlestirdigi birkaç seyle sizin sifre ve bilgilerinizi artik ele geçirmis olur .

- Uzaktan Dosya Ekleme (RFI) -
RFI ile , bir saldirgan PHP kodlarindaki hatalar ve eksiklikler sayesinde sizin serverinizda çalistirmak üzere kendi serverindan kodlari enjekte eder . XSS’e biraz benzer bir açik olsa da , daha çok problem getirir . Çünkü saldirgan serveriniz üzerinde tam erisime sahip olabilir ( JavaScript ile cookieleri alabilir , baska kodlar çagirabilirsiniz . Fakat Flash veya Java Applet hileleri kullanmadan dosya sistemini tam bir erisim saglayamazsiniz . )
Herhangi bir kod denenmemis bir degiskenle ya da include() komutu ile enjekte edilebilir . Örnegin server komutlari çalistirabilir , dosya upload download ya da baska serverlara veri transferleri yapabilirsiniz . Kullanici adiniz ve sifrenizi kontrol edin , eger server izin verirse PHP veya ASP ile komut satirinda herhangi bir sey yapabilirsiniz .
Bu açik serverinizin basina gelebilecek en büyük problem olur , çünkü komut satirina erisim ile birlikte , serveriniz bir saldiri makinasi olarak kullanilabilir , kullanicilarin serverda ne yaptiklari takip edilebilir , kaynaklara ulasilabilir , virüs dagitimi yapilabilir ve spam baglantilari eklenebilir .
- Web Güvenligini Arttirmanin Temel Yollari -
" Kodunuzu Güncel Tutun "
Kodlarinizi güncel tutmak sizin için en iyi korunma yollarindan biri olabilir . Örnegin wordpress’in eski sürümleri , PHP ve MySQL’in eski yüklemeleri , hatta eski tarayicilar bile güvenlik konusunda sizi yari yolda birakabilir . Bunlara dikkat etmezseniz ; web güvenliginizi asmak isteyen , kimlik hirsizligi yapacak kisiler ya da verilerinize ulasmak isteyenler için büyük bir rekabet mümkün olacaktir .
" Oturumu Açik Olarak Birakmayin "
Oturumu açik birakmak olabilecek tehlikelerden birisidir . Kullandiginiz websitelerde oturum açik oldugu zaman , sizin açik oldugunuzu onaylayip clickjack yapabilirler . Ve böylece farkinda olmadan kasitsiz olarak güvenliginiz tehlikeye girmis olur . Bu durum özellikle sosyal medyada büyük bir etki yapabilir , arkadaslariniza da yayilabilir . Ve adeta bir kartopu etkisi ile yayilabilir .
" Akillica Bir Sifre Kullanin "
Her zaman söylenen bir seydir ki güvenlik için en önemli önlemlerden birisi de sifreyi dogru bir sekilde seçmek . Saldiri yapacak kisilerin odaginda bulunan sifreleri akillica seçmeniz güvenlik açisindan iyi olacaktir . Herhangi bir sayi kombinasyonu ya da harf kullanimi yerine bunlari karistirarak ve kombinasyonlarini alarak olusturacaginiz sifreler sizi daha iyi koruyacaktir . Örnegin sherlock holmes okuyan birisi olabilirsiniz ve kitapta bazi akilda kalici terimlerle karsilasmissinizdir , buna itafe sifreniz Sh3rl0ckW4t50n ya da b4sk3rv!ll3. tarzinda , karakteri fazla olan yapilarda olabilir .

- Server Üzerinden Ne Yapabilirsiniz -
Server uzmani olmasaniz bile , bu güvenli olmayan bir server kullanmanizin bahanesi olamaz . Serverda yapabilecekleriniz için birkaç basliga göz atalim .
" Klasör Listelemeyi Kapatin "
Klasör listeleme ile "path traversal" adiyla bilinen yol degistirici olarak çevirebilecegimiz bir açik için kullanilabilir . Bu açik ile serverdaki dosyalariniz disari çikarilabilir durumda olur . Bunun için ;
- Serverda yeni klasör olusturun , örnegin "pathtest" adiyla olsun .
- Ardindan bu klasör içine birkaç dosya ekleyin . Fakat dikkat edin ; index.html, index.php, default.aspx bu tarz uzantili dosyalari sakin eklemeyin .
- Daha sonra tarayicinzda ; http://example.com/pathtest/ dizinini açin .
- Eger listeyi görürseniz server saglayicinizla iletisimi geçip listelemeyi kapatmasini isteyin .
" Hata Mesajlarini Kapatin "
Çogu serverlar , tarayici bir hatayla karsilastigi zaman hata verir . Bu hata mesajlarin çogu da kriptolanmis görünür fakat bu saldirganlar için çok iyi birer kaynak kodu konumundadir .
Bir hata olustugunda ve sunucu bunu görüp belirttiginde kontrol ettigi ilk yer serverin dosya yapisidir . Hata mesajinin belirtmis olduklarindan biri de "XYZ dosyasi bulunamadi" tarzi bir seydir ve bu da XSS saldirilari için çok önemli bir firsat olur . Çünkü <script>alert(document.cookie),</script> bu sekilde isimlenmis bir dosya aramaniz gerekecektir .
- Log Dosyalarini Kontrol Edin -
Tüm sunucular giris yapabileceginiz bir log dosya bölümüyle gelir . Çogu hosting sirketleri , ziyaretçilerin nerelere girdikleri ve ne yaptiklariyla ilgili detayli istatistikler verirler .
Normalde bu istatistikleri , ziyaretçiler nereye girmis , neye bakmislar , ne zaman girmisler gibi bilgileri görmek için kullaniriz . Ama log paketlerinin veya istatistiklerin ilginç kismi aslinda bunlar degil . Maddeler hâlinde log dosyalarini ne için kullanabilecegimizi görelim .
- Ne kadar form gönderildigini ve kim tarafindan gönderildigini kontrol edin . Bu kontroller CSRF ve XSS ataklarinin göstergesidir .
- Server trafigini ve hangi dosyalarin sik çagirildigini belirleyin . Eger formlar eskiyse ve sik çagirilmiyorsa elinizde bir CSRF tehlikesi bulunabilir .
- “txt?” ile biten loglari arayin . Bunu aramamizdaki sebep ise RFI ataklarini belirlemek olacak .
- Hata mesajlarini kontrol edin . Ve kaç tanesinin "404 errors" olduguna bakin . Hangi dosya isimlerinin arandigina ve hangilerine giris için girisimde bulunulduguna dikkat edin .
- Hangi kullanicilarin kimlik dogrulamaya tesebbüs ettigini kontrol edin . Eger bir kullanici olmasi gerektiginden fazla trafige sebep oluyorsa , bu demektir ki serveriniz kontrolü çoktan onun eline geçmistir .
Log Dosyaniz sizin bir nevi muhbirinizdir . Kötü adamlarin , serverinizin etrafinda dolastigini size haber vermek için bulunur ve böylece onlardan bir adim daha önde olup , gerekli önlemleri alabilirsiniz .
Tarafimca yabanci bir kaynaktan çevirilip derlenmistir . Kaynak

Code Hunters Tim | EXECUTE | | |
|
| |
|
| |
|
|