Broken Authentication and Session Management

İçindekiler tablosu yükleniyor...

Genel bilgiler

  • OWASP Top 10 Risks listesinde 2. sırada
  • Genel itibariyle autorized kullanıcının session'ınını çalmak üzerine bir açık
  • HTTP sessionless bir protokol ama session ihtiyaçları nedeniyle framework'ler ve browser'lar cookie denen bilgileri tutuyor. cookie bilgisi üzerinden web server kullanıcıyı tanıyor.
  • Biz ASP.NET_SessionId cookie'sini kullanıyoruz. Cookie'ler session yönetimi açısından daha güvenli olduğu söyleniyor. Mesela Cookieless mod'un request URL üzerinden gitmesi Session Fixation denilen atağa karşı daha açık olması anlamına geliyor.

Koruma yöntemleri

  • Cookieless session'ın kapanması
  • Authentication'ın bilinen, güvenilir yöntemlerle yapılması
  • IP check
  • Password recovery, sign up işlemlerinin güvenliğinin artırılması
  • SSL kullanımı
  • Session expire
  • Cookie secure, httpOnly

Şifre işlemleri güvenliği

  • Şifre oluşturmada email confirmation/activation kullanılması, değiştirme işlemlerinde eski şifrenin de sorulması
  • Secret question değiştirme işleminde şifre sorulması
  • Bu bilgilerin loglanması

SSL kullanımı

  • tüm sitede SSL'in aktif olması
  • http -> https redirection

Session Expire

  • Mümkün olduğunca session expire süresinin kısa olması sağlanmalı

Cookie secure, httpOnly

  • Site içinde SSL kullanılsa bile bazı resourse'larda kullanılması unutulmuş olabilir
1<img src="http://mysite.com/images/icon.png" />
  • Bu gibi durumlarda desteklenen browser'ların cookie'leri sadece secure transferlerde göndermesi için header'a secure flag'i eklenir
  • Javascript ataklarından (mesela XSS) korunmak veya bilginin 3. parti yerlere sızmasını önlemek adına, cookielerin client tarafında çalıştırılması yine httpOnly flag'i sağlanır.
  • Her cookie için ayrı ayrı setlenebilir veya web.config üzerinden genel bir ayar yapılabilir
1HttpCookie myCookie = new HttpCookie("myCookie");
2myCookie.HttpOnly = true;
3Response.AppendCookie(myCookie);
1<httpCookies httpOnlyCookies="true" >
  • Setlendiği zaman artık bu cookie'nin client side tarafından çalıştırılamayacağını bilmemiz gerekir.
  • Aynı şekilde secure flag'i de şifresiz HTTP üzerinden gerçekleşen bağlantılarda cookie'yi göndermeyecektir.
1HttpCookie myCookie = new HttpCookie("myCookie");
2myCookie.Secure = true;
3Response.AppendCookie(myCookie);
1<httpCookies requireSSL="true" />

Kaynaklar


Published: November 14 2015

blog comments powered by Disqus