У цій статті йтиме мова про тестування безпеки на прикладі одного з прикладів уразливості, а саме XSS-ін’єкцій.
Тестування безпеки: XSS-ін’єкції
- 16.06.2020
- Опубліковано: Admin

Тестування безпеки (Security testing) – це перевірка, яка дозволяє визначити наскільки програмне забезпечення захищене від різних атак. Мета тестування – виявити вразливості в продукті, визначити рівень захисту даних і системи в цілому від різних атак зловмисників. Тестування безпеки перевіряє те, як вбудовані в систему захисні механізми будуть реагувати на спроби проникнути до системи. Але навіть після проведення повного циклу тестування не буде абсолютної впевненості, що продукт дійсно захищений від атак. Можна бути впевненим тільки в тому, що кількість несанкціонованих проникнень, крадіжок інформації і втрат даних буде значно меншою.
XSS (англ. Cross-Site Scripting – «міжсайтовий скриптинг») – це один з видів атаки на веб-систему, що є на сьогодні найпоширенішим типом вразливості. При такій атаці зловмисник впроваджує шкідливий код (скрипт), який взаємодіє з веб-сервером зловмисника, до сторінки веб-сайту. Коли користувач зайде на таку сторінку, код буде виконаний.
Напевно багато хто стикався з XSS вразливістю на будь-яких сайтах. Це з'являється при відкритті сайту поп-ап з інформацією що не стосується запитуваного сайту, так би мовити, реклама, що псує авторитет сайту.
Вразливими до XSS є додатки, які не перевіряють і не перетворюють дані перед додаванням їх на сторінку. Також сторінка може оновлюватися через API браузера з використанням даних, що надані користувачем та які містять HTML або JavaScript код. За допомогою XSS можна виконати різні сценарії в браузері для перехоплення сесій користувачів, підміни сторінок сайту або перенаправлення користувачів на шкідливі сайти. Розробник може надмірно довіряти користувачеві в питанні внесення шкідливої інформації на сторінку, що також служить причиною вразливості веб-сайту до атак.
По вектору атаки XSS класифікують на наступні типи:
Відображені (Непостійні)
Це найпоширеніший тип XSS атак на сайтах. Таку атаку проводять додаючи скрипт до URL адреси сайту. Оскільки дані не проходять перевірку, скрипт буде екрануватися браузером користувача.
Як це працює?
Зловмисник визначив, що на якомусь сайті є вразливість. Ця вразливість відображає потрібне повідомлення після додавання певного скрипта до URL адреси сайту, який і викликає цю вразливість. Після цього він відправить це посилання недосвідченому користувачу через пошту або месенджер.
Вразливість полягає в тому, що GET-параметр URL не фільтрується а ні під час передачі скрипта, а ні перед його використанням у вихідних даних. Дана вразливість відноситься до класів неправильної обробки вхідних і вихідних даних. Є найпоширенішою вразливістю, завдяки якій можливе проведення більшості відомих атак.
Збережені (Постійні)
Цей тип XSS атак більш серйозний, ніж відображені XSS. При такому типі атаки зловмисник не просто додає скрипт до URL адреси, але й зберігає код (скрипт) на сервер. В такому випадку код буде виконуватися в браузері кожен раз, коли користувач заходить на сторінку. Найпростіший приклад такої вразливості – форуми, так як на них дозволяється без обмежень залишати коментарі в HTML форматі.
Як це працює?
Зловмисник визначив, що в чаті на якомусь сайті є вразливість, яка буде відображати потрібне повідомлення кожного разу після переходу на сторінку чату. Ця вразливість буде відтворюватися поки її не усуне адміністратор.
Вразливість до XSS виникає при здійсненні некоректної фільтрації під час зберігання вхідних даних в базу даних на сервері або під час запису даних в файли, після чого ці дані виводяться в браузері користувача.
XSS DOM-моделі
DOM (від англ. Document Object Model – «об'єктна модель документа») – це програмний інтерфейс, який не залежить від платформи і мови. Він дозволяє програмам і скриптам отримати доступ до вмісту HTML-, XHTML- і XML-документів, змінювати вміст, структуру і оформлення таких документів.
З визначення «DOM» можна зробити висновок, що основною метою «DOM XSS» є внесення змін до об'єктної моделі документу сайту, який атакується, за допомогою виконання шкідливого JavaScript-коду в контексті сайту, що атакується.
Основні напрямки атак для DOM-моделі:
- зміна сторінок сайту;
- виконання дій від імені користувача;
- викрадення куків;
- кейлоггер (програмне забезпечення або апаратний пристрій, призначений для перехоплення даних, які вводяться з клавіатури);
- сканування внутрішньої мережі.
Способи захисту
Для захисту від атак необхідно виконувати певні правила під час написання програми. Не можна довіряти даним, які надходять від користувача або від будь-якого стороннього джерела. Необхідно відокремлювати неперевірені дані від активного наповнення браузера. Це можна зробити різними способами:
- використовувати фреймворки, які забезпечують автоматичне перетворення даних. Аналізувати обмеження XSS-захисту кожного фреймворка і забезпечувати відповідну обробку цих виключень;
- перетворювати не перевірені дані з HTTP-запитів, грунтуючись на контексті, в HTML-коді (тілі, атрибутах, JavaScript, CSS або URL) для запобігання віддзеркаленого XSS і виконання збережених XSS;
- застосовувати контекстне кодування при зміні документа в браузері користувача, щоб запобігти XSS атаки на основі DOM;
- замінювати або доповнювати кодування валідацією, якщо воно неможливе або недоречне в деяких ситуаціях.
Підводячи підсумки, можна сказати, що XSS – це один з видів вразливості веб-додатків, що дає можливість тому, хто атакує, впровадити свій сценарій в веб-сторінки, які проглядаються іншими користувачами. Для того, щоб убезпечити ресурс, необхідно дотримуватися основних принципів захисту ресурсу і оцінювати систему на наявність недоліків в її безпеці з точки зору зловмисника.
