Main » 2010 » August » 18 » Passport Hack
|
Bu yazi Microsoft Passport`taki bir güvenlik açigini anlatiyor. Yazida bir kullanicinin Passport hesabini ele geçirme hakkinda detayli bilgi ve örnek kodlar verilecektir.
Orjinali: Chris Shiflett
Fakat tüm bilgiler egitim amaçli kullanim içindir. Amaç web üzerindeki güvenligin detayli bir analizini yapmak ve bazi yanlis anlamalari ortaya çikarmak. Su anki Passport mekanizmasinin kullaniminda tavsiyelerim ve güvenligini artirma yollari ile
yazimi bitirecegim.
Altyapi
Microsoft Passport kullanicilarin Internet üzerinde sunulan ve kayit gerektiren servislere daha kolay erisimi için yaratilan bir mekanizmadir. Amaç kullanicilarin bir Passport için kayit olmalari ve çesitli sitelerdeki servisleri, her birinde kayit olmaya
gerek duymadan (harcanan vakit ve sifrelerin bakimi her zaman sorun olmusdur) kullanabilmeleridir.
Passport`un ek bir özelligi de Wallet`dir (cüzdan). Bir Wallet`e sahip oldugunuzda kredi karti bilgilerini ve ek kisisel bilgileri depolayabilirsiniz. Bu katilimci sitelerde satin alma islemlerinde kullanilabilir.
Çerezler (Cookies)
Passport basitçe kullanicinin bilgisayarinda depolanan cookie koleksiyonudur. Bu cookie`ler kullaniciyi Passport kulanan bir siteye tanitir. Passport mekanizmasinda sunucudan sunucya haberlesme yoktur, tüm haberlesme kullaniciya dogrudur.
Bu islem için ayarlanan çesitli cookie`ler asagidaki gibidir:
isim alanadi güvenli? dizin depolanma
BrowserTest passport.com Hayir / hafiza
MSPVis passport.com Hayir / disk
MSPDom passport.com Hayir / disk
MSPAuth passport.com Hayir / disk
MSPProf passport.com Hayir / disk
MSPSec passport.com Evet /ppsecure disk
MSPRequ login.passport.com Hayir / hafiza
PWSVis wallet.passport.com Evet / hafiza
MSPAuth walletpassport.com Evet / hafiza
Microsoft Internet Explorer 5.5 öncesi sürümler istemci-tarafi scriptlerin o anki web sunucu ile paylasilmamasi gereken cookie`leri görüntüleyebilmesine izin veren bir cookie güvenlik açigi içeriyordu. Passport`un arkasindaki mekanizma tamamen
cookie`lere dayali oldugu için bu kombinasyonun problemleri ortadadir.
Kriptolama (Encryption)
Bir zincir sadece en güçsüz baglantisi kadar güçlüdür. Tanidik geliyormu?
Birseylerin kriptolanmis olmasi ile sahte bir güvenlik duygusuna kapilanlarin çoklugu sizi sasirtabilir. Yukarida bahsedilen cookie`lerin bazisi kriptolanmis degerlere sahiptir. Bu yazida bu degerlerin dekriptolanmasi ile ilgili birseye rastlamayacaksiniz. Neden? Çünkü bunu yapmak zor ve kesinlikle gereksiz.
Kriptografi çok zevkli bir konu olsada bu yazinin amaci Passport gibi bir mekanizmanin nasil kolaylikla kirilabilecegi. Web sitemize veya web servisimize girmeye çalisan biri genellikle en kolay yolu seçecektir.
Bir kullanici Passport kullanan bir siteye girdiginde sitenin kendisi dekriptolamayi gerçeklestirir. Gerçek kullanicinin sahip oldugu kriptolanmis cookie`lerin aynilarini sunarak o kullanicinin kimligine bürünmek mümkündür. Birisinin cookie içerisindeki degerleri dekriptolamasindaki tek amaç Passport kullanilan bir site yaratmak olabilir.
HTTP
Detaylari (pek çok web gelistirici tarafindan dahi) gözardi edilsede yada bilinmesede Web`de gezinen çogu insan HTTP hakkinda bilgi sahibi olmustur.
Microsoft Passport`u nasil altettigimi anlayabilmek için HTTP 1.1 ve onun cookie`leri nasil kullandigi hakkinda temel bir bilgi sahibi olmak gerekli. HTTP`nin bu yazida bahsedilmeyecek olan pek çok detayi vardir. Tüm tanimlamalar için RFC 2616`ya
danisabilirsiniz.
Basit HTTP senaryosu bir istek ve cevaptan olusan tek bir transferdir. Kullanici web`de gezinirken, Web browser (istemci) kullanicinin ziyaret ettigi sitelere çesitli istekleri yapar. Web sunuculari da web sayfalarini isleyen browser`a cevaplar döner.
örnek istek:
GET / HTTP/1.1
Host: www.k2labs.org
User-Agent: Mozilla/5.0
Accept: text/xml, image/png, image/jpeg, image/gif, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate, compress, identify
Connection: keep-alive
Bu örnek istek bir MOzilla browser ile [hide] http://www.k2labs.org/ [/hide] adresine yapilmistir.
Basliklar (Host, User-Agent, Accept, Accept-Language, Accept-Encoding, Connection) HTTP spesifikasyonunda izin verilen basliklardan bazilaridir. Her baslik sunucunun istemci tarafindan yapilan istege cevap vermesine yardimci olacak
bilgiler içerir.
örnek cevap:
HTTP/1.1 200 OK
Date: Wed, 01 Aug 2001 22:00:00 GMT
Server: Protoscope 0.0.1
Connection: close
Set-Cookie: k2labs=chris; domain=.k2labs.org; Path=/;
Content-Length: 38
Content-Type: text/html
Protoscope 0.0.1
Örnek cevap web sunucu ve cevap tipi hakkinda bazi bilgiler veriyor. Cevapta içerik ve basliklarin birbirinden 2 yeni satir ile ayrildigini farketmissinizdir. Bu HTTP`nin transfer davranisini açiklar. Baslangiç baglantisi yapilip istek gönderildiginde cevap gelene kadar baglanti (zaman asimi durumu olmadikça)
açiktir. Webde oturum yönetimini güvenli hale getirmenin zor olmasinin sebeplerinden biri her transferin atomik olmasidir. Örnek HTTP cevaptaki en önemli baslik Set-Cookie basligi. Örnekte k2labs isminde ve chris degerine sahip bir cookie
yaratiliyor. Set-Cookie basligindaki diger tüm bilgiler browser`in daha sonraki isteklerinin basliklarinda bu cookie`yi bulundurup bulundurmayacagini belirleyen bilgilerdir. Görecegimiz gibi diger hiçbir bilgi web sunucuya dönülmez, sadece isim ve degeri saglanir. Örnekteki cookie, son kullanim degeri (expiration date)
belirlenmedigi için diske yazilmayacak ve hafiza da duracaktir. Sadece k2labs.org alt-alanlarina (subdomain) yapilan isteklerde gönderilecek ve dizinde bir sinirlama yok. Yazilacak her cookie ayri Set-Cookie basliklari ile geçirilir. Bu asagida gösterildigi gibi, birden fazla cookie`nin web sunucuya geri sunulmasi metodlarinda çesitlilik gösterir.
Bilmeniz gereken son bilgi de browser`in bir istek yaparken web sunucuya daha önceden belirlenmis cookie`yi nasil gönderecegidir. Örnek Cookie basligi:
Cookie: k2labs=chris
Farkedeceginiz gibi cookie`nin degerinden baska hiçbir bilgi verilmiyor. Diger tüm bilgiler daha önce bahsettigim gibi sadece erisim gereksinimlerini belirlemek için.
Eger birden fazla cookie sunuluyorsa her biri ayni sekilde (isim=deger) listelenir ve biribirinden noktali virgül ile ayrilir (isim=deger;isim2=deger2). Bu sebeple sadece tek bir Cookie basligi gönderilir.
Güvenlik Açigi
Microsoft Internet Explorer 5.5 öncesi sürümler cookie`lerde amaçlanan erisim gereksinimlerini tamamen asan bir güvenlik açigi içeriyor. Etkilenen browser`larin genis kullanimi (browserwatch.com`a göre yaklasik olarak %67.6) sebebiyle bu önemli bir açik teskil ediyor.
Özel yapilandirilmis bir URL ile, bir web sitesi etkilenen browser`a istemci-tarafinda çalisan (client-side) script`ler yollayarak normalde okuyamayacagi cookie içeriklerini kendisine yollanmasini saglayabilir. Bu güvenlik açigi
adresinde anlatilmaktadir. Bu tip bir URL`ye örnek:
/ ve ? isaretlerinin encode edilmis degerlerini kullanarak www.k2labs.org adresindeki bir sayfanin (etkilenen browser`a) .login.passport.com alanadi içerisindeymis gibi ve /ppsecure dizini altinda çalisiyor gibi gösterdik. URL aslinda asagidaki gibi:
Daha önce listeledigimiz Passport cookie`lerini hatirlayacak olursaniz, bu bize .wallet.passport.com alanindaki ikisi (PWSVis ve PWSTok) hariç tüm cookie`lere erisim sagliyor. Diger ikisi de yukaridaki örnekte 'login' yerine 'wallet' yazilarakgörüntülenebilir.
Etkilenen browserlar bu URL`yi bozuk olarak algilamiyor. Istek dogru host`a gönderildi (www.k2labs.org). Bu tabi ki bizim erisim yapabilmemiz için gerekli.
Diger bir nokta, browser Passport cookie`lerini içeren HTTP Cookie basligini dönmeyecektir. Bu yüzden browser`dan Passport Cookie`lerini çikartmakta bu basligi kullanamayiz ve alternatif bir metod gelistirmemiz gerekli. Iste burda istemci-tarafinda çalisan script`ler devreye giriyor.
Client-Side Scripting
Örneklerimde istemci-tarafi scriptler için javascript kullanacagim. Asagidaki örnek script yukarida bahsedilen reveal.php sayfasi içerinde kullanilabilir.
Script .passport.com ve .login.passport.com alanlarindaki tüm cookie`leri ortaya çikaracak ve bu bilgileri kullanicinin web sunucumuza göndermesi için bir URL baglantisina ekleyecek. Document.cookie formati isim=deger&isim2=deger2
seklindedir ve bu bir URL`de istek degeri olarak asagidaki gibi kullanilabilir:
Hepsi bir arada
Simdi bir Passport kullanicisinin cookie`si içerisindeki tüm verilere sahipiz. Bu veriler ele geçirildiginde cookie`leri kullanacak diger kisi için bir cookie`lerin alinacagi siteyi hazirlamaliyiz. Bir web istemcisi ile taklit islemi gerçeklestirilebilir
fakat bu gerekli bir adim degil. Cookie`leri yazmak için ayni güvenlik açigindan ve istemci-tarafi script isleminden yararlanacagiz. MSPSec cookie`sini javascript
(sunucu-tarafi script dili olarak PHP) kullanarak asagidaki örnekteki gibi yazabiliriz:
Yazilim HTTP Set-Cookie basliginda oldugu gibi. Bu örnekteki gibi diger Passport cookie`lerini de yaratabilirsiniz. 3 alan adinin her biri için cookie`ler mevcut oldugunda baskasinin kimligine hiçbir kullanici ismi ve sifre girmeden sahip olunabilir. Buna kisisel bilgileri görüntüleme, degistirme ve depolanmis kredi karti
bilgileri ile alisveris yapmak da dahil.
Özet: Bu islemler kolay gibi görünse de basarili olmasi için asagidaki sartlarin gerçeklesmesi gerekiyor:
1) Kullanici Passport`tan çikmis olmali (logout).
2) Taklit edici tamamen farkli bir IP adresine sahip olmali.
3) Taklit edici farkli bir browser kullaniyor olmali.
HTTP kullanarak %100 güvenli bir mekanizma yapmak çok zor çünkü HTTP Microsoft gibi üretici firmalarin müsterilerine saglamaya çalistigi kolayligi desteklemiyor. Passport`a login olurken 'Sign me in automatically on this computer'
seçenegini asla isaretlemeyin. Bu çesitli sitelerde tekrar sifrenizi girmeden otomatik olarak login olmanizi saglayacak olan MSPSec cookie`sini yaratir. Bu cookie ele geçirildiginde kullanici hesabiniz için büyük tehlike yaratir.
Passport`a sadece gereksinim duyan sitelere girmeden önce login olun ve ziyaretiniz bittiginde hemen logout yapin. Logout islemi cookie`lerin çogunu yok eder.
En önemlisi etkilenen browser sürümlerini kullanmamak. Eger Microsoft Internet Explorer`in etkilenen bir sürümünü kullaniyorsaniz, ve kullanmaya devam etmek istiyorsaniz Microsoft bu açik için bir yama çikardi. Asagidaki adresten bu yamayi çekip kurun:
Son Not: Passport mekanizmasinda daha pek çok açik bulunacaktir. Bir baskasinin kullanici hesabini ele geçirmek için Passport kullanilan bir site gibi görünmek belki en kolay yol. Çünkü Passport`un nasil uygulandigi hakkinda bir bilgi gerektirmiyor.
Umarim bu yazida bahsedilen saldiri su anki web teknolojisini ve web gelistiricilerin karsilastigi problemleri daha iyi anlamanizi saglamistir.
|
Views: 789 |
Added by: Isco
| Rating: 0.0/0 |
|