Oynalar va freymlar

Clickjacking hujumi

Clickjacking (so'zma-so'z: bosishni o'g'irlash) โ€” bu foydalanuvchini bilmagan holda zararli tugmani bosishga majburlovchi hujum. Hujumchi qurbon saytni ko'rinmas iframega joylashtiradi va foydalanuvchi o'zi ko'rgan sahifada bosaman deb, aslida yashiringan saytdagi tugmani bosadi. Ushbu darsda hujum qanday ishlashini va undan qanday himoyalanishni chuqur o'rganamiz.

Bu dars asosan xavfsizlik nazariyasiga oid. Kod bloklari HTTP sarlavhalari va HTML misollari bo'lib, ular server sozlamasiga tegishli โ€” kurs playground'ida bajarilmaydi. Ular statik misol sifatida berilgan.

Hujumning g'oyasi

Clickjacking g'oyasi oddiy va ayni paytda ayyorona. Tasavvur qiling, hujumchi (evil.com sayti) foydalanuvchini biror ijtimoiy tarmoqdagi "Yoqdi" (Like) tugmasini yoki "Ha, ruxsat beraman" tugmasini bosishga majburlamoqchi.

Hujum bosqichlari:

  1. Hujumchi o'z saytida (evil.com) foydalanuvchini qiziqtiradigan biror narsa (masalan, "Bu yerni bosing va sovg'a yutib oling" tugmasi) ko'rsatadi;
  2. Aynan shu tugma ustiga, ko'rinmas qilib, qurbon saytni (masalan, facebook.comning "Like" tugmasi bilan) iframeda joylashtiradi;
  3. Foydalanuvchi "sovg'a" tugmasini bosaman deb o'ylab, aslida ko'rinmas iframe ichidagi "Like" tugmasini bosadi;
  4. Agar foydalanuvchi o'sha ijtimoiy tarmoqqa allaqachon kirgan bo'lsa (cookie mavjud), bosish haqiqiy hisoblanadi va harakat bajariladi.

Muhim jihat: hujum foydalanuvchi qurbon saytga tizimga kirgan (login qilingan) holatidan foydalanadi. Bosish qurbon saytda amalga oshadi, cookie'lar odatdagidek yuboriladi, shuning uchun sayt bosishni qonuniy deb qabul qiladi.

Hujumning texnik ko'rinishi

Hujumchi sahifasi taxminan quyidagicha tuziladi. Qurbon sahifasi iframeda yuklanadi, lekin u shaffof (opacity) qilinadi va aldov tugma tagida joylashtiriladi:

<style>
  iframe { /* qurbon sayt iframe'i */
    width: 400px;
    height: 100px;
    position: absolute;
    top: 0; left: -20px;
    opacity: 0.0001;  /* deyarli ko'rinmas! */
    z-index: 1;       /* tugmadan ustun */
  }

  .decoy { /* aldov tugma */
    position: absolute;
    top: 0; left: 0;
    z-index: 0;       /* iframe ostida */
  }
</style>

<div class="decoy">
  <button>Bu yerni bosing va sovg'a oling!</button>
</div>

<iframe src="https://victim.com"></iframe>

Bu yerda hiyla:

Ba'zi murakkab hujumlarda sichqoncha kursorini kuzatib, iframe'ni doim kursor ostida ushlab turadigan variantlar ("cursorjacking") ham mavjud. Umumiy g'oya bir xil: foydalanuvchi ko'rgan narsa va aslida bosgan narsasi bir-biridan farq qiladi.

Nega an'anaviy himoya yetarli emas?

Ba'zi eski himoya usullari (masalan, JavaScript orqali "agar men iframe ichida bo'lsam, chiqib ketaman" degan busting kod) ishonchsiz. Masalan:

// eski, ishonchsiz himoya (frame busting):
if (top !== self) {
  top.location = self.location;
}

Bu usul zaif, chunki:

Shuning uchun ishonchli himoya server tomonidagi HTTP sarlavhalari bilan ta'minlanadi โ€” brauzer saytni umuman iframe'ga qo'yishga ruxsat bermaydi.

Himoya 1: X-Frame-Options

X-Frame-Options โ€” bu sayt tomonidan yuboriladigan HTTP javob sarlavhasi. U brauzerga sahifani iframe'ga qo'yishga ruxsat berish yoki bermaslikni aytadi. Uch qiymati bor:

// Server javob sarlavhalari (misol):
X-Frame-Options: SAMEORIGIN

// yoki umuman ruxsat bermaslik:
X-Frame-Options: DENY

Agar brauzer bu sarlavhani ko'rsa va u DENY yoki mos kelmagan manba bo'lsa, u sahifani iframe'da umuman ko'rsatmaydi โ€” hujumchi qurbon saytni yashira olmaydi.

X-Frame-Options โ€” HTTP javob sarlavhasi. Uni HTML <meta> tegi orqali qo'yib bo'lmaydi โ€” u albatta server tomonidan yuborilishi kerak. Serveringiz konfiguratsiyasida (Nginx, Apache, Express va h.k.) sozlanadi.

Himoya 2: CSP frame-ancestors

Zamonaviyroq va moslashuvchan usul โ€” Content-Security-Policy (CSP) sarlavhasidagi frame-ancestors direktivasi. U X-Frame-Options o'rnini bosadi va ko'proq imkoniyat beradi:

// hech kim iframe'ga qo'ya olmasin:
Content-Security-Policy: frame-ancestors 'none'

// faqat o'z manbamiz:
Content-Security-Policy: frame-ancestors 'self'

// aniq ro'yxat:
Content-Security-Policy: frame-ancestors 'self' https://trusted.com https://partner.com
Yangi loyihalarda frame-ancestorsni afzal ko'ring, chunki u moslashuvchan va zamonaviy standart. Eski brauzerlar uchun qo'shimcha xavfsizlik sifatida X-Frame-Optionsni ham qo'shib qo'yish mumkin โ€” ikkalasini birga ishlatish keng tarqalgan amaliyot.

Himoya 3: SameSite cookie

Clickjacking hujumi foydalanuvchining cookie'lari avtomatik yuborilishiga tayanadi (chunki qurbon saytga tizimga kirgan). Agar autentifikatsiya cookie'lari boshqa saytdagi iframe'dan yuborilmasa, hujum foydasiz bo'ladi โ€” sayt bosishni anonim deb qabul qiladi.

Cookie'ning SameSite atributi aynan shu vaziyatni boshqaradi:

// Server tomonidan cookie o'rnatish (misol):
Set-Cookie: session=abc123; SameSite=Strict; Secure; HttpOnly
SameSite=Lax (yoki Strict) tufayli, hujumchi iframe'idagi qurbon saytga so'rovda autentifikatsiya cookie'lari qo'shilmaydi. Shunda bosish tizimga kirmagan (anonim) foydalanuvchi harakati sifatida ko'rinadi va zararli amal bajarilmaydi.
SameSite kuchli himoya, lekin u yagona yechim emas. Ba'zi holatlar (masalan, GET orqali amalga oshiriladigan xavfsiz bo'lmagan operatsiyalar yoki SameSite=None ishlatilgan cookie'lar) hali ham zaif bo'lishi mumkin. Uni frame-ancestors/X-Frame-Options bilan birga ishlating.

Ko'p qatlamli himoya

Ishonchli xavfsizlik uchun himoya usullarini birgalikda qo'llash tavsiya etiladi. To'liq strategiya:

  1. frame-ancestors (CSP) โ€” sahifani begona iframe'ga qo'yishni to'sish (asosiy himoya);
  2. X-Frame-Options โ€” eski brauzerlar uchun zaxira himoya;
  3. SameSite cookie โ€” cross-site kontekstda autentifikatsiya cookie'larini yubormaslik;
  4. Muhim amallar uchun qo'shimcha tasdiqlash (masalan, tugma bosilgach parolni yoki CAPTCHA'ni so'rash) โ€” hujumchi buni takrorlay olmaydi.
Xavfsizlikda "chuqurlikdagi himoya" (defense in depth) tamoyili muhim: bitta qatlam yiqilsa, boshqasi himoya qiladi. Clickjacking'da frame-ancestors + SameSite + muhim amallar uchun tasdiqlash birgalikda kuchli himoya beradi.

Xulosa