Kas yra clickjacking ir kaip apsisaugoti?

Autorius: Paskelbta

Trumpai: Clickjacking, dar vadinama UI redress attack, – tai ataka, kai naudotojas apgaule paskatinamas spustelėti ne tą elementą, kurį mato. Pavyzdžiui, užpuolikas gali virš iš pažiūros nekalto žaidimo mygtuko uždėti nematomą puslapį su kitu mygtuku. Svetainės savininkas tokių atakų riziką pirmiausia mažina kontroliuodamas, kas gali įterpti jo puslapius, o naudotojas – atsargiai vertindamas įtartinus raginimus ką nors spustelėti.

Kaip veikia paspaudimų perėmimas

Naršyklė gali rodyti vieną puslapį kitame naudodama elementą iframe, t. y. įterptąjį rėmelį. Tai įprasta funkcija, naudojama, pavyzdžiui, vaizdo įrašams ar žemėlapiams rodyti. Per clickjacking ataką nusikaltėlis ja pasinaudoja, kad po specialiai parengta sąsaja arba virš jos paslėptų tikrąjį paspaudimo taikinį.

Tipinis scenarijus atrodo taip: naudotojas atidaro užpuoliko valdomą puslapį, o šis rėmelyje įkelia kitą svetainę. Rėmelis yra permatomas arba atitinkamai apkirptas ir išdėstytas taip, kad jame esantis mygtukas atsidurtų tiksliai toje vietoje, kur naudotojas ketina spustelėti. Naudotojas mato vieną komandą, tačiau naršyklė užregistruoja sąveiką su kitu elementu.

Užpuolikui nebūtina perskaityti svetimo puslapio turinio. Naršyklės taikomi prieigos tarp skirtingų svetainių apribojimai savaime neužkerta kelio įterpti puslapį ir nukreipti į jį paspaudimus. Todėl apsaugoti duomenis nuo nuskaitymo ir neleisti įterpti sąsajos yra dvi atskiros užduotys.

Pavyzdys: prizas, kurio mygtukas atlieka kitą veiksmą

Įsivaizduokite puslapį su paprastu žaidimu ir mygtuku „Atsiimti prizą“. Virš šio mygtuko yra nematomas rėmelis su kitos svetainės valdymo skydeliu. Jei svetainė leidžia ją įterpti, o naudotojo sesija tame rėmelyje veikia, paspaudimas gali tekti mygtukui, kuris atlieka operaciją jo paskyroje.

Tai nereiškia, kad kiekvienas apsilankymas kenkėjiškame puslapyje iškart leidžia perimti paskyrą. Atakos sėkmė, be kita ko, priklauso nuo tikslinės svetainės apsaugos, nuo to, ar rėmelyje prieinama prisijungusio naudotojo sesija, ir nuo to, ar operacijai reikia papildomo patvirtinimo. Slapukų nuostatos ir naršyklės apribojimai gali apsunkinti tokią ataką, tačiau nepakeičia apsaugos nuo įterpimo.

Galimi padariniai – netyčia pakeistos nuostatos, atliktas veiksmas svetainėje ar patvirtinta operacija. Papildomas patvirtinimas, reikalaujantis sąmoningo naudotojo veiksmo, mažina riziką, tačiau vien dar vienas mygtukas apsaugos negarantuoja: užpuolikas gali mėginti paskatinti auką atlikti kelis paspaudimus iš eilės.

Kuo clickjacking skiriasi nuo duomenų viliojimo ir CSRF

Viliodamas duomenis sukčius paprastai apsimeta patikimu subjektu, kad išgautų duomenis arba paskatintų atlikti tam tikrą veiksmą. Per clickjacking ataką naudotojas gali spustelėti tikros svetainės elementą, tik paslėptą klaidinančioje aplinkoje. Abu būdai gali būti naudojami kartu, tačiau apgaulės mechanizmas skiriasi.

CSRF – nepageidaujamos užklausos svetainei išsiuntimas pasinaudojant prisijungusio naudotojo teisėmis be jo sąmoningo sutikimo. Clickjacking atakos esmė – perimti sąveiką su sąsaja. Nuo CSRF saugančio žetono nepakanka apsisaugoti nuo clickjacking, nes spustelėjus gali būti pateikta tikra forma su galiojančiu jos žetonu.

HTTPS taip pat neišsprendžia šios problemos. Šis protokolas šifruoja ryšį su konkrečia svetaine, tačiau nepatvirtina, kad jos sąsaja neklaidina, o savininko ketinimai yra sąžiningi.

Kaip apsaugoti savo svetainę

Pagrindinė apsaugos priemonė – HTTP atsakymo antraštė Content-Security-Policy su direktyva frame-ancestors. HTTP antraštė – tai informacija, kurią serveris siunčia naršyklei kartu su puslapiu. Ši direktyva nurodo, kurie šaltiniai gali įterpti puslapį į rėmelius.

Jei svetainės apskritai neturėtų būti leidžiama įterpti, galima naudoti:

Content-Security-Policy: frame-ancestors 'none'

Jei įterpimas turi būti leidžiamas tik iš to paties šaltinio – su tuo pačiu protokolo, pagrindinio kompiuterio vardo ir prievado deriniu – tinkama reikšmė yra:

Content-Security-Policy: frame-ancestors 'self'

Senesnis mechanizmas yra X-Frame-Options su reikšme DENY arba SAMEORIGIN. Jį galima naudoti kaip suderintą papildomą priemonę senesnėms kliento programoms. Direktyva frame-ancestors suteikia lankstesnę kontrolę, pavyzdžiui, leidžia suteikti įterpimo teisę konkrečiam partnerio šaltiniui. Ji turi būti siunčiama atsakymo antraštėje – įrašyta į meta žymą tokios apsaugos nesuteiks.

Praktinis diegimas apima tris žingsnius:

  1. Nustatykite, kurie puslapiai iš tiesų turi veikti rėmeliuose, pavyzdžiui, integruojant svetainę su partnerio sistema.
  2. Serveryje, programoje arba tarpinėje paslaugoje nustatykite tinkamą politiką ir patikrinkite antraštes naršyklės kūrėjo įrankiuose.
  3. Patikrinkite ir tai, ar nepageidaujamas įterpimas blokuojamas, ir tai, ar teisėtos integracijos veikia.

Nepasikliaukite vien JavaScript scenarijais, bandančiais iškelti puslapį iš rėmelio. Tokie sprendimai turi apribojimų, o jų apsaugą galima apeiti. Atliekant jautrias operacijas, taip pat reikalaukite pakartotinai patvirtinti tapatybę arba pateikite patvirtinimą, kuriame aiškiai aprašytas atliekamas veiksmas.

Ką gali padaryti naudotojas

Venkite puslapių, kuriuose reikalaujama atlikti nesuprantamų paspaudimų seką, ypač prisidengiant prizo atsiėmimu, vaizdo įrašo atrakinimu ar tariama patikra. Atnaujinkite naršyklę, tačiau nepamirškite, kad naujausia jos versija neatstoja lankomos svetainės apsaugos priemonių.

Jei įtariate, kad spustelėję atlikote nepageidaujamą veiksmą, reikiamą svetainę atidarykite savarankiškai, o ne per nuorodą įtartiname puslapyje. Patikrinkite veiklos istoriją ir pakeistas nuostatas, o apie nesankcionuotą operaciją praneškite pagalbos tarnybai. Svetainės savininkas pirmiausia turėtų patikrinti frame-ancestors antraštę paskyros puslapiuose ir administravimo skydelyje.

Taip pat skaitykite: Kas yra Mass Assignment?

Taip pat skaitykite

Sužinokite, kaip PHP-FPM apdoroja PHP užklausas, kuo skiriasi nuo žiniatinklio serverio ir kaip derinti procesus prie srauto bei išteklių.
Susipažinkite su BIND – atvirojo kodo DNS serverio programine įranga, jos paskirtimi ir atvejais, kai verta ją diegti patiems.
Sužinokite, ką reiškia Lenkijos REGON registras ir numeris, kuo jis skiriasi nuo NIP bei KRS ir kaip patikrinti įmonės duomenis.