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.
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.
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.
- 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 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 sayfasını çağırdığında artık kurbanın oturumuna erişimiş olacaktır.
İlgili açıklığa maruz kalmamak için cookie/session bileşenleri dikkatli kullanılmalı. Kullanıcılar hangi sessionID ile uygulamaya gelirse gelsin kimlik doğrulama gerçekleştirildikten sonra SessionID değeri uniq başka bir değer ile yenilenmelidir.