Warto zapoznać się z udostępnionym ostatnio przez OWASP dokumentem Session Management Cheat Sheet. Zawarte w nim wskazówki warto porównać z wymaganiami zdefiniowanymi w OWASP Application Security Verification Standard, zwłaszcza z rozdziałem V3 - Session Management Verification Requirements.
Z moich doświadczeń wynika, że obecnie większość aplikacji korzysta z wbudowanego we framework mechanizmu sesji. Jest to zresztą pierwsze z wymagań ASVS. Takie podejście jest o tyle dobre, że w większości przypadków standardowa obsługa sesji jest po prostu wystarczająco dobra. Mimo wszystko pewne problemy wciąż się powtarzają, w szczególności:
- brak zmiany cookie po uwierzytelnieniu (lub "after reauthentication"),
- brak ochrony cookie przy pomocy flag Secure i httpOnly,
- brak ograniczenia ścieżki, do której wysyłane jest cookie,
- brak wygasania sesji po określonym czasie bezczynności,
- brak niszczenia sesji po wylogowaniu,
- przesyłanie identyfikatora sesji bez szyfrowania,
- przesyłanie identyfikatora sesji w query string,
- ujawnianie identyfikatorów sesji (np. w logach),
Mechanizmy związane z uwierzytelnieniem i kontrolą dostępu są po prostu nieskuteczne, jeśli atakujący jest w stanie ustalić lub wykraść prawidłowy identyfikator sesji ofiary.
Dodatkowo warto pamiętać również, że:
- reguły same-origin policy dla rożnych elementów (cookie, DOM, JavaScript, XMLHttpRequest) nieco różnią się między sobą,
- sesja jest (często) dobrem wspólnym - dwie różne aplikacje na jednym serwerze mogą wzajemnie "brudzić" swoje sesje,
I w ramach bonusu: How and why session IDs are reused in ASP.NET.
to założenie, że nie znamy algorytmu generującego identyfikatory. Wówczas taki bruteforce sprowadza się do sprawdzenia wszystkich wartości po kolei 0..2^128-1 (włączenie z 2^64 wartościami, które nigdy nie zostaną wygenerowane przez algorytm).
Można te próbki sprawdzić przy pomocy bardziej zaawansowanego narzędzia (np. stompy). Pewnie to zrobię. Za jakiś czas
Poza tym sam token może zawierać pewne dane, które nie są losowe. Ważne, by ilość losowych bitów była na tyle duża, że zgadywanie nie ma sensu.