Ushbu bo'limda biz clickjacking nima ekanligini tushuntiramiz, clickjacking hujumlarining keng tarqalgan misollarini bayon qilamiz va bu hujumlardan qanday himoyalanish mumkinligini muhokama qilamiz.
Clickjacking — bu interfeysga asoslangan hujum bo'lib, unda foydalanuvchi aldov (decoy) saytdagi boshqa biror kontentni bosish orqali yashirin saytdagi harakatga undovchi (actionable) kontentni bosishga aldab tushiriladi. Quyidagi misolni ko'rib chiqing:
Veb-foydalanuvchi aldov (decoy) saytga kiradi (ehtimol bu elektron pochta orqali berilgan havoladir) va sovrin yutish uchun tugmani bosadi. O'zi bilmagan holda, u hujumchi tomonidan muqobil yashirin tugmani bosishga aldab tushiriladi va bu boshqa saytdagi hisobga to'lov amalga oshirilishiga olib keladi. Bu clickjacking hujumiga misoldir. Bu usul, aytaylik, iframe ichida joylashgan tugma yoki yashirin havolani o'z ichiga olgan ko'rinmas, harakatga undovchi veb-sahifani (yoki bir nechta sahifani) qo'shishga bog'liq. iframe foydalanuvchi kutayotgan aldov veb-sahifa kontenti ustiga qoplab qo'yiladi. Bu hujum CSRF hujumidan shu bilan farq qiladiki, bunda foydalanuvchidan tugmani bosish kabi harakat bajarish talab qilinadi, CSRF hujumi esa foydalanuvchining xabari yoki kiritmasisiz butun so'rovni soxtalashtirishga bog'liq.
CSRF hujumlaridan himoya ko'pincha CSRF token yordamida ta'minlanadi: bu sessiyaga xos, bir marta ishlatiladigan raqam yoki nonce. Clickjacking hujumlari CSRF token bilan bartaraf etilmaydi, chunki maqsadli sessiya haqiqiy veb-saytdan yuklangan kontent bilan o'rnatiladi va barcha so'rovlar o'z domenida (on-domain) sodir bo'ladi. CSRF tokenlar so'rovlarga joylanadi va odatdagidek ishlaydigan sessiyaning bir qismi sifatida serverga uzatiladi. Oddiy foydalanuvchi sessiyasidan farqi shundaki, bu jarayon yashirin iframe ichida sodir bo'ladi.
Clickjacking hujumlari qatlamlarni (layers) yaratish va boshqarish uchun CSS'dan foydalanadi. Hujumchi maqsadli veb-saytni aldov sayt ustiga qoplangan iframe qatlami sifatida qo'shadi. style tegi va parametrlaridan foydalanadigan misol quyidagicha:
<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>Maqsadli veb-sayt iframe'i brauzer ichida shunday joylashtiriladiki, mos width va height joylashuv qiymatlaridan foydalanib, maqsadli harakat aldov sayt bilan aniq mos tushadi (overlap). Absolut va nisbiy joylashuv qiymatlari ekran o'lchami, brauzer turi va platformadan qat'i nazar, maqsadli veb-sayt aldovning ustiga aniq tushishini ta'minlash uchun ishlatiladi. z-index iframe va veb-sayt qatlamlarining ustma-ust joylashish tartibini (stacking order) belgilaydi. opacity qiymati 0.0 (yoki 0.0 ga yaqin) qilib belgilanadi, shunda iframe kontenti foydalanuvchi uchun shaffof bo'ladi. Brauzerning clickjacking himoyasi chegara (threshold) asosidagi iframe shaffofligini aniqlashni qo'llashi mumkin (masalan, Chrome'ning 76-versiyasi bu xatti-harakatni o'z ichiga oladi, Firefox esa yo'q). Hujumchi himoya xatti-harakatlarini ishga tushirmasdan kerakli effektga erishish uchun opacity qiymatlarini tanlaydi.
Yuqorida tasvirlanganidek, clickjacking uchun proof of concept'ni qo'lda yaratishingiz mumkin bo'lsa-da, amalda bu ancha zerikarli va ko'p vaqt talab qiladi. Clickjacking'ni real sharoitda sinab ko'rayotganingizda, biz buning o'rniga Burp'ning Clickbandit vositasidan foydalanishni tavsiya qilamiz. Bu sizga freym qilinadigan (frameable) sahifada kerakli harakatlarni bajarish uchun brauzeringizdan foydalanishga imkon beradi, so'ngra mos clickjacking qoplamasini (overlay) o'z ichiga olgan HTML faylni yaratadi. Bundan foydalanib, birorta ham HTML yoki CSS satrini yozmasdan, bir necha soniya ichida interaktiv proof of concept hosil qilishingiz mumkin.
Forma to'ldirish va yuborishni talab qiladigan ba'zi veb-saytlar yuborishdan oldin GET parametrlari yordamida forma kiritmalarini oldindan to'ldirishga ruxsat beradi. Boshqa veb-saytlar forma yuborilishidan oldin matn talab qilishi mumkin. GET qiymatlari URL'ning bir qismini tashkil qilgani uchun maqsadli URL hujumchi tanlagan qiymatlarni o'z ichiga oladigan qilib o'zgartirilishi mumkin va shaffof "yuborish" (submit) tugmasi, xuddi oddiy clickjacking misolidagidek, aldov saytga qoplab qo'yiladi.
Clickjacking hujumlari veb-saytlarni freym qilish (framing) mumkin bo'lgan har qanday holatda amalga oshirilishi mumkin. Shu sababli, oldini olish usullari veb-saytlarni freym qilish imkoniyatini cheklashga asoslanadi. Veb-brauzer orqali amalga oshiriladigan keng tarqalgan mijoz tomonidagi (client-side) himoya — bu frame busting yoki frame breaking skriptlaridan foydalanishdir. Ular NoScript kabi ixtisoslashtirilgan brauzer JavaScript qo'shimchalari yoki kengaytmalari orqali joriy etilishi mumkin. Skriptlar ko'pincha quyidagi xatti-harakatlarning ba'zilarini yoki barchasini bajaradigan qilib tuziladi:
Frame busting usullari ko'pincha brauzerga va platformaga xos bo'ladi va HTML'ning moslashuvchanligi tufayli ularni odatda hujumchilar chetlab o'tishi mumkin. Frame buster'lar JavaScript bo'lgani uchun brauzerning xavfsizlik sozlamalari ularning ishlashiga to'sqinlik qilishi mumkin yoki brauzer hatto JavaScript'ni umuman qo'llab-quvvatlamasligi ham mumkin. Frame buster'larga qarshi hujumchining samarali chorasi — HTML5 iframe sandbox atributidan foydalanishdir. Bu allow-forms yoki allow-scripts qiymatlari bilan o'rnatilganda va allow-top-navigation qiymati tushirib qoldirilganda, frame buster skript zararsizlantirilishi mumkin, chunki iframe o'zining top oyna ekanligini yoki emasligini tekshira olmaydi:
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>allow-forms va allow-scripts qiymatlarining ikkalasi ham iframe ichida ko'rsatilgan harakatlarga ruxsat beradi, biroq eng yuqori darajadagi (top-level) navigatsiya o'chirib qo'yiladi. Bu maqsadli sayt ichidagi funksionallikka imkon bergan holda frame busting xatti-harakatlarini to'xtatadi.
Hozirgacha biz clickjacking'ni mustaqil (self-contained) hujum sifatida ko'rib chiqdik. Tarixan, clickjacking Facebook sahifasidagi "like"larni oshirish kabi xatti-harakatlarni amalga oshirish uchun ishlatilgan. Biroq clickjacking'ning haqiqiy kuchi u DOM XSS hujumi kabi boshqa hujum uchun tashuvchi (carrier) sifatida ishlatilganda namoyon bo'ladi. Bu birlashtirilgan hujumni amalga oshirish, hujumchi avval XSS eksploytini aniqlagan deb faraz qilsak, nisbatan sodda. So'ngra XSS eksployt iframe maqsadli URL'i bilan birlashtiriladi, shunda foydalanuvchi tugma yoki havolani bosadi va natijada DOM XSS hujumini ishga tushiradi.
Hujumchi tomonidan maqsadli veb-saytga kiritmalarni manipulyatsiya qilish bir nechta harakatni talab qilishi mumkin. Masalan, hujumchi foydalanuvchini chakana savdo veb-saytidan biror narsa sotib olishga aldashni xohlashi mumkin, shuning uchun buyurtma berishdan oldin mahsulotlarni savatga qo'shish kerak bo'ladi. Bu harakatlar hujumchi tomonidan bir nechta bo'linma (division) yoki iframelardan foydalanib amalga oshirilishi mumkin. Bunday hujumlar samarali va sezdirmas bo'lishi uchun hujumchi tomonidan katta aniqlik va ehtiyotkorlikni talab qiladi.
Biz keng tarqalgan brauzer tomonidagi oldini olish mexanizmini, ya'ni frame busting skriptlarini muhokama qildik. Biroq, hujumchi bu himoyalarni chetlab o'tishi ko'pincha oson ekanligini ko'rdik. Shu sababli, brauzerning iframe ishlatilishini cheklaydigan va clickjacking'ga qarshi kurashuvchi, server tomonidan boshqariladigan protokollar ishlab chiqilgan.
Clickjacking — bu brauzer tomonidagi xatti-harakat bo'lib, uning muvaffaqiyati yoki muvaffaqiyatsizligi brauzer funksionalligiga hamda amaldagi veb-standartlar va eng yaxshi amaliyotlarga muvofiqligiga bog'liq. Clickjacking'ga qarshi server tomonidagi himoya iframe kabi komponentlardan foydalanishga cheklovlarni belgilash va yetkazish orqali ta'minlanadi. Biroq, himoyaning amalga oshirilishi brauzerning bu cheklovlarga muvofiqligi va ularni majburlashiga bog'liq. Server tomonidagi clickjacking himoyasi uchun ikkita mexanizm — X-Frame-Options va Content Security Policy.
X-Frame-Options dastlab Internet Explorer 8'da norasmiy javob sarlavhasi (response header) sifatida joriy etilgan va boshqa brauzerlarda ham tez qabul qilingan. Bu sarlavha veb-sayt egasiga iframe yoki obyektlardan foydalanish ustidan nazorat beradi, shunda veb-sahifani freym ichiga qo'shishni deny direktivi bilan taqiqlash mumkin:
X-Frame-Options: denyMuqobil ravishda, freym qilishni sameorigin direktivi yordamida veb-sayt bilan bir xil kelib chiqishga (same origin) cheklash mumkin
X-Frame-Options: sameoriginyoki allow-from direktivi yordamida nomlangan veb-saytga cheklash mumkin:
X-Frame-Options: allow-from https://normal-website.comX-Frame-Options brauzerlarda izchil tarzda amalga oshirilmagan (masalan, allow-from direktivi Chrome'ning 76-versiyasida yoki Safari 12'da qo'llab-quvvatlanmaydi). Biroq, ko'p qatlamli mudofaa strategiyasining bir qismi sifatida Content Security Policy bilan birgalikda to'g'ri qo'llanilganda, u clickjacking hujumlariga qarshi samarali himoya ta'minlashi mumkin.
Content Security Policy (CSP) — bu XSS va clickjacking kabi hujumlarga qarshi yumshatish (mitigation) ta'minlaydigan aniqlash va oldini olish mexanizmi. CSP odatda veb-serverda quyidagi ko'rinishdagi qaytariladigan sarlavha (return header) sifatida amalga oshiriladi:
Content-Security-Policy: policybu yerda policy — nuqta-vergul bilan ajratilgan siyosat direktivlari qatoridir. CSP mijoz brauzeriga veb-resurslarning ruxsat etilgan manbalari haqida ma'lumot beradi, brauzer esa buni zararli xatti-harakatlarni aniqlash va ushlab qolishga qo'llashi mumkin.
Tavsiya etilgan clickjacking himoyasi — ilovaning Content Security Policy'siga frame-ancestors direktivini qo'shishdir. frame-ancestors 'none' direktivi o'z xatti-harakati bo'yicha X-Frame-Options deny direktiviga o'xshaydi. frame-ancestors 'self' direktivi esa umuman X-Frame-Options sameorigin direktiviga ekvivalentdir. Quyidagi CSP freymlarni faqat bir xil domenga oq ro'yxatga (whitelist) kiritadi:
Content-Security-Policy: frame-ancestors 'self';Muqobil ravishda, freym qilishni nomlangan saytlarga cheklash mumkin:
Content-Security-Policy: frame-ancestors normal-website.com;Clickjacking va XSS'ga qarshi samarali bo'lishi uchun CSP'lar puxta ishlab chiqish, joriy etish va sinovdan o'tkazishni talab qiladi va ko'p qatlamli mudofaa strategiyasining bir qismi sifatida ishlatilishi kerak.