tabnabbing

Šta su tabnabbing i reverse tabnabbing i kako da ih sprečite

Tabnabbing i njegova varijanta reverse tabnabbing, može ozbiljno ugroziti sigurnost korisnika. U ovom tekstu, objasnićemo šta su tabnabbing i reverse tabnabbing, kako se zaštititi od ovih pretnji kao web developer i kako da podesite svoj kod kako biste sprečili zloupotrebu tabnabbing-a.

Šta je Tabnabbing?

Tabnabbing je oblik napada na internet korisnike koji zloupotrebljava njihovu naviku da otvaraju više tabova u web browseru. Osnovna ideja tabnabbing-a je da napadači koriste nepažnju korisnika i preusmeravaju ih na zlonamerne web sajtove tako što u pozadini menjaju sadržaj tabova.

Napadači obično koriste JavaScript kako bi pratili promenu fokusa između tabova. Kada korisnik otvori novi tab i prebaci se na njega, JavaScript može da promeni sadržaj prethodnog taba na zlonamerni web sajt. To se često radi tako da se kopira izgled i sadržaj legitimnog sajta, na primer, korisnik može biti preusmeren na lažnu prijavu na društvenoj mreži ili bankovni sajt.

Ako ste web developer, sada se verovatno pitate kako da sprečite da se ovako nešto dogodi korisnicima na sajtovima koje ste vi napravili. Srećom, to je moguće uraditi pomoću nekoliko jednostavnih pravila. U ovom tekstu ćemo objasniti kako da sprečite tabnabbing na sajtovima koje vi radite za svoje klijente.

Tabnabbing i reverse tabnabbing

Razlika između tabnabbinga i reverse tabnabbinga je u tome kako se napadi izvode i koja strana izvodi napad. Ali pre toga da vidimo gde leži ‘’uzrok’’ ovog problema.

Siva zona (tzv. rupa) u politici istog porekla (Same-Origin Policy) predstavlja ograničenja u načinu na koji web sajtovi ostvaruju interakciju zbog bezbednosnih razloga. Ovo ograničenje je dizajnirano da spreči zlonamerne sajtove da pristupe podacima drugih sajtova i štiti privatnost korisnika. Međutim, postoji određena situacija u kojoj se ova politika može iskoristiti u napadima kao što je tabnabbing.

Ova rupa omogućava zlonamernom sajtu (sajtu A) da prevari legitimni sajt (sajt B) tako što će promeniti sadržaj taba koji prikazuje sajt B. To je suština tabnabbing napada.

Konkretno, tabnabbing radi na sledeći način:

  • Korisnik otvara legitimni sajt B u jednom tabu.
  • Zlonamerni sajt A otvara novi tab koji prikazuje sajt B.
  • Nakon nekog vremena, zlonamerni sajt A menja sadržaj taba sa sajta B i prikazuje lažnu stranicu za prijavljivanje ili neku drugu prevaru.

Korisnik koji je prvobitno posetio legitimni sajt B sada može biti namerno naveden da unese svoje podatke na lažnoj stranici koju prikazuje zlonamerni sajt A. Ovo je način na koji tabnabbing koristi sivu zonu u politici istog porekla da bi prevario korisnike.

Za razliku od tabnabbing-a, reverse tabnabbing je napad na sajt koji korisnik trenutno posećuje, a ne na korisnika. To znači da zlonamerni sajt pokušava da manipuliše sajtovima koje korisnik trenutno pregleda.

U ovom slučaju, zlonamerni sajt pokušava da iskoristi „rupu“ u politici istog porekla (Same-Origin Policy) tako što će otvoriti novi tab ka legitimnom sajtu, a zatim pokušati da promeni sadržaj tog taba na zlonamerni sajt. Cilj ovog napada je da prevari korisnike tako što će promeniti sadržaj taba sa legitimnog sajta i na primer prikazati lažnu stranicu za prijavljivanje.

U osnovi, razlika je u tome da je kod tabnabbinga korisnik žrtva preusmeravanja sa legitimnog sajta na zlonamerni, dok je kod reverse tabnabbinga legitimni sajt taj koji je žrtva preusmeravanja od strane zlonamernog sajta. Oba tipa napada koriste kako bi postigli svoje ciljeve, ali se razlikuju u tome ko je primarni subjekt napada.

Kako da sprečite tabnabbing

Verovatno već znate da su vrednosti kao što su `noopener`, `noreferrer` i `nofollow` vezane za `rel` atribut kod  `<a>` oznaka. Obično ove vrednosti vidimo zajedno sa `target=_blank`

Pre nego što se nastavimo, hajde da vidimo kakve su sigurnosne implikacije kada postavite `target="_blank"' na oznaku sa linkom na vašem sajtu.

<a href="https://google.com" target="_blank">Google</a>

Kada napravite hiperlink na ovaj način na svom sajtu bez `rel` atributa, klik na njega će otvoriti google.com u novom tabu. Međutim, postoji nekoliko sigurnosnih rizika u tome. Postoji svojstvo zvano `window.opener`, koje je postavljeno na prozor taba koji je otvoren, u ovom slučaju, vaš sajt.

Na primer, recimo da imate link sa `target="_blank"`, ali bez `rel` atributa, tada će svojstvo `window.opener` u otvorenom tabu (novom tabu) automatski biti postavljeno na prozor otvorenog taba.

Phishing napadi često se izvode na ovaj način. Pošto novi tab sada ima pristup prozoru prethodnog taba, novi tab može postaviti lokaciju starog taba koristeći

`window.opener.location.href 'link-za-neki-lazni-sajt-koji-izgleda-skoro-isti-kao-originalni-sajt'`, 

i može prikazati stranicu za prijavljivanje na tom lažnom sajtu, recimo sa porukom „Odjavljeni ste, molimo vas da ponovo unesete svoje podatke za prijavljivanje“

Ako korisnik ne proveri da se promenilo ime domena i unese podatke za prijavljivanje, napadač može da dobije pristup korisničkim podacima za sajt. Lažni sajt vas takođe može naterati da preuzmete zlonamerni softver na svoj uređaj. 

Rešenje za ovo je veoma jednostavno. Samo morate postaviti `rel` atribut vaše oznake sa linkom na `noopener` kada postoji `target="_blank"`. Ovo znači da, kada kliknete na link, otvara se stranica u novom tabu, i vrednost `window.opener` u novom tabu postavlja se na `null`. Sada novi link nema pristup tabu iz kojeg je otvoren ovaj novi link.

Pogledajmo detaljnije šta svaka od ovih vrednosti znači i takođe koje vrednosti treba koristiti na oznakama sa linkovima na vašem sajtu.

`noopener`: Kada postavite ovu vrednost zajedno sa `target=_blank`, upućujete browser da otvori link u novom tabu, ali ne dajete pristup stranici koja ga je otvorila (`window.opener = null` u novom tabu).

Nećete često naići na situaciju u kojoj biste ikada želeli da nekom drugom spoljnom web sajtu dozvolite pristup prozoru vašeg web sajta. Zato je uvek najbolje imati vrednost noopener u rel atributu vašeg anchor tag-a, kad god postavite target na _blank.

<!-- Link u vašem sajtu bez noopener -->
<a href="neki-spoljni-link" target="_blank">neki spoljni web sajt</a>
<!-- u-eksternom-sajtu -->
<script>
// "window.opener" U ovom slučaju će biti postavljeno na "null". Dakle, ako spoljni web sajt uradi nešto slično sledećem:
window.opener.location.href = 'link-do-nekog-phishingweb-sajta-koji-izgleda-skoro-isti-kao-vaš-web-sajt'
</script>

Da biste sprečili ovakav napad, samo treba da dodate rel=noopener na vaš link.

<a href="neki-spoljni-link" rel="noopener" target="_blank">neki spoljni web sajt</a>
<!-- u-eksternom-sajtu -->
<script>
// "window.opener" U ovom slučaju će biti postavljeno na "null". Dakle, ako spoljni web sajt uradi nešto slično sledećem:
window.opener.location.href = 'link-do-nekog-phishing web-sajta-koji-izgleda-skoro-isti-kao-vaš-web-sajt'
// To će baciti grešku TypeError jer "window.opener" je "null"
</script>

`noreferrer` je veoma sličan svojoj funkciji kao `noopener`. Ovo takođe sprečava tek otvoreni sajt da manipuliše prozorom otvaranja taba (`window.opener` će biti postavljen na `null`). 

Dodatno svojstvo koju `noreferrer` ima u odnosu na `noopener` je da sakriva informacije o referenci kada se klikne na link. Na primer, ako imate link ka svom sajtu sa `noreferrer` i `target="_blank"`, kada korisnik klikne na taj link, biće preusmeren na vaš sajt, ali vaš sajt neće imati pristup informacijama odakle korisnici dolaze. 

Često ćete videti anchor tag sa i noopener i noreferrer. Pošto noreferrer takođe radi ono što i noopener, nema razloga da imate i jedan i drugi atribut. Ovo je uglavnom radi podrške starijim browser-ima. Neki od starijih browsera jednostavno ne podržavaju vrednost noopener, pa kad želite da koristite noopener, često ćete videti da drugi koriste i vrednost noreferrer uz nju.

<!-- Kada ne želite da pružite pristup informacijama o izvoru sa spoljnog web sajta. -->
<a href="neki-spoljni-link" rel="noopener noreferrer" target="_blank">neki spoljni web sajt</a>

Nadamo se da je sada jasnije šta `noreferrer` znači i kada je dobro da ga koristite, a kada ne. Ako ne želite da prenesete bilo kakve informacije o referenci eksternim linkovima, razmislite o korišćenju vrednosti `noreferrer`, inače je u suprotnom ne koristite.

`nofollow`: Da biste imali dobro podešene SEO elemente na vašem sajtu, ključno je da imate povratne linkove (tzv backlink) koji vode vašem sajtu. Nisu svi linkovi iste vrednosti. Neki će biti više vrednovani od drugih. Search engine-i koriste nešto što se zove `Page Ranking` algoritam kako bi odredili vrednost linka ili sajta.

Kada linkujete na drugi sajt sa svog sajta, vi podržavate tu drugu stranicu, pa će vrednost te druge stranice biti povećana u skladu sa vrednošću vašeg sajta. Slično tome, vrednost vašeg sajta određena je povratnim linkovima koji vode ka vašem sajtu, i ponovo, sve vrednosti svih povratnih linkova nisu iste. 

Kada postavite `nofollow` na link na svom sajtu, govorite Google-u da ne podržavate taj link i takođe mu govorite da ne prenosi vrednost Page Rank-a vašeg sajta.

Obično ćete koristiti `nofollow` kada linkujete interne stranice ili kada linkujete manje vredan sajt sa svog sajta, koji u ovom slučauj ima bolju vrednost.

Cross-Origin Opener Policy

Implementiranje Cross-Origin Opener Policy (COOP) je efikasan način da se spreče tabnabbing napadi. COOP je relativno nova bezbednosna karakteristika pregledača koja omogućava izolaciju dokumenata na web sajtu kako bi se otežalo zlonamernim sajtovima da pristupe prozoru sajta. Primenom određenog HTTP odgovora sa web servera, pregledači koji podržavaju COOP će izolovati vaš dokument i sprečiti potencijalne napadače da pristupe vašem prozoru.

Da biste implementirali Cross-Origin Opener Policy, koristite HTTP odgovor sa odgovarajućim zaglavljem:

Cross-Origin-Opener-Policy: same-origin

Ovo zaglavlje govori pregledaču da izoluje vaš dokument tako da se prozori otvoreni sa vašeg sajta mogu povezati samo sa drugim prozorima sa istog porekla (same-origin). To otežava zlonamernim sajtovima da manipulišu vašim prozorima i izvode tabnabbing napade.

Implementiranjem COOP-a, povećavate bezbednost vašeg sajta i štitite korisnike od potencijalnih napada. Važno je da pravilno konfigurišete i podržite ovu bezbednosnu karakteristiku kako biste obezbedili odgovarajuću zaštitu od tabnabbing-a.

Takođe, da biste sprečili tabnabbing napade sa web sajtova učitanih u iframe-ovima, možete upotrebiti atribut "sandbox" kako biste izolovali iframe. Ovaj atribut omogućava kontrolisanje i ograničavanje akcija koje se mogu izvoditi unutar iframe-a. Korišćenje atributa "sandbox" sa odgovarajućim dozvolama može pomoći u zaštiti od tabnabbing napada.

Na primer, koristeći HTML oznaku za iframe, možete postaviti "sandbox" atribut sa dozvolama kao što su "allow-scripts" i "allow-same-origin", kako biste ograničili izvršavanje skripti i pristup samo iz istog porekla:

<iframe sandbox="allow-scripts allow-same-origin" 
src="https://www.nekisajt.rs"></iframe>

Ovime se ograničava izvršavanje skripti unutar iframe-a i ograničava pristup samo sajtovima istog porekla. To otežava zlonamernim sajtovima da manipulišu sadržajem iframe-a i izvode tabnabbing napade.

Pravilno korišćenje "sandbox" atributa može značajno povećati bezbednost vašeg sajta i zaštititi korisnike od potencijalnih pretnji.

Zaključak

Tabnabbing napadi, iako često zanemareni, mogu predstavljati značajnu pretnju, posebno kada se koriste kao deo ciljanih phishing napada. Međutim, razumevanjem mehanizama ovih napada i primenom preventivnih mera detaljno opisanih u ovom tekstu, možete efikasno zaštititi svoje web aplikacije i korisnike.

Bez komentara

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *