Přeskočit na hlavní obsah

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čce Set-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

  1. Nenechte si uhodnout Session ID
  2. Session hijacking aneb ukradení SID (právě čtete)
  3. Sidejacking aneb nasloucháme v síti
  4. Session ID do URL nepatří
  5. Předávání SID pomocí cookies
  6. Bráníme se zneužití ukradeného SID
  7. Session fixation aneb nenechte si podstrčit SID

Komentáře

  1. Tak zahraty uz jsme.. tak sup sem s tema dilama, ktery nas zajimaji vic ;)

  2. 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.

  3. Díky za inspiraci ;-)