Session hijacking aneb ukradení session ID
Ukradení SID oprávněnému uživateli se obvykle označuje jako Session stealing nebo častěji Session hijacking. Existuje více cest, jak lze SID ukrást a získat tak třeba přístup k účtu daného uživatele. V příštích několika článcích se pokusím uvést všechny důležité útoky a zejména možnosti, jak se lze Session hijackingu v PHP bránit.
V zájmu úplnosti ale musím nejprve zmínit několik nudných výchozích předpokladů, ze kterých pak budu vycházet. Navzdory titulku se tedy dnes k Session hijackingu vlastně vůbec nedostaneme.
Kudy se nám SID všude toulá
Existují v zásadě tři způsoby, jak si mezi sebou mohou klient a server předávat SID:
- Parametr v URL
- Server při generování zdrojového kódu stránky přidá do každého odkazu parametr s hodnotou SID. Když uživatel na takový odkaz klikne, předává se SID v rámci otevírané URL. Od klienta k serveru tedy putuje SID v HTTP hlavičce dotazu v rámci request-line, v opačném směru pak v těle HTTP odpovědi.
- Skryté formulářové pole
- Jedná se o variaci na předchozí případ v okamžiku, kdy místo
kliknutí na odkaz uživatel odesílá nějaký formulář. Pak je předání
SID nutné vyřešit
hidden
formulářovým prvkem. Co se týká HTTP komunikace, tak jediný rozdíl oproti předchozímu bodu je při odeslání formuláře metodou POST, kdy od klienta k serveru putuje SID v těle dotazu namísto hlavičkové request-line. - Cookies
- Server si u klienta uloží cookie a ten ji posílá zpátky s každým
dalším dotazem. V obou směrech tedy putuje SID v HTTP hlavičkách.
U dotazu v hlavičce
Cookie
, u odpovědi pak v hlavičceSet-Cookie
.
Znalost těchto tří možností je důležitá pro další pochopení mnoha rizik, které na SID po cestě číhají. Obecně lze ale předeslat, že na předávání pomocí URL lze úspěšně použít drtivou většinu útoků, zatímco Cookies jsou proti mnohým z nich relativně odolné.
Kde se nám SID všude válí
To ale není vše. Během celé práce uživatele i dlouho po ní je SID trvale uloženo na různých místech u klienta, na serveru i po cestě. Odtud může útočník platné SID získat, aniž by musel vysloveně odchytávat právě probíhající komunikaci.
Jednotlivá místa jsou vždy odvislá od konkrétního způsobu předávání SID mezi serverem a klientem.
U klienta je to zejména adresní řádek, historie prohlížeče, bookmarky, úložiště cookies nebo cache. Na straně serveru je to hlavně operační paměť a úložiště sessions. Po cestě se pak mohou různé části komunikace ukládat na různých routerech a proxy serverech do jejich logů, cache apod.
Seriál o bezpečnosti sessions
- Nenechte si uhodnout Session ID
- Session hijacking aneb ukradení SID (právě čtete)
- Sidejacking aneb nasloucháme v síti
- Session ID do URL nepatří
- Předávání SID pomocí cookies
- Bráníme se zneužití ukradeného SID
- Session fixation aneb nenechte si podstrčit SID
Tak zahraty uz jsme.. tak sup sem s tema dilama, ktery nas zajimaji vic ;)
hmm, no uvidime ake informacie sa tu objavia, budem serial sledovat aj nadalej. spomenul si aj nieco, co si mnohi programatori malokedy uvedomia a to ze su session rozhadzane po okoli. napriklad casto si neuvedomuju programatori aj to, ze session je mozne ziskat velmi pekne z refereru, ak mame link na danom webe a nie je session dostatocne dobre chranena.
Díky za inspiraci