Що таке Clickjacking і як від нього захиститися
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: Clickjacking, також відомий як UI redress attack, — це атака, під час якої користувача спонукають натиснути не той елемент, який він бачить. Наприклад, зловмисник може розмістити невидиму сторінку з кнопкою поверх начебто безпечної кнопки гри. Власник сайту обмежує такі атаки насамперед через контроль того, хто може вбудовувати його сторінки, а користувач — обережно ставлячись до підозрілих взаємодій.
Як працює перехоплення кліків
Браузер може показувати одну сторінку всередині іншої за допомогою елемента iframe, тобто вбудованої рамки. Це звичайна функція, яку використовують, зокрема, для показу відео чи карт. Під час атаки clickjacking зловмисник використовує її, щоб приховати справжню ціль натискання під підготовленим інтерфейсом або над ним.
Типовий сценарій такий: користувач відкриває сторінку, яку контролює зловмисник, а вона завантажує в рамці інший сайт. Рамка прозора або відповідним чином обрізана й розташована так, щоб її кнопка опинилася саме там, де користувач збирається натиснути. Користувач бачить одну команду, але браузер реєструє взаємодію з іншим елементом.
При цьому зловмиснику не обов’язково читати вміст чужої сторінки. Обмеження браузера на доступ між різними сайтами не виключають самого вбудовування та спрямування кліків. Тому захист даних від читання й захист інтерфейсу від вбудовування — два окремі завдання.
Приклад: винагорода, що запускає іншу дію
Уявіть сторінку з простою грою та кнопкою «Отримати винагороду». Над цією кнопкою розташована невидима рамка з панеллю іншого сервісу. Якщо сервіс дозволяє вбудовувати свої сторінки, а сеанс користувача діє в цій рамці, натискання може потрапити на кнопку, яка виконує операцію в його обліковому записі.
Це не означає, що кожне відвідування шкідливої сторінки одразу призводить до захоплення облікового запису. Успіх атаки залежить, зокрема, від захисту цільового сайту, доступності сеансу авторизованого користувача в рамці та того, чи потребує операція додаткового підтвердження. Налаштування файлів cookie й обмеження браузера можуть ускладнити такий сценарій, але не замінюють захисту від вбудовування.
Можливі наслідки — ненавмисна зміна налаштувань, виконання дії в сервісі або підтвердження операції. Додаткове підтвердження, що потребує свідомої дії користувача, знижує ризик. Проте сама наявність ще однієї кнопки не гарантує захисту: зловмисник може спробувати провести жертву через кілька натискань.
Чим clickjacking відрізняється від фішингу та CSRF
Під час фішингу шахрай зазвичай видає себе за того, кому довіряють, щоб виманити дані або спонукати до певної дії. Натомість під час clickjacking користувач може натиснути елемент справжнього сервісу, але прихований в оманливому оточенні. Обидві техніки можуть застосовуватися разом, проте механізми обману різні.
CSRF, тобто примусове надсилання небажаного запиту до сервісу, використовує права авторизованого користувача без його свідомої згоди. Clickjacking спрямований на перехоплення взаємодії з інтерфейсом. Токена захисту від CSRF недостатньо для захисту від clickjacking, оскільки натискання може активувати справжню форму з її чинним токеном.
HTTPS також не розв’язує цієї проблеми. Він шифрує з’єднання із сайтом, але не підтверджує ані доброчесності його інтерфейсу, ані намірів власника.
Як захистити власний сайт
Основний засіб захисту — заголовок відповіді HTTP Content-Security-Policy з директивою frame-ancestors. Заголовок HTTP — це інформація, яку сервер надсилає браузеру разом зі сторінкою. Директива визначає, які джерела можуть вбудовувати цю сторінку в рамки.
Якщо сайт узагалі не слід вбудовувати, можна застосувати:
Content-Security-Policy: frame-ancestors 'none'
Якщо вбудовування має бути дозволене лише в межах того самого джерела — тієї самої комбінації протоколу, хоста й порту — відповідне значення таке:
Content-Security-Policy: frame-ancestors 'self'
Старіший механізм — X-Frame-Options зі значенням DENY або SAMEORIGIN. Його можна використовувати як узгоджене доповнення для старіших клієнтів. Директива frame-ancestors забезпечує гнучкіший контроль, наприклад дозволяє вказати конкретне джерело партнера. Її потрібно надсилати як заголовок відповіді: розміщення в тегу meta не забезпечить такого захисту.
Практичне впровадження складається з трьох кроків:
- Визначте, які сторінки справді мають працювати в рамках, наприклад як частина інтеграції з партнером.
- Налаштуйте відповідну політику на сервері, у застосунку або проміжному сервісі та перевірте заголовки в інструментах розробника браузера.
- Перевірте як блокування небажаного вбудовування, так і роботу дозволених інтеграцій.
Не покладайтеся лише на скрипти JavaScript, які намагаються вивести сторінку з рамки. Такі рішення мають обмеження, і їх можна обійти. Для чутливих операцій також застосовуйте повторну автентифікацію або підтвердження, яке чітко описує виконувану дію.
Що може зробити користувач
Уникайте сайтів, які вимагають низки незрозумілих натискань, особливо під приводом отримання винагороди, розблокування відео чи нібито перевірки. Оновлюйте браузер, але пам’ятайте, що актуальна версія не замінить захисту на боці відвідуваного сервісу.
Якщо ви підозрюєте, що натискання запустило небажану дію, відкрийте відповідний сервіс самостійно, а не за посиланням на підозрілій сторінці. Перевірте історію активності та змінені налаштування, а про несанкціоновану операцію повідомте службі підтримки. Власнику сайту варто почати з перевірки заголовка frame-ancestors на сторінках облікового запису й адміністративної панелі.
Дивіться також: Що таке Mass Assignment?
