Što je otmica sesije i kako to možete zaustaviti

Ova je priča za početnike i sve koji imaju osnovno razumijevanje kolačića (kolačići sesija), ali koji nisu sigurni kako ih pravilno osigurati. Da biste to učinili, ne morate biti sigurnosni stručnjak. Jednostavno morate razumjeti postupak i tada ćete znati.

Ako nemate pojma o kolačićima ili kako oni funkcioniraju, pročitajte ovaj članak o HTTP kolačićima.

Krenimo na to! Imate nevjerojatnu web aplikaciju koja nudi izvrsnu uslugu za kupce. To znači da ćete imati mehanizam za provjeru autentičnosti da biste korisnika doveli do vaše aplikacije. Znate koliko je važna sigurnost. Tijekom provjere autentičnosti primijenili ste sve vrste sigurnosnih mjera. Sjajno!

Nakon uspješne provjere autentičnosti, morate stvoriti sesiju za tog korisnika. To znači da zapravo stvarate kolačić i šaljete ga natrag u preglednik. Primjerice, u web-aplikaciji Java, po defaultu, naziva se JSESSIONID. Izgleda otprilike ovako:

Korištenjem ovog kolačića samo vaš web poslužitelj može identificirati tko je korisnik i on će u skladu s tim pružiti sadržaj. I ovaj kolačić izgleda sjajno. U kolačiću nema osjetljivih podataka, samo slučajni ID (koji se ne može pogoditi). Dakle, korisnik je siguran! …pravo?

Pa ne baš točno, pogledajmo izbliza.

U ovom su kolačiću dva svojstva: HttpOnly (HTTP) i Secure. Njihove vrijednosti su prazne, što znači da nisu omogućene za ovaj kolačić . Tu se dolazi do toga da više nije sigurno.

Tu dolazi do napada Session Hijacking.

Otmica sesije , ponekad poznata i kao otmica kolačića , iskorištavanje je valjane računalne sesije - koja se ponekad naziva i ključem sesije - radi neovlaštenog pristupa informacijama ili uslugama u računalnom sustavu. - Wikipedija

Dakle, to je čin krađe korisnikova ID-a sesije, kojim oni mogu pristupiti vašoj web aplikaciji kao da su taj kupac.

Je li to moguće? Kako dobiti taj ID sesije koji se nalazi u korisnikovom pregledniku?

Da, moguće je. Razlog tome su dva svojstva kolačića (ili zastavice) koja smo ranije vidjeli ( HttpOnly i Secure ).

HttpOnly Flag

HttpOnlykolačići su nedostupni JavaScript Document.cookieAPI - ju; oni se šalju samo poslužitelju. Na primjer, kolačići koji traju na sesijama na strani poslužitelja ne moraju biti dostupni JavaScriptu, a HttpOnlyzastava treba biti postavljena.

Dakle, jednostavnim riječima, ako ne postavite oznaku httpOnly, vaš će kolačić biti čitljiv s JavaScript koda.

Otvorite bilo koju web stranicu čiji kolačić nema postavljenu oznaku httpOnly. Zatim otvorite Chrome Dev Console, a zatim dodirnite karticu Console (Cmd + Shift + J ili Ctrl + Shift + J). Upišite document.cookiei unesite i vidjet ćete nešto poput ovoga:

Kao što vidite, dobit ćete sve informacije o kolačićima. JavaScript napadač to može jednostavno objaviti na vlastitom poslužitelju za kasniju upotrebu.

Možda se pitate kako oni mogu napisati ovaj kôd u vašoj aplikaciji. Moguće je na nekoliko načina.

Jedan od načina je ubrizgavanje neke nepouzdane JS biblioteke poput zapisnika, pomoćnih programa itd. Pročitajte ovaj članak Skupljam brojeve kreditnih kartica i lozinke s vašeg web mjesta. Evo kako .

Drugi način je korištenje napada na više lokacija skriptiranjem . Nećemo ulaziti u detalje, ali imajte na umu da se to može učiniti.

Pa kako to možemo popraviti?

Kolačić sesije ne mora biti dostupan ni JavaScript klijentu. Potrebno je samo za poslužitelj. Trebali bismo ga učiniti dostupnim samo za poslužitelj. To se može učiniti dodavanjem jedne riječi ( httpOnly ) u zaglavlje http odgovora set_cookie . Kao ovo:

Set-Cookie: JSESSIONID=T8zK7hcII6iNgA; Expires=Wed, 21 May 2018 07:28:00 GMT; HttpOnly

Dodavanjem oznake httpOnly , upućujete preglednik da JavaScript kôd ne smije čitati ovaj kolačić. Za ostalo će se pobrinuti preglednik. Evo kako izgleda nakon dodavanja oznake httpOnly:

Primijetite kvačicu u svojstvu HTTP. To znači da je omogućen httpOnly .

Ovdje možete vidjeti da document.cookie ne vraća naš kolačić sesije. Što znači da ga JS ne može čitati, uključujući bilo kakve vanjske skripte.

To je to - jedan dolje!

Sigurna zastava

Siguran zastava upućuje preglednik da kolačić samo treba vratiti na primjenu preko sigurne veze, to jest, HTTPS vezu.

Dakle, kada se kolačić pošalje pregledniku s zaštićenom zastavicom i kada uputite zahtjev aplikaciji pomoću HTTP-a, preglednik neće priložiti ovaj kolačić u zahtjev. Priložit će ga samo u HTTPS zahtjevu. HTTPS zahtjev bit će šifriran, tako da će se kolačići sigurno slati mrežom u vašu aplikaciju.

Kako netko može pročitati kolačić u HTTP zahtjevu?

To se može postići kada netko (nazvan napadom "Čovjek u sredini" ) nadgleda sav promet u mreži kupaca. Oni mogu vidjeti jasne tekstualne podatke ako je zahtjev u HTTP-u.

Kada se pošalju putem HTTPS-a , svi će se podaci šifrirati iz preglednika i poslati u mrežu. Napadač neće moći dobiti neobrađene podatke koje ste slali. Niti će napadač moći dešifrirati sadržaj. Zbog toga je slanje podataka putem SSL-a sigurno.

Pa kako to možemo popraviti?

Baš kao i zastava httpOnly, samo trebate dodati sigurnu zastavicu u zaglavlje HTTP odgovora set_cookie . Kao ovo:

Set-Cookie: JSESSIONID=T8zK7hcII6iNgA; Expires=Wed, 21 May 2018 07:28:00 GMT; HttpOnly; Secure

U Javi se to može učiniti na nekoliko načina. Ako koristite Servlet 3.0 ili noviji, možete ove postavke u web.xml konfigurirati ovako:

  true true  

Ako ga vaša okolina ne podržava, možete ga dodati ručno. Na primjer, pomoću Servleta možete to učiniti:

Napokon, ovako izgleda kad su postavljene obje zastavice,

Zaključak

Dakle, kada imate posla s kolačićima sesije ili bilo kojim drugim važnim kolačićima, dodajte ove dvije zastavice.

Hvala na čitanju, sretno osiguranje!