Slijede razlike između dviju inačica stranice.
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena | ||
racfor_wiki:mrezna_forenzika:oauth_2_0_protokol [2020/01/10 06:14] abijelic [5.6 Način sa osvježavajućim tokenom] |
racfor_wiki:mrezna_forenzika:oauth_2_0_protokol [2024/12/05 12:24] (trenutno) |
||
---|---|---|---|
Redak 19: | Redak 19: | ||
===== Uvod ===== | ===== Uvod ===== | ||
+ | |||
+ | OAuth je protokol za autorizaciju koji omogućava mnogim aplikacijama prijavu u njih bez potreba registracije. Na tržištu postoje mnoge aplikacije koje koriste OAuth protokol za autorizaciju na google-ov, facebook-ov autorizacijski server. Zato se ovaj seminarski rad bavi proučavanjem tog protokola i proučavanjem njegove sigurnosti pregledom napada na koje nije imun. Prvo će biti uvod o OAuth, a potom će se obraditi napadi. | ||
Redak 49: | Redak 51: | ||
Objašnjenje koraka: | Objašnjenje koraka: | ||
- | - Klijent traži autorizaciju od vlasnika resursa. Autorizacijski zahtjev može se poslati direktno vlasniku resursa kako je prikazano na slici 4.1 ili ponajprije indirektno | + | - Klijent traži autorizaciju od vlasnika resursa. Autorizacijski zahtjev može se poslati direktno vlasniku resursa kako je prikazano na slici 4.1 ili autorizacijskom serveru kao posredniku. |
- | - Klijent prima odobrenje za autorizaciju, koje je prikazano kao uvjerenje od vlasnika resursa. To uvjerenje | + | - Klijent prima odobrenje za autorizaciju. |
- | - Klijent zahtjeva pristupni token autoriziran s autorizacijskog poslužitelja. Zahtjev sadrži i autorizacijski tip potpore. | + | - Klijent zahtjeva pristupni token autoriziran s autorizacijskog poslužitelja. |
- Autorizacijski poslužitelj autorizira klijenta i provjerava autorizacijski tip potpore. Ako je sve ispravno vraća pristupni token. | - Autorizacijski poslužitelj autorizira klijenta i provjerava autorizacijski tip potpore. Ako je sve ispravno vraća pristupni token. | ||
- Klijent zahtjeva zaštićene resurse od resursnog poslužitelja i autorizira zahtjev dodavanjem pristupnog tokena. | - Klijent zahtjeva zaštićene resurse od resursnog poslužitelja i autorizira zahtjev dodavanjem pristupnog tokena. | ||
- Resursni poslužitelj provjerava pristupni token. Ako je token ispravan za resurse koji se traže, onda vraća te resurse. | - Resursni poslužitelj provjerava pristupni token. Ako je token ispravan za resurse koji se traže, onda vraća te resurse. | ||
- | - Korištenje autorizacijskog poslužitelja kao posrednika za dobivanje potpornog tipa (opisano u 1. i 2. koraku na slici 2.1) od vlasnika resursa je preferirana metoda. | + | |
+ | Korištenje autorizacijskog poslužitelja kao posrednika za dobivanje potpornog tipa (opisano u 1. i 2. koraku na slici 2.1) od vlasnika resursa je preferirana metoda. | ||
{{ https:// | {{ https:// | ||
- | Slika 4.1 Prikaz koraka protokola OAuth za autorizaciju | + | Slika 4.1 Prikaz koraka protokola OAuth za autorizaciju |
Redak 81: | Redak 84: | ||
- <font 12.0pt/ | - <font 12.0pt/ | ||
- | {{https:// | + | {{https:// |
- | <font 12.0pt/ | + | <font 12.0pt/ |
Redak 106: | Redak 109: | ||
{{https:// | {{https:// | ||
- | <font 12.0pt/ | + | <font 12.0pt/ |
Redak 123: | Redak 126: | ||
{{https:// | {{https:// | ||
- | <font 12.0pt/ | + | <font 12.0pt/ |
Redak 139: | Redak 142: | ||
{{https:// | {{https:// | ||
- | <font 12.0pt/ | + | <font 12.0pt/ |
Redak 155: | Redak 158: | ||
<font 12pt/ | <font 12pt/ | ||
- | <font 12pt/Arial, | + | {{https://docs.wso2.com/ |
<font 12pt/ | <font 12pt/ | ||
Redak 230: | Redak 233: | ||
3. Klijent u korisničkoj sesiji pohranjuje da je korisnik odabrao " | 3. Klijent u korisničkoj sesiji pohranjuje da je korisnik odabrao " | ||
- | ==== 6.4 Napad preko povijesti pretraživača ==== | ||
- | Napad preko povijesti pretraživača (//engl. Attacks through the Browser History//) se može iskoristiti onda kada se pristupni token javlja u parametru GET zahtjeva. Primjer takve putanje je: " | ||
- | Mjera opreza je da se token ne stavlja u parametar get zahtjeva već da se stavlja u parametar post zahtjeva. Ili jednostavno koristiti način autorizacije preko autorizacijskog koda. | ||
- | ==== 6.5 Napad umetanja pristupnog tokena | + | ===== Zaključak ===== |
- | Napad u kojem napadač pokušava iskoristiti ukradeni token od nekog korisnika | + | Kroz seminarski rad prošlo je se kroz protokol OAuth. OAuth u svojoj dokumentaciji ima 6 načina autorizacije. Neki načini nisu sigurni, kao npr. Implicitni i način s lozinkom. Ostali načini, kao npr. Način s autorizacijskim kodom, način s klijentskim akreditivom, |
- | Napad se sastoji od toga da napadač | + | OAuth dokumentacija predstavlja 10 napada koji su najčešće vezani uz način autorizacije s autorizacijskim kodom i nesigurnog implicitnog načina. OAuth je sigurniji što se više parametara koristi u komunikaciji poslužitelja. Ali postoje načini kada napadač |
- | Nemoguće je uočiti ovu vrstu napada. Ali za zaštitu potrebno je napraviti mjere opreza kao i u poglavlju 5.2.4. | ||
+ | ===== Literatura ===== | ||
- | ==== 6.6 Napad curenja podataka u preporučenom zaglavlju ==== | + | [1] OAuth 2.0, [[https:// |
- | Curenje podataka u preporučenom zaglavlju može se dogoditi ne namjerno kako na klijentu tako i na autorizacijskom serveru. Uzročnik može biti i loša implementacija pretraživača. | + | <font 12.0pt/ |
- | Kako bi propustio klijent potrebno je da stranica nakon registracije sadrži vezu do neke druge stranice koju kontrolira napadač, a da korisnik kline na tu vezu ili da stranica nakon prijave sadrži sadržaj neke treće strane. | + | [3] Client Credentials Grant, [[https:// |
- | + | ||
- | Čim preglednik prijeđe na stranicu napadača ili učita sadržaj treće strane, napadač može dobit odgovor autorizacije iz čega može izvući token. | + | |
- | + | ||
- | Na sličan način napadač može iskoristiti i autorizacijski server. Na autorizacijskom serveru može dobiti pristupni token, autorizacijski kod, ali i stanje autorizacijskog servera. | + | |
- | + | ||
- | Dobivanjem tokena napadač ima pristup kao legitimni korisnik. Ako napadač izvuče i stanje autorizacijskog servera, njegov napad će probiti CSRF zaštitu. | + | |
- | + | ||
- | Za zaštitu je najbolje izbjegavati korištenje stranica nakon autorizacije koje sadrže neke linkove ili sadržaje trećih strana. | + | |
- | + | ||
- | Prva moguća mjera je korištenje povjerljivog klijenta, tj. Klijenta koji za dobivanje pristupni token, osim koda treba predati i tajni niz znakova. | + | |
- | + | ||
- | Druga mjera opreza je da se s istim kodom ne može 2 puta dobitni pristupni token. Ako se dogodi takva situacija onda se treba odbiti drugi zahtjev. Naravno, odbijanje ne ublažava posljedice ako je napadačev zahtjev prvi stigao. Ali server bi se trebao držati pravila u tom slučaju da drugi zahtjev povuče sve pristupne tokene koji su nastali posljedicom tog autorizacijskog koda. | + | |
- | + | ||
- | Treća mjera je korištenje parametra „state“. Problem je ako taj parametar procuri napadaču. | + | |
- | + | ||
- | Način autorizacije preko autorizacijskog koda je puno sigurnija od ostalih načina, pa je i samo korištenje tog načina jedna mjera opreza za ovakav napad. | + | |
- | + | ||
- | + | ||
- | ==== 6.7 Krivotvorenje zahtjeva na neku drugu stranicu ==== | + | |
- | + | ||
- | Napadač može pokušati napraviti preusmjeravanje klijenta na žrtvinom uređaju, tako da žrtvin uređaj pristupi vlastitim resursima, naravno pod kontrolom napadača. | + | |
- | + | ||
- | Kako bi se izbjegao ovakav napad dobro je koristiti CSRF token koji je na korisničkom agentu i koji sadrži parametar „state“. Inače PKCE pruža CSRF zaštitu. | + | |
- | + | ||
- | Ali klijent treba biti siguran pruža li autorizacijski server PKCE kako bi ga koristio. Ako ne pruža, bitno je koristiti parametar „state“. | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== | + | |
- | + | ||
- | + | ||
- | ==== 6.8 Napad na osvježavajući token ==== | + | |
- | + | ||
- | Osvježivanje tokena prikladan je i neugodan način za dobivanje novih pristupnih tokena nakon isteka starih pristupnih tokena. Osvježeni tokeni također povećavaju sigurnost OAuth-a jer dopuštaju autoru autorizacije da kratkim vijekom trajanja i smanjenim opsegom izdaje pristupne tokene i tako smanjuje potencijalni utjecaj curenja pristupnog tokena. | + | |
- | + | ||
- | Tokeni za osvježavanje atraktivna su meta napadača jer daju svu ovlast vlasnika osvježavajućeg tokena napadaču. Ako napadač uspije ukrasti i uspješno upotrijebiti token za osvježavanje, | + | |
- | + | ||
- | OAuth već pruža snažnu osnovnu zaštitu. To postiže zahtjevom povjerljivosti osvježavajućih tokena u prijenosu i skladištenju. Kod prijenosa se može koristiti TLS zaštićena veza između autorizacijskog poslužitelja i klijenta. Kod skladištenja autorizacijski poslužitelj je zadužen za održavanje i provjeru vezanja s klijentom, a klijent je zadužen za skladištenje osvježavajućeg tokena. Osim TLS-a autorizacijski poslužitelj bi trebao i identificirati klijenta. A ključna stvar kod izrade osvježavajućih tokena je ne mogućnost generiranja, | + | |
- | + | ||
- | OAuth također postavlja temelje za daljnje (specifične za implementaciju) sigurnosne mjere, kao što je stvaranje i opoziv osvježavajućeg tokena. Osim toga i obnavljanje rotacije tokena definiranjem odgovarajućih kodova pogreške i ponašanja odgovora. | + | |
- | + | ||
- | Poslužitelji autorizacije moraju odrediti na temelju njihove procjene rizika da li za određeni klijent izdati osvježavajući token. Ako poslužitelj autorizacije odluči ne izdati osvježavajući token, klijent može osvježiti pristupne tokene pomoću drugih način autorizacije, | + | |
- | + | ||
- | Ako su osvježavajući tokeni izdani, oni se moraju vezati za poslužitelje resursa jer ih je odobrio vlasnik resursa. Na ovaj se način sprečava eskalacija privilegija od strane zakonitog klijenta i umanjuje utjecaj opoziva osvježavajućih tokena. | + | |
- | + | ||
- | Poslužitelji autorizacije trebaju automatski opozvati osvježavajuće tokene u slučaju nekih sigurnosnog događaja. Npr. Promjena lozinke ili odjava na autorizacijskom poslužitelju su takvi događaji. | + | |
- | + | ||
- | Tokeni za osvježavanje trebali bi isteći ako klijent nije aktivan neko vrijeme, tj. Token za osvježavanje ima neko vrijeme valjanosti za dobivanje novih pristupnih tokena. Vrijeme isteka ovisi o autoru autorizacije. To može biti globalna vrijednost ili određeno na temelju klijentske politike ili odobrenja povezanog s tokenom za osvježavanje (i njegovom osjetljivošću). | + | |
- | + | ||
- | + | ||
- | ===== Zaključak ===== | + | |
- | + | ||
- | Kroz seminarski rad prošlo je se kroz protokol OAuth. OAuth u svojoj dokumentaciji ima 6 načina autorizacije. Neki načini nisu sigurni, kao npr. Implicitni i način s lozinkom. Ostali načini, kao npr. Način s autorizacijskim kodom, način s klijentskim akreditivom, | + | |
- | + | ||
- | OAuth dokumentacija predstavlja 10 napada koji su najčešće vezani uz način autorizacije s autorizacijskim kodom i nesigurnog implicitnog načina. OAuth je sigurniji što se više parametara koristi u komunikaciji poslužitelja. Ali postoje načini kada napadač ipak može zlonamjerno iskoristiti aplikaciju. U slučaju krađe pristupnog tokena OAuth protokol ne pruža neku mjeru zaštite, već samo preventivno kako se takav slučaj ne bi dogodio. | + | |
+ | [4] Resource owner password credentials grant, [[https:// | ||
- | ===== Sources ===== | + | [5] Mitchell Anicas, An intorduction of OAuth 2, [[https:// |