Cookie/session, web
uygulamalarında sunucu tarafının, kendisini ziyaret eden kullanıcıları
ayırt etmek, yetkilendirmek, mevcut oturumunu belli bir sure tutma,
çeşitli bilgileri taşıma veya oturumunu yönetmek gibi sebepler ile
geliştirme aşamasında ihtiyaç duyulan web uygulama bileşenleridir.
Cookie ve session benzer amaçlar için kullanılan fakat temel bazı
farklılıkları olan web uygulama ifadeleridir. Güvenlik açısından genelde
tercih edilen session kullanımıdır.
Aşağıda client tarafının sunucu tarafından cookie bilgisini almasına ait ekran görüntüsü verilmiştir.
Yine
bazı durumlarda saldırganların hiç bir teknik açıklık istismar etmeden
doğrudan uygulama geliştiricilerin kullandığı ve kimlik doğrulama
olmayan elmah.axd ve trace.axd gibi hata loglama modüllerine erişim
sağlayarak ilgili uygulamalarda admin kullanıcılarının sessionID
değerlerini kullanarak oturumlarını ele geçirebilmektedir.
Trace.axd loglama modülü üzerinden elde edilen SessionID değeri:
Bu değerlerin doğrudan cookie manager benzeri uygulamalar ile browser üzerinde mevcut değerleri ile değiştirilmesi durumunda bu kullanıcılara ait oturumlar ele geçirilmiş olunacaktır. Bu şekilde doğrudan admin paneller veya kullanıcı oturumları elde edilebilir.
Aşağıdaki ekran görüntüsünde session fixation açıklığının nasıl gerçekleştiği daha kolaylıkla anlaşılabilir.
Cookie bilgisi client tarafında
tutulduğu için üzerinde hassas veriler (kullanıcı adı,parola,kredi kart
numarası vs.) veya manipule edilmesi mümkün değerler taşınmamasına
dikkat edilmelidir. Session kullanımında hassas verilerin tutulması veya
bazı kontrollerin yapılması sunucu tarafında yapılmaktadır.
Session kullanıldığı durumlarda client tarafına mevcut oturuma karşılık gelen şifreli bir Session ID değeri gönderilmektedir. Bu durumda session kullanımı her ne kadar güvenli olsa da Client tarafına gönderilen SessionID değerinin saldırganlar tarafından ele geçirilmesi ile kullanıcılara ait oturumlar elde edilebilmektedir. Ayrıca Session kullanımında üretilen Session ID değerinin yeterli uzunlukta ve karmaşık karakterlerden oluşmasına dikkat edilmelidir. Aksi halde mevcut session ID politikasına uyumlu değerler üretilerek o an aktif bir kullanıcı oturumu elde edilebilir. Session kullanıldığı durumlarda kullanıcıya gönderilen SessionID değerleride Cookie HTTP başlık bilgisi içerisinde tutularak client-server arasında taşınır.
Session kullanıldığı durumlarda client tarafına mevcut oturuma karşılık gelen şifreli bir Session ID değeri gönderilmektedir. Bu durumda session kullanımı her ne kadar güvenli olsa da Client tarafına gönderilen SessionID değerinin saldırganlar tarafından ele geçirilmesi ile kullanıcılara ait oturumlar elde edilebilmektedir. Ayrıca Session kullanımında üretilen Session ID değerinin yeterli uzunlukta ve karmaşık karakterlerden oluşmasına dikkat edilmelidir. Aksi halde mevcut session ID politikasına uyumlu değerler üretilerek o an aktif bir kullanıcı oturumu elde edilebilir. Session kullanıldığı durumlarda kullanıcıya gönderilen SessionID değerleride Cookie HTTP başlık bilgisi içerisinde tutularak client-server arasında taşınır.
Sunucu
tarafına istek yapan her kullanıcı için dönen http response içerisinde
Set-Cookie başlık bilgisi ile bir cookie değeri client tarafına
gönderilir ve client browserinda bu bilgi tutulur. Daha sonra sunucu
tarafına yapılan requestlerde bu set edilen Cookie değeri ile gidilir.
Uygulama sunucusu tarafı da bu cookie değerine gore ilgili kullanıcıya
muamele edecektir. Cookie değerinin geçerlilik süreside yine atanan
cookie içerisinde belirtilmektedir.
Kullanıcılar
hedef uygulamlar üzerinde kimlik doğrulama gerçekleştirdikten sonra
kendilerine atanan bu Cookie/SessionID değerini kullanarak uygulamaya
tekrar tekrar kimlik doğrulama gerektirmeksizin bağlanabilir. Durum
böyle olunca kimlik doğrulama gerektirmeden sistemlerde oturum sahibi
olmak isteyen saldırganlar çeşitli yöntemler ile bu değerleri ele
geçirme yoluna gidebilmektedir.
Cookie/SessionID
bilgisi hedef alınarak çeşitli saldırılar gerçekleştirilmektedir.
Session hijacking, session fixation, cookie theft, exposed session data ,
cookie attribute manipulate, sessionid-token randomless açıklığı gibi
bir çok açıklık istismar edilerek kullanıcı adına işlemler
gerçekleştirebilir. Cookie/SessionID bilgisi her ne kadar sunucu
tarafında üretiliyor olsada client tarafında browserda tutulmaktadır.
Buda client tarafında kullanıcılara bir script çalıştırılarak elde
edilebileceğini göstermektedir. Bu aşamada XSS açıklığı sıklıkla
kullanılan bir yöntemdir.
Trace.axd loglama modülü üzerinden elde edilen SessionID değeri:
Elmah.axd loglama modülü üzerinden elde edilen SessionID değeri:
Bu değerlerin doğrudan cookie manager benzeri uygulamalar ile browser üzerinde mevcut değerleri ile değiştirilmesi durumunda bu kullanıcılara ait oturumlar ele geçirilmiş olunacaktır. Bu şekilde doğrudan admin paneller veya kullanıcı oturumları elde edilebilir.
Bu
yazımızda özellikle değinmek istediğimiz açıklık session fixation
açıklığıdır. Client tarafına kimlik doğrulama yapılmadığında gönderilen
SessionID bilgisi , kimlik doğrulama yapıktan sonra değiştirilmiyorsa
sadece bu SessionID değerine yetkilendirme yapılıyorsa bu durumda
session fixation açıklığı söz konusu olmaktadır.Basit bir kaç sosyal
mühendislik methodu ile ilgili açıklık istismar edilebilmektedir.
Saldırganlar
öncelikle oturumunu çalmak istedikleri kullanıcılara çeşitli sosyal
mühendislik yöntemleri kullanarak kendi belirledikleri bir SessionID
değeri ile uygulamayı ziyaret etmelerini sağlarlar. Daha sonra kurbanın
bu uygulama üzerinde kimlik doğrulama işlemini gerçekleştirmesi
durumunda bu sessionID değerini saldırgan bildigi için kendi
browserdinda ilgili hedef uygulama için set ederek kurbanın oturumunu
ele geçirebilir. Saldırganın kendi browserinda zaten bu sessionID değeri
tanımlı olduğundan uygulamayı çağırdığında kurbanın oturumu ile
uygulama üzerinde erişim elde edecektir.
- Kullanıcı web sunucuya bir bağlantı gerçekleştirmektedir
- Sunucu tarafı kendisine yapılan istek karşısında bir session_id değeri ile saldırgana cevap dönmektedir.
- Saldırgan, aldığı session_id değerini kullanarak kurbanın sunucuya login olmasını sağlamaktadır. Bu durum çeşitli sosyal mühendislik yöntemleri kullanılarak kurbanın aşağıdaki gibi bir bağlantıyı ziyaret etmesi ile gerçekleştirilmektedir.
- Kurban http://www.bank.com/login.php?session_id=xyz bağlantısını ziyaret etmektedir.
- Kurban bu bağlantıyı ziyaret ederek hedef web uygulamasına kimlik bilgileri ile giriş yaptığı anda mevzut xyz değerine sahip session_id artık bu kullanıcınının oturumunu ifade eden değer olacaktır.
- Saldırgan kendi browserdina http://www.bank.com/ sayfasını çağırdığında artık kurbanın oturumuna erişimiş olacaktır.
0 yorum:
Yorum Gönderme
Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.